আপনার যদি খুব কম চক্র থাকে তবে এখানে একটি অ্যালগরিদম রয়েছে যা কম জায়গা ব্যবহার করবে তবে শেষ হতে যথেষ্ট সময় লাগবে।
[সম্পাদনা করুন] আমার আগের রান-টাইম বিশ্লেষণে আমরা যে নোডগুলি পরিদর্শন করেছি সেগুলি পূর্বের নমুনাযুক্তদের মধ্যে রয়েছে কিনা তা নির্ধারণের গুরুত্বপূর্ণ ব্যয়টি মিস করেছে; এটি সংশোধন করার জন্য এই উত্তরটি কিছুটা সংশোধন করা হয়েছে।
আমরা আবার এস এর সমস্ত উপাদান দিয়ে পুনরাবৃত্তি করি । আমরা যখন এস elements এস উপাদানগুলির কক্ষপথটি ঘুরে দেখি তখন আমরা যে নোডগুলি পরিদর্শন করেছি সেগুলি থেকে নমুনা করেছি যাতে আমরা আবার সেগুলি দেখতে পেয়েছি কিনা তা পরীক্ষা করতে সক্ষম হব। আমরা 'উপাদানগুলি' থেকে নমুনার একটি তালিকাও বজায় রাখি - কক্ষপথের ইউনিয়নগুলি যা একটি সাধারণ চক্রের সমাপ্ত হয় (এবং যা চক্রের সাথে সমান হয়) - যা আগে দেখা হয়েছিল।
উপাদানগুলির একটি খালি তালিকা শুরু করুন complist
,। প্রতিটি উপাদান সেই উপাদান থেকে নমুনার সংগ্রহ দ্বারা প্রতিনিধিত্ব করা হয়; আমরা একটি অনুসন্ধান ট্রিও বজায় রাখি samples
যা সেই উপাদানগুলিকে সঞ্চয় করে যা কোনও উপাদান বা অন্যের জন্য নমুনা হিসাবে নির্বাচিত হয়েছে। যাক জি পর্যন্ত পূর্ণসংখ্যার একটি ক্রম হতে এন , যার জন্য সদস্যপদ দক্ষতার কিছু বুলিয়ান সম্পৃক্ত কম্পিউটিং দ্বারা অবধারণীয় হয়; উদাহরণস্বরূপ, 2 অথবা নিখুঁত শক্তি পি ম কিছু পূর্ণসংখ্যা জন্য ক্ষমতা পি । প্রতিটি এস ∈ এস এর জন্য নিম্নলিখিতটি করুন:
- যদি এসটি থাকে তবে
samples
# 5 ধাপে যান।
- একটি খালি তালিকা
cursample
, একটি পুনরাবৃত্তি j ← f ( গুলি ) এবং একটি কাউন্টার টি ← 1 শুরু করুন।
- যখন j থাকে না
samples
:
- যদি t ∈ G হয় , উভয়তে j প্রবেশ করান cursample
এবং samples
।
- বৃদ্ধি t এবং সেট j ← f (j) ।
- কিনা তা আপনার পরীক্ষা ঞ হয়
cursample
। যদি তা না হয় তবে আমরা একটি পূর্ববর্তী অন্বেষিত উপাদানটির মুখোমুখি হয়েছি: আমরা কোন উপাদানটি জে'র অন্তর্ভুক্ত তা যাচাই করেছি এবং এটির বৃদ্ধি করার cursample
উপযুক্ত উপাদানগুলির সমস্ত উপাদান complist
sertোকাতে পারি। অন্যথায়, আমরা বর্তমান কক্ষপথ থেকে একটি উপাদানটির পুনরায় মুখোমুখি হয়েছি যার অর্থ আমরা পূর্ব-আবিষ্কৃত চক্রের কোনও প্রতিনিধির মুখোমুখি না হয়ে কমপক্ষে একবার একবার একটি চক্রকে অতিক্রম করেছি: আমরা cursample
সদ্য সন্ধান করা উপাদান থেকে নমুনাগুলির সংগ্রহ হিসাবে সন্নিবেশ করি complist
।
- পরবর্তী উপাদান s ∈ S এ এগিয়ে যান ।
জন্য n = | এস |, এক্স (এন) কে চক্রের প্রত্যাশিত সংখ্যা ( উদাহরণস্বরূপ এক্স (এন) = এন 1/3 ) বর্ণনা করে একঘেয়ে বর্ধমান ফাংশন হতে দিন, এবং Y (n) = y (n) লগ ( এন ) ∈ Ω ( এক্স (এন) লগ ( এন )) মেমোরি ব্যবহারের জন্য লক্ষ্য নির্ধারণ করে ( যেমন y (n) = n 1/2 ) একঘেয়ে বর্ধমান ক্রিয়াকলাপ । আমাদের y (n) ∈ Ω ( X (n) ) প্রয়োজন কারণ প্রতিটি উপাদান থেকে একটি করে নমুনা সঞ্চয় করতে কমপক্ষে X (n) লগ ( এন ) স্থান লাগবে।
একটি কক্ষপথের যত বেশি উপাদান আমরা নমুনা করি, তত দ্রুত আমরা কক্ষপথের শেষে চক্রের কোনও নমুনা দ্রুত নির্বাচন করি এবং ততক্ষণে দ্রুত সেই চক্রটি সনাক্ত করি। অ্যাসিম্পটিক্স দৃষ্টিকোণ থেকে, আমাদের স্মৃতিশক্তির সীমাবদ্ধতার পরে যতটা নমুনা পাওয়া যায় তা বোধগম্য হয়: আমরা পাশাপাশি G কে একটি প্রত্যাশিত y (n) উপাদান রাখতে পারি যা এন এর চেয়ে কম থাকে ।
- যদি এস এর কক্ষপথের সর্বাধিক দৈর্ঘ্য L হওয়ার আশায় থাকে তবে আমরা G কে L / y (n) এর পূর্ণসংখ্যা গুণবান হতে পারি ।
- যদি কোনও প্রত্যাশিত দৈর্ঘ্য না থাকে, আমরা কেবল প্রতি এন / ওয়াই (এন) একবার নমুনা করতে পারিউপাদান; এটি যে কোনও ক্ষেত্রে নমুনার মধ্যবর্তী ব্যবধানগুলিতে একটি উপরের আবদ্ধ।
যদি কোনও নতুন উপাদান অনুসন্ধান করার জন্য, আমরা এস এর পূর্ববর্তী উপাদানগুলি সন্ধান করতে শুরু করি যা আমরা পূর্বে পরিদর্শন করেছি (কোনও নতুন উপাদান আবিষ্কার করা হচ্ছে বা পুরানো যার যার টার্মিনাল সাইকেল ইতিমধ্যে পাওয়া গেছে) থেকে এটি কমপক্ষে n / y নেবে ( n) পূর্বে নমুনাযুক্ত উপাদানটির পুনরাবৃত্তি; এটি তখন সময়ের সংখ্যার উপরের একটি আবদ্ধ, প্রতিটি নতুন উপাদান অনুসন্ধান করার চেষ্টা করার জন্য, আমরা রিলান্ড্যান্ট নোডগুলি অতিক্রম করি। যেহেতু আমরা করতে এন যেমন প্রচেষ্টা, আমরা তারপর redundantly উপাদান পরিদর্শন করবেন এস সর্বাধিক এন 2 / Y (ঢ) মোট বার।
সদস্যতার জন্য পরীক্ষার জন্য প্রয়োজনীয় কাজ samples
হ'ল ও ( y (n) লগ y (n) ), যা আমরা প্রতিটি দর্শনে পুনরাবৃত্তি করি: এই চেকিংয়ের সংযোজনীয় ব্যয় হ'ল ও ( এন 2 লগ ওয়াই (এন) )। নমুনাগুলি তাদের নিজ নিজ সংগ্রহগুলিতে যুক্ত করার ব্যয়ও রয়েছে, যা সামগ্রিকভাবে হে ( y (n) লগ ওয়াই (এন) )। অবশেষে, প্রতিবার যখন আমরা কোনও পূর্ববর্তী আবিষ্কারক উপাদানটির পুনরায় মুখোমুখি হই, তখন আমরা কোন উপাদানটি পুনরায় আবিষ্কার করেছি তা নির্ধারণ করতে আমাদের X (n) লগ * y (এন) সময় ব্যয় করতে হবে; যেহেতু এটি n বার পর্যন্ত ঘটতে পারে , জড়িত ক্রমসংক্রান্ত কাজটি n X (n) লগ y (n) দ্বারা আবদ্ধ ।
সুতরাং, আমরা যে নোডগুলি পরিদর্শন করি সেগুলি নমুনাগুলির মধ্যে রান-টাইমকে প্রাধান্য দেয় কিনা তা যাচাই করে সংশ্লেষিত কাজ সম্পাদিত: এটির জন্য ও ( এন 2 লগ ওয়াই (এন) ) ব্যয়। তারপরে আমাদের y (n) যথাসম্ভব ছোট করা উচিত, যা ও ( এক্স (এন) ) বলতে হবে।
সুতরাং, কেউ হে ( এক্স (এন) লগ ( এন )) স্পেসে ও ( এন 2 লগ এক্স (এন) ) গ্রহণ করে চক্রের সংখ্যা (যা সেই চক্রগুলির মধ্যে শেষ হওয়া সংখ্যার সমান) en এটি করার সময়, যেখানে এক্স (এন) হ'ল চক্রের প্রত্যাশিত সংখ্যা।