আমি আসলে ভ্যান এমডে-বোস গাছ নিজেই একবার বেঞ্চমার্ক করেছি। আমি এটিকে একটি এএ ট্রি, একটি হ্যাশম্যাপ এবং কিছুটা অ্যারের সাথে তুলনা করেছি।
পরীক্ষাগুলি size
বিরতিতে এলোমেলো সংখ্যার সাথে সন্নিবেশগুলি সম্পাদন করে [0, bound]
, তারপরে size
অনুসন্ধান করে, তারপরে size
মুছে ফেলা হয় এবং তারপরে আবার size
অনুসন্ধান করে। মুছে ফেলা এলোমেলো সংখ্যায়ও করা হয়, সুতরাং আপনাকে প্রথমে এটি নির্ধারণ করতে হবে যে তারা কাঠামোটি আদৌ আছে কিনা।
এখানে ফলাফলগুলি ( size
= 2000000, bound
= 10000000) সেকেন্ডে রয়েছে:
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
আপনি দেখতে পাচ্ছেন, ভ্যান এমডে-বোস গাছ হ্যাশ মানচিত্রের চেয়ে দ্বিগুণ ধীর, বিট অ্যারেগুলির চেয়ে দশগুণ ধীর এবং বাইনারি অনুসন্ধান গাছের চেয়ে পাঁচগুণ দ্রুত।
অবশ্যই উপরেরটির একটি দাবি অস্বীকার করা দরকার: পরীক্ষাগুলি কৃত্রিম, আপনি সম্ভবত কোডটি উন্নত করতে পারেন বা একটি সংকলক যার আউটপুট দ্রুততর, এবং আরও অনেক কিছু দিয়ে আলাদা ভাষা ব্যবহার করতে পারেন।
এই অস্বীকৃতিটি অ্যালগরিদম ডিজাইনে asympotic বিশ্লেষণের কারণ হিসাবে আমরা কেন্দ্রে রয়েছি: যেহেতু আপনার কোনও ধারণা নেই যে ধ্রুবকগুলি কী এবং পরিবেশগত কারণগুলির উপর নির্ভর করে ধ্রুবকগুলি পরিবর্তন করতে পারে, তাই আমরা যা করতে পারি তার মধ্যে সেরা একটি অ্যাসিপোটোটিক বিশ্লেষণ।
এখন, ক্ষেত্রে লগএন বনাম লগলগএন: উপরের উদাহরণে, আমার ভ্যান এমডে-বোস গাছ ধারণ করতে সক্ষম 232 উপাদান। লগ232= 32, এবং লগ32 = 5, যা একটি ফ্যাক্টর 6 উন্নতি, যা অনুশীলনে বেশ খানিকটা কম। অতিরিক্তভাবে, ভ্যান এমডে-বোস গাছগুলিতে ভাল ধ্রুবক কারণ রয়েছে (এটি ছোট ছোট পার্থক্যের জন্য অনুশীলনে ধ্রুবক কারণগুলির মধ্যে রয়েছে) কারণ তাদের নিজেদের ভারসাম্য বজায় রাখার দরকার নেই।