এই অ্যালগরিদম এখনও বাইনারি অনুসন্ধান অ্যালগরিদম হিসাবে বিবেচনা করা যেতে পারে?


14

দ্বিতীয় কোড কাটা করার সময় (যা আপনাকে বাইনারি অনুসন্ধানের অ্যালগরিদমটি পাঁচবার প্রয়োগ করতে বলেছে, প্রতিবার একটি ভিন্ন পদ্ধতি দিয়ে), আমি কিছুটা ভিন্ন সমাধান নিয়ে এসেছি যা নীচের মত কাজ করে:

আমার যদি দৈর্ঘ্য 100 এর সাজানো অ্যারে থাকে এবং আমি দেখতে পাচ্ছি যে এর শুরু ক্ষেত্রটি 200 নম্বর এবং এর সমাপ্ত ক্ষেত্রটি 400 নম্বর ধারণ করে, আমি, একজন গণিত হিসাবে মানুষ অধ্যয়নরত, আমি 35 টি ক্ষেত্রের আশেপাশে অনুসন্ধান শুরু করতে পারি যদি আমি অনুসন্ধান করছিলাম 270 সংখ্যা, এবং 50 টি সাধারণ বাইনারি অনুসন্ধান অ্যালগরিদমের মতো নয়।

তারপরে, অ্যারের 35 ক্ষেত্রের সংখ্যা 270 হয়, 35 হ'ল আমি যে সূচকটি অনুসন্ধান করছিলাম is

যদি তা না হয় তবে আমি যে নম্বর পেয়েছি তার সাথে তুলনা করতে পারি (বলুন 280) এবং অ্যারের নীচের অংশটি নিয়ে ক্রিয়াকলাপটি পুনরাবৃত্তি করতে পারে (সুতরাং আমার 200 ক্ষেত্রের শুরুর ক্ষেত্র এবং 350 সমাপ্ত ক্ষেত্র সহ 35 ক্ষেত্র রয়েছে) যদি আমি যে সংখ্যাটি পেয়েছি তার চেয়ে বড় যা আমি অনুসন্ধান করছি, বা অ্যারের উপরের অংশটি চেয়ে বড় (বলুন যে আমি 260 পেয়েছি: এখন আমার 65 সূচক রয়েছে, প্রথমটি 260 এবং চূড়ান্তটি 400 রয়েছে যা মূলত, আমি টর্ওয়ারের দিকে যেতে চাই) এই সাব অ্যারের সূচি 4, যা পুরো অ্যারের সূচক 39) যদি আমি পেয়েছি সংখ্যাটি আমি যে সংখ্যার সন্ধান করছি তার চেয়ে কম হয়।

প্রশ্নটি হল: এই অ্যালগরিদমকে বাইনারি অনুসন্ধানের অ্যালগরিদম হিসাবে বিবেচনা করা যেতে পারে? যদি না হয়, এটির নিজের নাম আছে?


2
এটি বাইনারি অনুসন্ধান কিনা তা খাঁটি মতামতের বিষয় বলে মনে হচ্ছে না। মূলত, আপনি কেবলমাত্র উত্তর দিতে পারেন হয় "হ্যাঁ, এটি বাইনারি অনুসন্ধানের জন্য বাইনারি অনুসন্ধানের কাছে যথেষ্ট" বা "না, এটি নয়" " তর্ক তর্ক।
ডেভিড রিচার্বি

উত্তর:


23

আমি এটিকে বাইনারি অনুসন্ধান বলব না।

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

আমি বলতে চাই "বাইনারি অনুসন্ধানের সবচেয়ে খারাপ ক্ষেত্রে পরিচালিত সময়টি হল ও (লগ (এন))" না হয়ে "বাইনারি অনুসন্ধানের সবচেয়ে খারাপ ক্ষেত্রে রান টাইম হ'ল ও (লগ (এন))" এর চেয়ে "bound এর অর্থ হ'ল আমি ইন্টারপোলেশন অনুসন্ধানটিকে বাইনারি অনুসন্ধান অ্যালগরিদম হিসাবে শ্রেণিবদ্ধ করতে পারি না।


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

সেই হত্যাকারী-ইনপুট ধারণাটি আকর্ষণীয়। কী যদি ঘাতক ইনপুটগুলিকে অনুসন্ধানে নেতিবাচকভাবে প্রভাবিত করার অনুমতি দেয় না (যেমন কোনও অ্যারের শেষের দিকে বিভক্ত হয়ে) তবে আমরা "বিভাজ্য পরিসর "টিকে অ্যারের তৃতীয় তৃতীয়াংশ বা অনুরূপভাবে সীমাবদ্ধ / ছাঁটাই করি। এটি সবচেয়ে খারাপ ক্ষেত্রে লগ 3 (এন) হবে তবে এখনও লগ (লগ) সেরা ক্ষেত্রে উপভোগ করতে পারেন।
অ্যান্ড্রু গ্যাল্যাশ

1
@ স্টিভ জেসোপ মনে রাখবেন যে অ্যাসিমোটিক জটিলতা সম্পূর্ণ চিত্র নয়। ও (লগ এন) খুব দ্রুত। এছাড়াও বাইনারি অনুসন্ধান প্রতিটি লুপে খুব কম কাজ করে। সুতরাং ইতিমধ্যে ইন্টারপোলেশন অনুসন্ধানের জন্য সমস্যাটি হ'ল প্রতিটি লুপে আরও বেশি কাজ করার বিষয়টি নিশ্চিত করতে আপনার খুব দীর্ঘ ইনপুট দরকার। আপনার পরামর্শ তাতে আরও কাজ যুক্ত করে। অভিন্ন নয় এমন ডেটার জন্য আমি যদি ও (এন) গ্রহণ করতে অক্ষম হয়ে থাকি তবে আমার সন্দেহ হয় যে কিছু সংকর পদ্ধতির পরিবর্তে খাঁটি বাইনারি অনুসন্ধানের জন্য সবচেয়ে ভাল সমাধান হ'ল।
তাইমির

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

17

হ্যাঁ, এটি ইন্টারপোলেশন অনুসন্ধান হিসাবে পরিচিত । কিছু সাবধানতার সাথে (আপনার গণনার মডেল এবং ডেটা বিতরণের উপর নির্ভর করে) এর প্রত্যাশিত চলমান সময় isO(loglogn)


কুল। এখন প্রশ্নটি আমি কোড কোডের জন্য এটি ব্যবহার করতে পারি কিনা তবে এটি আমার সমস্যা হ'ল বাইনারি অনুসন্ধানের চেয়ে আমি এটিকে আরও জটিল মনে করছি তবে কেন তা নয়।
ব্যবহারকারী 6245072

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

@ নিলস্ল্যাটার সম্ভবত হ'ল আন্তঃসম্পাদন অনুসন্ধান?
স্টিভ কক্স

@ স্টিভকক্স: আমি কেবলমাত্র সেই শব্দটি অনুসন্ধান করেছি এবং কিছুই পাইনি। এটি একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করার সিদ্ধান্ত নিয়েছে: cs.stackexchange.com/questions/59750/…
নীল স্লেটার

-1

আমি মনে করি সঠিক পরিভাষাটি ডাইচোটোমিয়াল চিন্তিত অনুসন্ধান হবে।

আপনি এটির মধ্যে সংখ্যাগুলির অনুমানিত ফ্ল্যাট বিতরণের উপর ভিত্তি করে ভাবাপন্ন অনুসন্ধান সহ একটি ফ্ল্যাট অ্যারে অনুসন্ধান করুন।

এটি কোনও অভিধানে কোনও শব্দ কীভাবে অনুসন্ধান করবে তার সাথে এটি মিলে। তবে ডেটা বিতরণ অনিয়মিত হলে এটি খুব অদক্ষ হতে পারে।

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