Довольно часто программисты, даже начинающие, Belirli bir sayı bulmanız gereken bir sayı kümesi olduğu gerçeğiyle yüzleşin. Bu koleksiyona dizi denir. İçinde doğru elemanı bulmak için çok çeşitli yollar var. Ancak, aralarındaki en basit haklı bir ikili arama olarak kabul edilebilir. Bu yöntem nedir? Ve ikili arama nasıl uygulanır? Pascal, bu tür bir programı düzenlemek için en kolay ortamdır, bu yüzden onu çalışmak için kullanırız.
İlk olarak, bu yöntemin avantajlarına bakacağız, çünkü anlayabiliriz
Peki, bunun prensibi nediryöntem? İkili aramanın herhangi bir dizide değil, sadece sıralı bir sayı kümesinde işe yaramadığını hemen belirtmek gerekir. Sonraki her adımda, dizinin orta elemanı alınır (yani, eleman sayısı ile). İstenen sayı ortalamadan büyükse, soldaki her şey, yani orta elemandan daha az, atılabilir ve orada aranamaz. Tersine, ortalamanın altındaysa - sağdaki sayılar arasında arama yapamazsınız. Ardından, ilk öğenin tüm dizinin orta öğesi olacağı ve sonuncusunun sonuncusu olarak kalacağı yeni bir arama alanı seçiyoruz. Yeni bölgenin ortalama sayısı, tüm segmentin ¼'sidir, yani (son öğe + tüm dizinin orta öğesi) / 2. Yine aynı işlem gerçekleştirilir - dizinin ortalama sayısı ile karşılaştırma. İstenen değer ortalamanın altındaysa, bu orta eleman bulunana kadar sağ tarafı atarız ve daha fazlasını yaparız.
Tabii ki, ikili aramanın nasıl yazıldığına dair bir örneğe bakmak en iyisidir. Pascal buradaki herkes için uygundur - sürüm önemli değildir. Basit bir program yazalım.
1'den h'ye kadar bir dizi olacak"massiv", "niz" adlı aramanın alt sınırını, üst sınır "verh" olarak adlandırılan bir değişkeni, aramanın orta elemanı "sredn" dir; ve aradığınız numara isk.
İlk olarak, arama aralığının üst ve alt sınırlarını atarız:
alt: = 1;
verh: = h + 1;
Sonra "alt sınır üst sınırdan daha azken" döngüsünü düzenliyoruz:
Niz
Her adımda segmenti 2'ye bölün:
sredn: = (niz + verh) div 2; {div işlevini kullanın, çünkü kalanlar olmadan bölünürüz}
Her kontrol ettiğimizde. Ortalama istenen değere eşitse, istenen eleman zaten bulunduğundan döngüyü keseriz:
sredn = isk ise kırılır;
Dizinin orta elemanı istenen olandan daha büyükse, sol tarafı atarız, yani orta elemanı üst sınıra atarız:
dizi yusrednsch> dava üst: = ortalama;
Aksine, o zaman onu alt sınır yaparız:
başka alt: = ortalama;
son;
Programda olacak olan bu.
İkili yöntemin pratikte nasıl görüneceğini görelim. Böyle bir dizi alalım: 1, 3, 5, 7, 10, 12, 18 ve içinde 12 sayısını arayacağız.
Toplamda 7 elementimiz var, bu yüzden dördüncü ortalama olacak, değeri 7.
1 | 3 | 5 | 7 | 10 | 12 | 18 |
12 değeri 7'den büyük olduğu için 1,3 ve 5 elemanlarını atabiliriz. Sonra 4 sayı kaldı, 4/2 geriye kalan 2. Yani yeni orta eleman 10 olacak.
7 | 10 | 12 | 18 |
Burada orta eleman zaten 12, bu istenen sayı. Görev tamamlandı - 12 numara bulundu.