DCTLib benar, tapi lupakan matematika sebentar.
Dengan logika Anda kemudian, n -ary harus menjadi yang tercepat. Tetapi jika Anda memikirkannya, n -ary sama persis dengan pencarian iterasi reguler (hanya mengulangi daftar 1 per 1, tetapi dalam urutan terbalik). Pertama Anda memilih item terakhir (atau berikutnya ke terakhir) dalam daftar dan membandingkan nilai itu dengan nilai perbandingan Anda. Kemudian Anda menghapus item itu dari daftar Anda, dan kemudian memilih item terakhir di daftar baru, yang merupakan nilai terakhir berikutnya dalam array. Setiap kali, Anda hanya akan menghilangkan 1 nilai pada satu waktu sampai Anda menemukan nilai Anda.
Sebagai gantinya, Anda harus memikirkannya seperti ini - bagaimana cara menghilangkan nilai terbanyak dari daftar setiap iterasi? Dalam pencarian biner, Anda selalu menghilangkan setengah daftar. Dalam pencarian ternary, ada kemungkinan (33.33% peluang, sebenarnya) bahwa Anda dapat menghilangkan 2/3 dari daftar, tetapi ada peluang yang lebih besar (66.66%) bahwa Anda hanya akan menghilangkan 1/3 dari daftar. untuk menghitung O (n), Anda perlu melihat skenario terburuk, yaitu 1/3, kurang dari 1/2. Saat Anda semakin dekat dan semakin dekat dengan n, semakin buruk.
Skenario terburuk tidak hanya akan ditingkatkan dengan pencarian biner, tetapi waktu rata - rata Anda juga akan ditingkatkan. Melihat nilai yang diharapkan (bagian mana dari daftar yang dapat kami hapus secara rata-rata), kami menggunakan rumus ini:
(P_lower) x (bagian yang bisa kita hapus jika lebih rendah) + (P_higher) x (bagian yang bisa kita hapus jika lebih tinggi) = E
Untuk pencarian biner, ini adalah .5x.5 + .5x.5 = .5 (kami selalu menghapus setengah daftar). Untuk pencarian ternary, nilai ini adalah .666x.333 + .333x.666 = 0.44, atau pada setiap langkah, kami kemungkinan hanya akan menghapus 44% dari daftar, menjadikannya kurang efisien daripada pencarian biner, rata-rata. Nilai ini memuncak pada 1/2 (setengah daftar), dan mengurangi semakin dekat Anda ke n (iterasi terbalik) dan 0 (iterasi reguler).
Ok, jadi saya berbohong..ada sedikit matematika yang terlibat, tapi saya harap itu membantu!