দ্বিখণ্ডিত অনুসন্ধান বনাম ইন্টারপোলেশন অনুসন্ধান


13

বাইনারি অনুসন্ধানের পরিবর্তে কখন আমি ইন্টারপোলেশন অনুসন্ধান ব্যবহার করব?

উদাহরণস্বরূপ, আমার একটি বাছাই করা ডেটাসেট রয়েছে, কোন পরিস্থিতিতে আমি এই ডেটাসেটে কোনও আইটেম সন্ধান করতে বাইনারি অনুসন্ধান ব্যবহার করব বা কোন পরিস্থিতিতে আমি অন্তরঙ্গকরণ অনুসন্ধান ব্যবহার করব?

ডেটাসেটের কোন বৈশিষ্ট্য নির্ধারণকারী উপাদান হবে?

উত্তর:


12

স্পষ্টতই, একটি প্রবর্তন অনুসন্ধান করার জন্য, আপনাকে কিছু প্রকারের কী প্রয়োজন যার জন্য অর্ডার করার চেয়ে বেশি জানা যায় - আপনাকে সম্ভাব্য দূরত্ব নির্ধারণের জন্য কীগুলিতে গণনা করতে সক্ষম হতে হবে, কেবল কোনটি আরও বড় বা এটি নির্ধারণের জন্য কীগুলি তুলনা করতে হবে না ক্ষুদ্রতর.

যতটা ডেটাসেটের বৈশিষ্ট্য রয়েছে, এটি বেশিরভাগই একটি সংস্থায় আসে: সম্ভাবনাগুলির ব্যাপ্তি জুড়ে চাবিগুলি যথাযথভাবে সমানভাবে (বা কমপক্ষে অনুমানযোগ্য) বিতরণ করা যায়। তা ছাড়া, একটি অন্তরঙ্গকরণ অনুসন্ধান আসলে বাইনারি অনুসন্ধানের চেয়ে ধীর হতে পারে ।

উদাহরণস্বরূপ, লো-কেস অক্ষরের স্ট্রিংগুলির সাথে কী হিসাবে একটি ডেটা সেট বিবেচনা করুন। ধরে নেওয়া যাক আপনার কাছে এমন একটি কী আছে যা "x" দিয়ে শুরু হবে। একটি প্রদত্ত অনুসন্ধান স্পষ্টভাবে ইঙ্গিত দেবে যে আপনার সেটটির শেষের খুব কাছাকাছি অনুসন্ধান শুরু করা উচিত। তবে, যদি আপনার বেশিরভাগ কীগুলি আসলে 'জেড' দিয়ে শুরু হয় এবং 'এ' যদিও 'y' থেকে কিছু নাও থাকে তবে আপনি যেটির সন্ধান করছেন সেটি সম্ভবত সেটটির শুরুতে খুব কাছাকাছি থাকতে পারে। অনুসন্ধান শুরু হওয়ার আগে যেখানে 'ডাব্লু' দিয়ে শুরু হওয়া স্ট্রিংটি থাকে তার কাছাকাছি যাওয়ার আগে এটি যথেষ্ট পরিমাণে পুনরাবৃত্তি নিতে পারে / নিতে পারে। প্রতিটি পুনরাবৃত্তি বিবেচনা থেকে সেট করা ডেটার মাত্র 10 ডলার সরিয়ে ফেলবে, সুতরাং এটি শুরু হওয়ার আগে যেখানে 'ডাব্লু' দিয়ে শুরু হওয়া চাবিগুলি বেশ কয়েকটি পুনরাবৃত্তি গ্রহণ করবে

বিপরীতে, একটি বাইনারি অনুসন্ধান মাঝখানে শুরু হবে , দ্বিতীয় পুনরাবৃত্তির এক-চতুর্থাংশের চিহ্নে পৌঁছাবেন, তৃতীয়টিতে একটি অষ্টমী চিহ্ন এবং এই জাতীয়। কীগুলির স্কিউ দ্বারা এটির কার্য সম্পাদন প্রায় ক্ষতিগ্রস্থ হবে। প্রতিটি পুনরাবৃত্তি বিবেচনা থেকে সেট করা অর্ধেক ডেটা সরিয়ে ফেলবে, ঠিক কীভাবে কীগুলি সমানভাবে বিতরণ করা হয়েছিল।

আমি তাড়াতাড়ি যোগ করতে তাড়াহুড়ো করেছিলাম যে এটি একটি প্রকোপ অনুসন্ধানটি বাইনারি অনুসন্ধানের চেয়ে লক্ষণীয়ভাবে খারাপভাবে তৈরি করতে যথেষ্ট স্কিউ বিতরণ করে। উদাহরণস্বরূপ, এটি স্থানীয়ভাবে তৈরি ক্লাস্টারিংয়ের মোটামুটি পরিমাণের উপস্থিতিতেও বেশ ভাল পারফর্ম করতে পারে।

আমার এটিও উল্লেখ করা উচিত যে কোনও অন্তরবিচ্ছিন্ন অনুসন্ধানের জন্য লিনিয়ার ইন্টারপোলেশন ব্যবহার করা প্রয়োজন হয় না। উদাহরণস্বরূপ, যদি আপনার কীগুলি কিছু অ-রৈখিক বিতরণ (উদাহরণস্বরূপ, একটি বেল-কার্ভ) অনুসরণ করে পরিচিত হয় তবে আন্তঃবন্টন কর্মের ক্ষেত্রে ফলাফলটিকে সামান্য বিতরণ করা থেকে সামান্য পৃথক করে নেওয়া একেবারে সহজ হয়ে যায়।


1
আপনি যে সমস্যাটি বর্ণনা করেছেন তা সহজেই প্রথমে এবং শেষ উপাদানগুলি ব্যবহার করে Int.MIN_VALUE এবং Int.MAX_VALUE অনুমান করার পরিবর্তে ব্যাপ্তি নির্ধারণ করে খুব সহজেই সামঞ্জস্য হয় যা আমি বিশ্বাস করি (কমপক্ষে এটি আমি কীভাবে অ্যালগরিদম শিখেছি) এটি কীভাবে হয়।
মালফিস্ট

2
@ মালফিস্ট: এটি সাহায্য করতে পারে, তবে অগত্যা সমস্যাটি সমাধান করে না। উদাহরণস্বরূপ, যদি আপনার কাছে শূন্য কী থাকে (বলুন) 'এ' এর মাধ্যমে 'কিউ' দিয়ে যে কোনও কিছুর শুরু হয়, তবে দ্রবীভূতটি মোটামুটি সহজবোধ্যভাবে চলে যাবে। একটি একক আউটলেটর যা দিয়ে শুরু হয়েছিল aতা নাটকীয়ভাবে পারফরম্যান্সকে আঘাত করবে।
জেরি কফিন

1

আমি সম্ভবত মনে করব যে প্রশ্নটি কত সহজেই আপনি একটি দ্বিখণ্ডক ফাংশন নিয়ে আসতে পারেন যা আসলে বাইনারি অনুসন্ধানের চেয়ে ভাল করে।

ইন্টারপোলেশন অনুসন্ধানে উইকিপিডিয়া থেকে:

বিগ-ও স্বরলিপি ব্যবহার করে, আকার এন এর একটি ডেটা সেটে ইন্টারপোলেশন অ্যালগরিদমের কার্যকারিতা হ'ল ও (এন); তবে অন্তরঙ্গকরণের জন্য ব্যবহৃত লিনিয়ার স্কেলে ডেটাগুলির সমান বিতরণ অনুমানের অধীনে, কর্মক্ষমতা ও (লগ লগ এন) হিসাবে প্রদর্শিত হতে পারে।

বিভাজন অনুসন্ধানের ব্যবহারিক পারফরম্যান্স নির্ভর করে প্রতিটি তদন্তের জন্য প্রয়োজনীয় জটিল জটিলতার দ্বারা প্রোবের সংখ্যা হ্রাস করা যায় কিনা তার উপর নির্ভর করে। এটি ডিস্কের বৃহত সাজানো ফাইলটিতে রেকর্ড সনাক্তকরণের জন্য দরকারী, যেখানে প্রতিটি প্রোবটিতে ডিস্ক অনুসন্ধান অন্তর্ভুক্ত থাকে এবং এটি ইন্টারপোলেশন গাণিতিকের চেয়ে ধীর গতির হয়।

বি-ট্রিগুলির মতো সূচী কাঠামোগুলিও ডিস্ক অ্যাক্সেসের সংখ্যা হ্রাস করে এবং অন-ডিস্ক ডেটা আরও অনেকাংশে সূচক হিসাবে ব্যবহার করা হয় কারণ তারা অনেক ধরণের ডেটা সূচক করতে পারে এবং অনলাইনে আপডেট হতে পারে। তবুও, ইন্টারপোলেশন অনুসন্ধান কার্যকর হতে পারে যখন কাউকে কিছু নির্দিষ্ট বাছাই করা হলেও অন-ডিস্কে অন-ডিস্ক ডেটাসেট অনুসন্ধান করতে বাধ্য করা হয়।


0

বাইনারি অনুসন্ধান এবং ইন্টারপোলেশন অনুসন্ধান উভয়ই লিনিয়ার অনুসন্ধান পদ্ধতি হিসাবে বিবেচিত হয়।

তারা উভয়ই তালিকাটি চাবি হিসাবে চিহ্নিত কলামে সন্ধান করা হবে বলে প্রত্যাশা করে । এই অত্যন্ত গুরুত্বপূর্ণ.

বাইনারি অনুসন্ধান স্ট্রিং বা সংখ্যাগুলির জন্য যতক্ষণ সেগুলি সাজানো ক্রমে সংরক্ষণ করা হয় সেগুলির জন্য কাজ করে। বাইনারি অনুসন্ধানের পিছনে প্রাথমিক ধারণাটি হ'ল এটি মাঝারি উপাদানটি পরীক্ষার উপর ভিত্তি করে। ইন্টারপোলেশন অনুসন্ধান একটি বৈকল্পিক। সঠিক মধ্যম উপাদানটি ব্যবহার করার পরিবর্তে এটি অনুমান করে যে পাশের মানটির সাথে তুলনা করার জন্য পরবর্তী উপাদানটি কোথায়। আন্তঃবিবর্তন অনুসন্ধান অ্যালগরিদম কীভাবে পরবর্তী কী মান গণনা করে তার বিশদ জন্য JB কিং উত্তর দ্বারা প্রদত্ত রেফারেন্স বা নীচের এই উত্তরটি দেখুন।

"অবিচ্ছিন্ন অনুসন্ধান কেবল অভিন্ন বিতরণ দিয়ে সাজানো অ্যারে ক্রমে সাজানো সংখ্যাসূচক উপাদানগুলিতে কাজ করে (এটি, ধারাবাহিক উপাদানগুলির মধ্যে যে কোনও একটির মধ্যবর্তী বিরতি প্রায় ধ্রুবক" (পি 737 এর নীচে রেফারেন্স থেকে উদ্ধৃতি, এছাড়াও বিভিন্ন রৈখিক অনুসন্ধান পদ্ধতির মধ্যে একটি পারফরম্যান্স তুলনা অন্তর্ভুক্ত করা হয়েছে )।

গুগল বই - ক্লাসিক ডেটা স্ট্রাকচার 2 এনডি এড।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.