Saya sebenarnya pernah mengukur pohon van Emde-Boas sendiri. Saya membandingkannya dengan AA Tree, hashmap, dan array bit.
Tes melakukan size
sisipan dengan angka acak dalam interval [0, bound]
, kemudian size
mencari, lalu size
menghapus dan kemudian size
mencari lagi . Penghapusan dilakukan dengan angka acak juga, jadi pertama-tama Anda harus mencari tahu apakah mereka ada dalam struktur sama sekali.
Berikut ini hasilnya ( size
= 2000000, bound
= 10000000) dalam hitungan detik:
AATreeLookup - O(n log n)
Inserting... 3.3652452
Searching... 5.2280724
Deleting... 7.3457427
Searching... 9.1462039
HashLookup - O(n) expected
Inserting... 0.3369505
Searching... 0.6223035
Deleting... 0.9062163
Searching... 1.1718223
VanEmdeBoasTree - O(n log log n)
Inserting... 0.7007531
Searching... 1.1775800
Deleting... 1.7257065
Searching... 2.2147703
ArrayLookup - O(n)
Inserting... 0.0681897
Searching... 0.1720300
Deleting... 0.2387776
Searching... 0.3413800
Seperti yang Anda lihat, pohon van Emde-Boas sekitar dua kali lebih lambat dari peta hash, sepuluh kali lebih lambat dari bit array, dan 5 kali lebih cepat dari pohon pencarian biner.
Tentu saja hal di atas memerlukan penafian: tes ini adalah buatan, Anda mungkin dapat meningkatkan kode atau menggunakan bahasa yang berbeda dengan kompiler yang outputnya lebih cepat, dan seterusnya dan seterusnya.
Penafian ini adalah inti dari alasan kami menggunakan analisis asimtotik dalam desain algoritma: karena Anda tidak tahu apa konstanta dan karena konstanta dapat berubah tergantung pada faktor lingkungan, yang terbaik yang bisa kita lakukan adalah analisis asimptotik.
catatanncatatancatatann232catatan232= 32catatan32 = 5