Penulis | Cute and Stupid Little Grey
Editor yang bertanggung jawab | Hu Weiwei
----- hari berikutnya -----
Apa artinya? Mari kita kutip dua buah kastanye:
Diberikan array yang dipesan
2,5,7,9,12,14,20,26,30
Kasus 1:
Kasus 2:
Mengapa ini yang paling efisien?
Karena setiap kali Anda memilih angka, apakah itu terlalu besar atau terlalu kecil,
Keduanya dapat mengurangi opsi yang tersisa hingga setengahnya.
Diberikan bilangan bulat dalam rentang 0 hingga 1000:
Kami memilih 500 untuk pertama kalinya dan ternyata itu terlalu besar.
Kemudian saat rentang pilihan menjadi 1 hingga 499:
Kedua kalinya kami memilih 250, ternyata masih terlalu besar.
Kemudian saat rentang pilihan menjadi 1 hingga 249:
Kami memilih 125 untuk ketiga kalinya dan ternyata terlalu kecil.
Kemudian rentang pilihan berikutnya menjadi 126 hingga 249:
Dengan analogi, berapa tebakan yang Anda butuhkan untuk menebak kasus terburuk?
Jawabannya adalah log1000 = 10 kali,
Artinya, kisaran interval awal "dibelah dua" 10 kali.
Yang baru saja kami analisis adalah permainan menebak angka.
Jika kita mengubah skenario menjadi pertanyaan wawancara awal:
Temukan bilangan bulat tertentu dalam larik terurut yang berisi 1000 elemen bilangan bulat,
Bagaimana cara melakukannya?
Hal yang sama berlaku untuk
Pertama-tama kita dapat menilai elemen yang indeksnya 499 (karena indeks array dimulai dari 0 dan berakhir pada 999),
Jika elemen lebih besar dari bilangan bulat yang Anda cari,
Mari kita menilai elemen yang subskripnya 249,
Kemudian tentukan elemen subskrip 124 ...
Dan seterusnya, sampai Anda akhirnya menemukan elemen yang Anda inginkan,
Atau rentang pilihan sama dengan 0.
Proses di atas,
Apakah yang disebut algoritma pencarian biner,
Kompleksitas waktu pencarian adalah log (n).
public static int binarySearch (int array, int target) { // Temukan titik awal rentang int mulai = 0; // Temukan akhir rentang int end = array.length-1; // Temukan median dari jarak tersebut int mid; sementara (mulai < = akhir) { // mid = (start + end) / 2 mungkin meluap pertengahan = mulai + (akhir-mulai) / 2; if (array == target) { kembali pertengahan; } lain jika (larik < target){ mulai = pertengahan + 1; }lain{ akhir = pertengahan-1; } } kembali -1; } public static void main (String args) { int array = int baru; untuk (int i = 0; i < 1000; i ++) { Himpunan = i; } System.out.println (binarySearch (larik, 173)); }Artikel ini hanya mewakili sudut pandang penulis, bukan posisi CSDN.
- Ledakan! Jendela dari 12 kendaraan di Komunitas Xiangfang No.1 di Harbin hancur dan harta benda mereka hilang
- 16 jam! 5G! 3,84 juta orang! Lihatlah kegigihan dan emosi di balik siaran langsung Festival Perahu Naga ini
- Apakah parkir otomatis benar-benar dapat diandalkan? Pembayaran tertinggi di Changan sebesar 550.000 membuat Anda yakin
- Aktris top TVB terus terang menolak cinta saudara perempuan dan laki-laki: Mungkin saya sedikit lebih canggih
- Lin Feng akan menikahi pacar China daratannya Zhang Xinyue pada hari ulang tahunnya? Melamar secara diam-diam pada Hari Anak