এই উত্তরটি লেখার পরে, আমার সম্ভবত প্রশ্নটি "খুব বিস্তৃত" হিসাবে পতাকাঙ্কিত করা উচিত - আমরা বিভিন্ন কৌশল সম্পর্কে বয়সের জন্য কথা বলতে পারি, শেষ পর্যন্ত আপনার ডেটা দিয়ে একটি মানদণ্ড চালাতে হবে।
প্রতিটি ট্যাগ দক্ষতার সাথে একটি পূর্ণসংখ্যা দ্বারা প্রতিনিধিত্ব করতে পারে। প্রতিটি সত্তায় ট্যাগগুলির একটি সেট রয়েছে। সঠিক সেট বাস্তবায়ন নির্বাচন করা গুরুত্বপূর্ণ - বি-গাছ এবং সাজানো অ্যারে উভয়ই সম্ভব। এই সেটটি দিয়ে আমরা কেবল সদস্যপদ পরীক্ষা করব। যেহেতু উভয় কাঠামো ও (লগ টি) এ ( সত্তা প্রতি টি ট্যাগ সহ ) এগুলি করে, আমি তাদের ঘনত্বের উপস্থাপনের কারণে অ্যারেগুলিকে পছন্দ করব।
আমরা এখন ও (n · লগ টি · পি) ক্রিয়াকলাপে সমস্ত সত্তার মাধ্যমে ফিল্টার করতে পারি , যেখানে p হ'ল সিদ্ধান্ত গাছের গড় পথ দৈর্ঘ্য। এই সিদ্ধান্ত গাছটি যাতে অর্ডার করা যায় যাতে কোনও সিদ্ধান্তে দ্রুত পৌঁছানো যায়। পরিসংখ্যান সংক্রান্ত ডেটা ব্যতীত, কেবলমাত্র সাধারণ স্বেচ্ছাকর্ষণটিই কার্যকর করা সম্ভব।
সত্তা সন্ধান করা হয় ক্রম আসলে গুরুত্বপূর্ণ নয়। অন্যদিকে তা বাছাই করতে এটা যেমন সূচকের এ সত্ত্বা যে সুবিধাজনক হতে পারে 0
জন্য i
সমস্ত একটি নির্দিষ্ট ট্যাগ আছে, বাকিরা না। এই নির্দিষ্ট ট্যাগটি অনুসন্ধান করার সময় এটি এন হ্রাস করে (সিদ্ধান্ত গাছে, এটি প্রথম পরীক্ষা হওয়া উচিত)। এই একাধিক মাত্রা প্রসারিত করা যেতে পারে, কিন্তু এই জটিল জিনিস এবং সময় লাগে হে (2 ট ) সঙ্গে মেমরি টমাত্রা। একাধিক স্তরের সাথে, সর্বাধিক লাভের সাথে ট্যাগগুলি প্রথমে সিদ্ধান্ত নেওয়া উচিত, যেখানে লাভটি এমন সংস্থাগুলির সংখ্যা যেগুলি তাদের ত্যাগ করার সম্ভাবনার চেয়ে বহুবার তাকাতে হবে না। লাভটি 50:50 সম্ভাবনার জন্য সর্বাধিক হয়ে যায় বা যখন 50% সত্তাগুলির কাছে এই নির্দিষ্ট ট্যাগ থাকে। অ্যাক্সেস প্যাটার্নগুলি জানা না থাকলেও এটি আপনাকে অনুকূল করতে দেয়।
আপনি প্রতিটি সেট দ্বারা সত্তাকে সারণি তৈরি করতে পারে এমন সেটগুলিও তৈরি করতে পারেন - এর জন্য T1
পরের জন্য সমস্ত সত্তার সাথে একটি সেট T2
। একটি স্পষ্ট (স্থান এবং সময়) অপ্টিমাইজেশান হ'ল যখন কোনও সেটটিতে সমস্ত উপাদানগুলির অর্ধেকেরও বেশি থাকে এবং এই ট্যাগ নেই এমন উপাদানগুলিকে সংরক্ষণ করতে - এইভাবে, সমস্ত ট্যাগের জন্য সূচকগুলি বিল্ডিংয়ের চেয়ে কম ½ · n · t
স্থান গ্রহণ করবে (সহ) টি মোট ট্যাগ)। নোট করুন পরিপূরক সেটগুলি সংরক্ষণ অন্যান্য অপ্টিমাইজেশানকে আরও কঠিন করে তুলতে পারে। আবার, আমি সেটগুলির জন্য (সাজানো) অ্যারে করতাম।
আপনি যদি কোনও সংখ্যার ব্যাপ্তির মাধ্যমেও আপনার সত্তাগুলি উপস্থাপন করেন তবে আপনি কেবল ধারাবাহিক ব্যাপ্তির আরম্ভকারী এবং শেষ সদস্যকে সঞ্চয় করে সূচক সেটগুলির জন্য ব্যবহৃত স্থানটি সংকুচিত করতে পারেন। বাস্তবায়ন-ভিত্তিতে এটি সম্ভবত একটি উচ্চ বিট দিয়ে সম্পন্ন হবে এটি নির্দেশ করার জন্য যে কোনও এন্ট্রি সীমাবদ্ধ বা নিয়মিত প্রবেশ entry
যদি এখন আমাদের সূচক সেট থাকে (এবং ট্যাগগুলিতে এইভাবে পরিসংখ্যান থাকে) তবে আমরা আমাদের পূর্বাভাসগুলি অনুকূল করতে পারি যাতে অসম্ভব বৈশিষ্ট্যগুলি প্রথম পরীক্ষা করা হয় (ব্যর্থ-দ্রুত কৌশল)। এর অর্থ হ'ল যদি T1
সাধারণ হয় এবং T2
বিরল হয়, তবে T1 & T2
সমস্ত T2
সূচক সেট এন্ট্রিগুলির মাধ্যমে পুনরাবৃত্তি করে এবং প্রতিটি উপাদানটির পরীক্ষার মাধ্যমে প্রিডিকেটটি মূল্যায়ন করা উচিত T1
।
যদি আমরা সূচক সেটগুলি প্রয়োগ করতে বাছাই করা অ্যারেগুলি ব্যবহার করি তবে বহু মূল্যায়ন পদক্ষেপগুলি মার্জিং ক্রিয়াকলাপ হিসাবে প্রয়োগ করা যেতে পারে। T1 & T2
এর অর্থ হ'ল আমরা এগুলি T1
এবং T2
তালিকাগুলি গ্রহণ করি , বৃহত ইনপুটগুলির আকারের জন্য একটি লক্ষ্য অ্যারে বরাদ্দ করি এবং উভয় ইনপুট ফাঁকা না হওয়া পর্যন্ত নিম্নলিখিত অ্যালগরিদম সম্পাদন করি: যদি T1[0] < T2[0]
, তবে T1++
(মাথা বাদ দিন)। তাহলে T1[0] > T2[0]
তারপর T2++
। উভয় মাথা সমান, তাহলে লক্ষ্য অ্যারে উপর যে সংখ্যা অনুলিপি করুন, এবং তিনটি পয়েন্টার (বাড়ায় T1
, T2
, লক্ষ্য)। যদি ভবিষ্যদ্বাণীটি হয় T1 | T2
, তবে কোনও উপাদান বাতিল করা হবে না তবে ছোটটি অনুলিপি করা হবে। ফর্মের T1 & ¬T2
একটি শিকারীও মার্জ করার কৌশলটি ব্যবহার করে প্রয়োগ করা যেতে পারে, তবে ¬T1
বা T1 | ¬T2
করতে পারে না।
ভবিষ্যদ্বাণীপূর্ণ সিদ্ধান্ত গাছের অর্ডার দেওয়ার সময় এটি বিবেচনা করা উচিত: &
চূড়ান্ত গণনা নির্ধারিত হচ্ছে এবং প্রকৃত উপাদানগুলির দিকে নজর দিতে হবে না যখন পরিপূরকগুলি হয় কোনওটির আরএইচএসের উপর বা শেষে দেখা উচিত ।
সূচিপত্র সেট ব্যবহার না করে প্রতিটি থ্রেড তার সত্তার অংশের মধ্য দিয়ে ফিল্টার করতে পারে এবং প্রেডিকেটের সাথে মেলে এমন উপাদানগুলির সংখ্যা ফেরত দিতে পারে, যা সংক্ষিপ্ত করা যায়। সূচক সেটগুলি ব্যবহার করার সময়, প্রতিটি থ্রেডকে সিদ্ধান্ত গাছের জন্য একটি নোড দেওয়া হবে। এটি দুটি ইনপুট স্ট্রিম গ্রহণ করে যা অর্ডার করা সেটগুলির সাথে সামঞ্জস্য করে এবং মার্জ করা স্ট্রিমটি ফেরত দেয়। লক্ষ্য করুন যে সিদ্ধান্ত গাছের প্রতিটি নোডের একটি সমান সেট রয়েছে যা সমস্ত উপাত্তকে উপস্থাপন করে যা উপ-এক্সপ্রেশনটি পূরণ করে এবং সেটগুলি অর্ডার করার কারণে পুরো সেটটি একবারে মার্জ করার জন্য একবারে জেনে রাখা প্রয়োজন হয় না ।
তালিকাভুক্ত সেটগুলি মার্জ করা বা সত্ত্বার তালিকার মাধ্যমে ফিল্টারিংয়ের মতো বিভিন্ন কৌশলকে একটি নির্দিষ্ট ডিগ্রিতে একত্রিত করা যেতে পারে। ফিল্টারিং খুব অনুমানযোগ্য কর্মক্ষমতা আছে। যদি কোনও কোয়েরিটি খুব নির্দিষ্ট হয় যাতে সূচক সেটগুলির ব্যবহার অনুসন্ধানের স্থানটি হ্রাস করে হ্রাস করে, তবে মার্জ অপারেশনগুলি আরও ভাল হতে পারে। এটি লক্ষণীয় গুরুত্বপূর্ণ যে অনেকগুলি বৃহত ইনপুট সেটগুলি মার্জ করার ফলে ব্রুট-ফোর্স অনুসন্ধানের চেয়ে অনেক খারাপ কার্যকারিতা দেখা দিতে পারে। একটি খুব অনুকূলিত অ্যালগরিদম ইনপুট আকার, ক্যোয়ারী কাঠামো এবং পরিসংখ্যান সূচকগুলির উপর নির্ভর করে একটি উপযুক্ত কৌশল বেছে নেবে।
একদিকে যেমন আঞ্চলিক ফলাফলগুলি ক্যাশে করা উপকারী হতে পারে যদি এটি আশা করা হয় যে ভবিষ্যতে একই ধরণের প্রশ্নগুলি চালানো হবে, যদিও তারা ইনিটাল রানকে ত্বরান্বিত করে না।
T1
জন্য একই অবজেক্ট রেফারেন্সE1
,E2
, ইত্যাদি?