বাইনারি অনুসন্ধান এবং ইন্টারপোলেশন অনুসন্ধানের সংমিশ্রণের পিছনে কি কোনও অধ্যয়ন বা তত্ত্ব আছে?


14

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

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

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

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

আমি কি কোনও পরিচিত জিনিস পেরিয়ে হোঁচট খেয়েছি? এটি নির্দিষ্ট ধরণের ডেটার জন্য দ্রুত হওয়ার কোনও তাত্ত্বিক সমর্থনযোগ্যতা কি আছে? লগ ফাইলগুলি সাধারণত সময়ের জন্য বড় ছিল (উদাহরণস্বরূপ, অনুসন্ধানের জন্য 10 মিলিয়ন সারি সহ 1-2 গিগাবাইট পাঠ্য) এবং এগুলিতে খেজুর / সময়গুলির বিস্তার ভারী ক্রিয়াকলাপ, সাধারণ শিখার সময় এবং শান্ত সময়ের সাথে জটিল ছিল। আমার বেঞ্চমার্ক পরীক্ষাগুলি সন্ধানের জন্য লক্ষ্য সময়ের একটি এমনকি বিতরণ থেকে নমুনাযুক্ত।

উত্তর:


5

আমি কি কোনও পরিচিত জিনিস পেরিয়ে হোঁচট খেয়েছি?

একটি দিয়ে ইন্টারপোলেশন-অনুসন্ধান এবং বাইনারি অনুসন্ধানের মিশ্রণের ভিত্তিতে বিভিন্ন পদ্ধতি রয়েছেহে(  এন)হে( এন)

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

    সাধারণ ধারণাটি হল যে ইন্টারপোলেশন অনুসন্ধান কেবল তখনই কার্যকর যখন সন্ধান করা অ্যারে প্রদত্ত প্রান্তিকের চেয়ে বড় হয়। বিবেচিত অনুসন্ধান বিভাগটি যখন ব্যবহারকারী-সংজ্ঞায়িত থ্রেশহোল্ডের চেয়ে ছোট হয়, তখন বাইনারি অনুসন্ধান নিঃশর্ত প্রয়োগ করা হয়। তদ্বিপরীত, এই প্রান্তিকের ওপরে, একটি দ্বিখণ্ডক অনুসন্ধান পদক্ষেপ প্রয়োগ করা হয়, পরে একটি বাইনারি অনুসন্ধান পদক্ষেপ অনুসরণ করা হয়।

    এটি আপনার পদ্ধতির সাথে অনেকগুলি সাধারণ পয়েন্ট রয়েছে।

  • বিয়াজিও বোনাসেরা, এমিলিও ফেরারারা, গিয়াকোমো ফিউমারা, ফ্রান্সেস্কো প্যাগানো, আলেসান্দ্রো প্রোভেটি দ্বারা অভিযোজিত অনুসন্ধান (এএস)

    লেখকদের শব্দ ব্যবহার করে:

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

    [কাটা]

    সুতরাং, এটি দেখানো সম্ভব যে কোনও ইনপুটের জন্য এএস আইবিএসের চেয়ে বেশি প্রাথমিক ক্রিয়াকলাপ গ্রহণ করবে না।

    অ্যালগরিদম "সিম্পল" ইন্টারপোলেশন অনুসন্ধানের চেয়ে দ্বিগুণ সংখ্যক ক্রিয়াকলাপ ব্যয় করতে পারে অনুসন্ধানের বিভাগটির সেরা অর্ধগতি যত্ন সহকারে খুঁজে বের করার জন্য, যার অর্থ দাঁড়ায় যে কম পুনরাবৃত্তি সম্পন্ন করার প্রয়োজন হবে (তবে আপনার আরও বেশি ওভারহেড রয়েছে) ।


6

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

তাত্ত্বিকভাবে দ্রুত হলেও, বাইনারি অনুসন্ধানের তুলনায় ইন্টারপোলেশন অনুসন্ধানের দুটি অসুবিধা রয়েছে:

  • এটি ভয়ানক (লিনিয়ার) সবচেয়ে খারাপ ক্ষেত্রে কর্মক্ষমতা রয়েছে

  • মিডপয়েন্টটি গণনার ওভারহেড বরং বড়; একটি বাইনারি অনুসন্ধান পুনরাবৃত্তি একটি অন্তরঙ্গকরণ অনুসন্ধানের চেয়ে কয়েকগুণ দ্রুত

আমি আশা করব যে পরিসরটি বৃহত্তর হওয়ার সময় আপনি অন্তরঙ্গকরণ অনুসন্ধান করেন এবং সীমাটি ছোট হয়ে যাওয়ার পরে বাইনারি অনুসন্ধানে স্যুইচ করুন an আপনি এই পরীক্ষার চেষ্টা করতে পারলে ভাল লাগবে।

লগএনলগলগএনলগএনলগলগএন

আমি মনে করি যে আপনার ফলাফল দুটি ঘটনা দ্বারা ব্যাখ্যা করা যেতে পারে:

  • বাইনারি অনুসন্ধানের সাথে সংমিশ্রণ আপনাকে সবচেয়ে খারাপ পরিস্থিতি এড়াতে দেয়

  • একটি ছোট ডেটাসেটে বাইনারি অনুসন্ধানে স্যুইচ করার ইতিবাচক প্রভাব


3
আপনি লিখেছেন: "একটি বাইনারি অনুসন্ধান পুনরাবৃত্তি একটি অন্তরঙ্গকরণ অনুসন্ধানের চেয়ে কয়েকগুণ দ্রুত"। দয়া করে নোট করুন যে ওপি-র ক্ষেত্রে, এই দুটি পদ্ধতিতে মিডপয়েন্ট গণনার মধ্যে পার্থক্যটি মিডপয়েন্টের মান পুনরুদ্ধারের জন্য প্রয়োজনীয় I / O সময় দ্বারা বামন করা হয়েছে।
লাইওরি

@ লিওরি: একই তথ্যতে পুনরাবৃত্ত বাইনারি অনুসন্ধানগুলির প্রথম কয়েকটি পুনরাবৃত্তি আরও ক্যাশে-বান্ধব হতে পারে, কারণ একই কয়েকটি উপাদান ব্যবহৃত হয়। সুতরাং কোয়ার্টার এবং সম্ভবত অষ্টমী ক্যাশে গরম থাকার আশা করা যেতে পারে। বাইনারি দিয়ে শুরু করা এবং তিনটি পুনরাবৃত্তির পরে ইন্টারপোল্টে স্যুইচ করা বোধগম্য হতে পারে, যদি রেঞ্জগুলি যথেষ্ট বড় হয়। (অথবা আপনি যদি async আই / ও করতে পারেন এবং ফলাফল যা আসে তার আগে ব্যবহার করতে পারেন)।
পিটার কর্ডেস

এছাড়াও, এমনকি মেমরির অন্বেষণের জন্য, উদাহরণস্বরূপ ইন্টেল হ্যাসওয়েলে একটি ক্যাশে মিস (200 টি চক্রের বেশি বিলম্ব) এমনকি 64 বিট ইন্টিজার বিভাগ (32-96 সাইকেল) এর কয়েকগুণ বেশি বিলম্ব রয়েছে । 32 বিট পূর্ণসংখ্যা বিভাগ উল্লেখযোগ্যভাবে দ্রুত (22-29 সাইকেল)। মেইন মেমরি ব্যান্ডউইথ সমস্ত কোরগুলির জন্য একটি ভাগ করা সংস্থান, তবে পূর্ণসংখ্যা বিভাগ কেবল প্রতিটি কোরে অনুলিপিযুক্ত সংস্থান ব্যবহার করে।
পিটার কর্ডেস

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

@ লিওরি: লগ ফাইলকে সূচীকরণ করার সময় অবশ্যই মিডপয়েন্টে আমি / ও হ'ল মূল কারণ ছিল, কারণ এটি রেকর্ডগুলি সন্ধানের জন্য চাহিদা অনুযায়ী পড়া হয়েছিল। ফাইলে অফসেট গণনা এবং একটি ব্লক পড়ার মধ্যে দ্বিগুণেরও বেশি অর্ডার ছিল - সুতরাং গণনা করা মিডপয়েন্টগুলির সংখ্যাটি সিদ্ধান্ত নেবে। আমি মনে করি যদি আমি এখন কোনও লগ ফাইল ছাড়াই সূচকে প্রতিলিপি করি - এমন কিছু যা আমি চেষ্টা করে এখানে পোস্ট করব - যাতে পরিমাপযোগ্য গতির পার্থক্য না ঘটে, তবে একটি পরিমাপযোগ্য "প্রয়োজনীয় মিডপয়েন্টগুলির সংখ্যা" পার্থক্য থাকতে পারে।
নিল স্লেটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.