/ / İkili arama, bir dizideki öğeyi bulmanın en kolay yollarından biridir

İkili arama, bir dizideki bir öğeyi bulmanın en kolay yollarından biridir.

Довольно часто программисты, даже начинающие, 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

Ikili arama
bu konuyu incelemenin anlamı nedir?Bu nedenle, belirli bir tane bulmanız gereken en az 100.000.000 öğe boyutuna sahip bir dizi olduğunu varsayalım. Tabii ki, bu problem, istenen elemanı dizideki tüm elemanlarla karşılaştırmak için döngüyü kullanacağımız basit bir doğrusal arama ile kolayca çözülebilir. Sorun şu ki, bu fikri uygulamak çok fazla zaman alacaktır. Birkaç prosedür için basit bir Pascal programında ve ana metnin üç satırıyla bunu fark etmeyeceksiniz, ancak çok sayıda şubesi ve iyi işlevselliği olan az çok büyük projelere başladığınızda, bitmiş programın yüklenmesi çok uzun sürecektir. Özellikle bilgisayarın performansı düşükse. Bu nedenle, arama süresini en az yarıya indiren bir ikili arama vardır.

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.

ikili arama pascal

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 başla

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.

1357101218

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.

7101218

ikili arama pascal
12 değeri 10'dan büyük olduğu için 7'yi atarız. Yalnızca 10, 12 ve 18 kalır.

Burada orta eleman zaten 12, bu istenen sayı. Görev tamamlandı - 12 numara bulundu.

sevdim:
0
Popüler Gönderiler
Manevi gelişim
gıda
y