Komik: İkili arama nedir?

Yazar | Cute and Stupid Little Grey

Sorumlu Editör | Hu Weiwei

----- sonraki gün -----

Bu ne anlama geliyor? İki kestaneden bahsedelim:

Sıralı bir dizi verildiğinde

2,5,7,9,12,14,20,26,30

Dava 1:

Durum 2:

Bu neden en verimli?

Çünkü, ister çok büyük ister çok küçük olsun, bir sayı seçtiğiniz her zaman,

Her ikisi de kalan seçenekleri yarı yarıya azaltabilir.

0 ile 1000 arasında bir tam sayı verildiğinde:

İlk kez 500'ü seçtik ve çok büyük olduğunu gördük.

Ardından, seçim aralığı bir sonraki sefer 1 ila 499 arasında olur:

İkinci kez 250'yi seçtiğimizde, hala çok büyük olduğunu gördük.

Ardından, seçim aralığı bir dahaki sefere 1 ila 249 olur:

Üçüncü kez 125'i seçtik ve çok küçük olduğunu gördük.

Ardından bir sonraki seçim aralığı 126 ila 249 olur:

Benzetme yaparak, en kötü durumu tahmin etmek için kaç tahmine ihtiyacınız var?

Cevap log1000 = 10 kere,

Yani, orijinal aralık aralığı 10 kez "yarıya indirilmiştir".

Şimdi analiz ettiğimiz şey sayıları tahmin etme oyunudur.

Senaryoyu ilk görüşme sorusuna dönüştürürsek:

1000 tamsayı eleman içeren sıralı bir dizide belirli bir tamsayı bulun,

Nasıl yapılır?

Aynısı - için de geçerli

Önce indeksi 499 olan elemanı yargılayabiliriz (çünkü dizi indeksi 0'dan başlayıp 999'da biter),

Eleman aradığınız tam sayıdan büyükse,

Alt indisi 249 olan elemanı değerlendirelim,

Sonra alt simge 124'ün elemanını belirleyin ...

Ve böylece, sonunda istediğiniz öğeyi bulana kadar

Veya seçim aralığı 0'a eşittir.

Yukarıdaki süreç,

Sözde ikili arama algoritması,

Aramanın zaman karmaşıklığı log (n) 'dir.

public static int binarySearch (int array, int target) { // Aralığın başlangıç noktasını bulun int başlangıç = 0; // Aralığın sonunu bul int end = dizi.length-1; // Aralığın medyanını bulun int mid; while (başla < = end) { // mid = (başlangıç + bitiş) / 2 taşabilir orta = başlangıç + (bitiş-başlangıç) / 2; eğer (dizi == hedef) { ortasına dönüş; } else if (dizi < hedef){ başlangıç = orta + 1; }Başka{ son = 1 ortası; } } dönüş -1; } public static void main (String args) { int dizi = yeni int; for (int i = 0; i < 1000; i ++) { dizi = i; } System.out.println (binarySearch (dizi, 173)); }

Bu makale, CSDN'nin konumunu değil, yalnızca yazarın bakış açısını temsil etmektedir.

Eski şehrin anısını anlamak için ruh sanatını kullanın ve aynı zamanda mükemmel bir sokak çekim mekanıdır.
önceki
İyi görünümlü ve eğitimli Tayland'ın büyük yıldızlarının envanteri, hepsi gizli
Sonraki
Patlamak! Xiangfang 1 Nolu Harbin Topluluğundaki 12 aracın camları kırıldı ve eşyaları kayboldu
Baidu'ya veda edin, en iyi teknik yetenekler nerede?
16 saat! 5G! 3.84 milyon insan! Bu Dragon Boat Festivali canlı yayınının arkasındaki sebat ve duyguya bakın
Wei Jianjun ve Zhu Huarong tesadüfen "fiyat savaşı" hakkında ne söyledi?
Otomatik park etme gerçekten güvenilir mi? Changan'ın 550.000'lik en yüksek ödemesi sizi rahatlatır
GACın Mayıs satışları% 3.6 düştü, Japon ürünleri% 70 katkıda bulundu, Trumpchi% 38.2 düştü
Yeni Pentium stratejik sürecini, Pentium T33'ü veya listelemenin üçüncü çeyreğini hızlandırın
TVB'nin en iyi oyuncusu kız ve erkek kardeş sevgisine açıkça direniyor: Belki biraz daha bilgili olabilirim
Daha güçlü güç, 600 km'nin üzerinde pil ömrü, Tesla Model S spor çizimleri ortaya çıktı
Lin Feng anakara kız arkadaşı Zhang Xinyue ile doğum gününde evlenecek mi? Çocuk Bayramı'nda gizlice evlilik teklifi
Chery'nin ilk yeni perakende modeline dönüştürülen Tiggo 7i, bu ayın ortasında resmi olarak piyasaya sürüldü.
Çalışma özgürlüğü daha rahat Eski TVB oyuncusu: daha fazla alana dokunabilir
To Top