রৈখিক অনুসন্ধানের চেয়ে বাইনারি অনুসন্ধান, যা বাছাই করা ডেটার প্রয়োজন, কেন তাকে ভাল হিসাবে বিবেচনা করা হয়?


20

আমি সর্বদা শুনেছি যে লিনিয়ার সন্ধানটি একটি নির্বোধ পন্থা এবং বাইনারি অনুসন্ধান ভাল অ্যাসিপোটিক জটিলতার কারণে পারফরম্যান্সে এর চেয়ে ভাল better তবে আমি কখনই বুঝতে পারি না যে বাইনারি অনুসন্ধানের আগে যখন বাছাই করা প্রয়োজন তখন লিনিয়ার অনুসন্ধানের চেয়ে কেন ভাল?

লিনিয়ার অনুসন্ধান O(n)এবং বাইনারি অনুসন্ধান হয় O(log n)। এটি বাইনারি অনুসন্ধান ভাল বলে বলার ভিত্তি বলে মনে হয়। তবে বাইনারি অনুসন্ধানের জন্য বাছাই করা দরকার যা O(n log n)সেরা অ্যালগরিদমের জন্য। তাই বাইনারি অনুসন্ধান আসলে দ্রুত করা উচিত হবে না যেমন এটা বাছাই প্রয়োজন।

আমি সিএলআরএসটি পড়ছি যেখানে লেখক সূচিত করেছেন যে সাদামাটা লিনিয়ার অনুসন্ধানের পদ্ধতির পরিবর্তে সন্নিবেশ সাজানোর ক্ষেত্রে আইটেমটি সন্নিবেশ করানোর জায়গাটি সন্ধানের জন্য বাইনারি অনুসন্ধান করা ভাল is এই ক্ষেত্রে এটি ন্যায়সঙ্গত বলে মনে হচ্ছে যেহেতু প্রতিটি লুপ পুনরাবৃত্তিতে একটি বাছাই করা তালিকা রয়েছে যার উপরে বাইনারি অনুসন্ধান প্রয়োগ করা যেতে পারে। কিন্তু সাধারণ ক্ষেত্রে যেখানে আমাদের যে ডেটা সেটটি অনুসন্ধান করতে হবে সে সম্পর্কে কোনও গ্যারান্টি নেই যেখানে প্রয়োজনীয়তা বাছাইয়ের কারণে বাইনারি অনুসন্ধান লিনিয়ার অনুসন্ধানের চেয়ে আরও খারাপ নয়?

রৈখিক অনুসন্ধানের চেয়ে বাইনারি অনুসন্ধানকে আরও ভাল করে তোলে এমন কোনও ব্যবহারিক বিবেচনা কি আমি অবহেলা করছি? বা বাইনারি অনুসন্ধানকে বাছাইয়ের জন্য প্রয়োজনীয় গণনার সময় বিবেচনা না করে লিনিয়ার অনুসন্ধানের চেয়ে ভাল বলে বিবেচনা করা হয়?


6
অন্যান্য অনেক কিছুর সাথে এটিও নেমে আসে: "এটি নির্ভর করে ...;)"
জেফ বি

যদি তালিকাটি ইতিমধ্যে বাছাই করা থাকে, আপনি কি ভাবছেন যে লিনিয়ার অনুসন্ধানটি আরও ভাল? এটি এখানে বিবেচনা করার কিছু হতে পারে।
জেবি কিং

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

উত্তর:


53

রৈখিক অনুসন্ধানের চেয়ে বাইনারি অনুসন্ধানকে আরও ভাল করে তুলছে এমন কোন ব্যবহারিক বিবেচনা কি আমি উপেক্ষা করছি?

হ্যাঁ - আপনাকে কেবল একবার ও (n লগ এন) বাছাই করতে হবে এবং তারপরে আপনি ও (লগ এন) বাইনারি অনুসন্ধানটি যতবার খুশি ততবার করতে পারেন, তবে লিনিয়ার সন্ধানটি প্রতিবার ও (এন) হয়।

অবশ্যই, যদি আপনি একই ডেটাতে একাধিক অনুসন্ধান করেন তবে এটি কেবল একটি সুবিধা। তবে "একবার লিখুন, প্রায়ই পড়ুন" পরিস্থিতিগুলি বেশ সাধারণ।


আপনি যদি কেবল একবার কিছু করে থাকেন তবে এটির অনুকূলিতকরণে খুব বেশি পয়েন্ট নেই।

14

প্রাথমিক ধারণাটি হ'ল আপনি একটিও অনুসন্ধান করবেন না।

সুতরাং যদি আপনাকে একই তথ্য একাধিকবার অনুসন্ধান করতে হয় তবে আপনাকে কেবল একবার বাছাই করতে হবে এবং বাইনারি অনুসন্ধান থেকে লাভ করতে পারবেন।

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

সুতরাং মূলত বাইনারি অনুসন্ধান ভাল যখন আপনি একই তালিকাটি রিসর্টের প্রয়োজন ছাড়াই একাধিকবার অনুসন্ধান করেন।

যখন আপনাকে অনুসন্ধানের আগে প্রতিবার বাছাই করতে হবে তখন কোনও সুবিধা নেই।

প্লিজ লক্ষ করুন যে তালিকাটি ইতিমধ্যে সাজানো (বা প্রায় বাছাই করা) থাকা অবস্থায় খুব দ্রুত গতিযুক্ত অ্যালগরিদম রয়েছে। বেশিরভাগ পারফরম্যান্স নির্ধারণ একটি অরসোর্টড তালিকার প্রত্যাশা করে।


2
আপনি যদি প্রায়শই অনুসন্ধান করেন এবং প্রায়শই সন্নিবেশ করান তবে আপনি আরও জটিল ডেটা স্ট্রাকচার (যেমন বাইনারি ট্রি) দেখতে পারেন।
মার্কজে

@ মারকজে মূল পোস্টারটির প্রাথমিক প্রশ্নটি ছিল একটি তালিকায় অনুসন্ধান করা। অন্যথায় আমি আপনার সাথে পুরোপুরি একাগ্র।
উয়ে প্লোনাস

7

কারণ একবার আপনার বাছাই করা তালিকা থাকলে আপনার এটি পুনরায় সাজানোর দরকার নেই যার অর্থ আপনার যদি ও (লগ এন) এর চেয়ে বেশি অনুসন্ধান থাকে তবে অগ্রণীভাবে বাছাই করলে আপনি একটি জয় অর্জন করতে পারেন ( O(n log n + k log n)বনাম)O(k*n)


5

দুটি ফোন বইয়ের কল্পনা করুন।

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

অন্যান্য ফোন বইয়ের এলোমেলো ক্রমে নাম রয়েছে। আপনি যে প্রবেশাধিকার চান তা সন্ধান করতে আপনি শুরুতে শুরু করেন এবং যতক্ষণ না চান ততক্ষণ চালিয়ে যান।

দ্বিতীয় বইটি কোনও যুক্তিসঙ্গত আকারের শহরে কাজ করবে?


3

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


3

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

অসম্পূর্ণ জটিল জটিলতা সমীকরণ সমাধান করে "টিপিং পয়েন্ট" গণনা করা হয়:

n log n + log n = n

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

মার্ক প্রোবস্টের এই আকর্ষণীয় নিবন্ধ অনুসারে , বর্তমান প্রসেসরের উপর গভীরতার পারফরম্যান্স পরিমাপে কিছু সুন্দর রয়েছে:

যদি আপনার পূর্ণসংখ্যার সাজানো অ্যারের মাধ্যমে অনুসন্ধান করতে হয় এবং কার্য সম্পাদন করা সত্যই গুরুত্বপূর্ণ, আপনার অ্যারে আকারের প্রায় 64 টির নিচে থাকে তবে রৈখিক অনুসন্ধান ব্যবহার করুন, বাইনারি অনুসন্ধান যদি উপরে থাকে।


2

সাধারণ মানুষের কথায়:

যদি আপনার দশ বিলিয়ন আইটেম সহ একটি অ-রক্ষিত তালিকা থাকে এবং আপনি যে আইটেমটি সন্ধান করতে চান তা সর্বশেষটি হয়, আপনি দশ বিলিয়ন আইটেমটি পড়ে শেষ করবেন।

বাইনারি অনুসন্ধানের ক্ষেত্রে, সূচিকাগুলি কেবল একবার করা যেতে পারে। পরে শৃঙ্খলা বজায় রাখতে সঠিক জায়গায় সন্নিবেশ করা যেতে পারে।


2

"বাইনারি অনুসন্ধান আরও ভাল" এর জন্য বেশ কয়েকটি ভাল কারণ ইতিমধ্যে তালিকাভুক্ত করা হয়েছে, তবে ব্যবহারকারীর দৃষ্টিকোণ থেকে আমাদের সুবিধাগুলিও দেখে নিতে পারি:

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

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