নিম্নলিখিতটি একটি অ্যালগরিদম দেয় যা প্রায় সময় এবং স্পেস ব্যবহার করে।2 এন / 22n2n/2
প্রথমে আসুন আইটেমের সমস্ত সাবসেটের যোগফলগুলি বাছাইয়ের সমস্যাটি দেখুন ।n
এই সাবপ্রব্লেমটি বিবেচনা করুন: আপনার দৈর্ঘ্য দুটি সাজানো তালিকা রয়েছে এবং আপনি তালিকাগুলিতে সংখ্যার জোড় সংখ্যার বাছাই করা তালিকা তৈরি করতে চান। আপনি এটি মোটামুটি সময়ে (আউটপুট আকার), তবে সাবলাইনার স্পেসে করতে চান। আমরা স্থান অর্জন করতে পারি । আমরা একটি অগ্রাধিকারের সারি রাখি এবং ক্রমবর্ধমান ক্রমে অগ্রাধিকারের সারি থেকে অঙ্কগুলি টানতে পারি।ও ( মি 2 ) ও ( এম )mO(m2)O(m)
ক্রমবর্ধমান ক্রম অনুসারে তালিকাগুলি এবংআমরা অঙ্কগুলি , নিয়ে থাকি এবং এগুলিকে অগ্রাধিকারের কাতারে রাখি।খa1…am m a i + b 1 i = 1 … মিb1…bmmai+b1i=1…m
এখন, যখন আমরা অগ্রাধিকারের সারির বাইরে সবচেয়ে ছোট অবশিষ্ট যোগফল , যদি আমরা তখন যোগফলকে the অগ্রাধিকার সারিতে রাখি । অগ্রাধিকারের সারিতে স্থানটি প্রাধান্য পায়, যা সর্বদা সর্বনিম্ন যোগফল থাকে। এবং সময়টি হ'ল , যেহেতু আমরা প্রতিটি অগ্রাধিকার সারি ক্রিয়াকলাপের জন্য ব্যবহার করি। এটি দেখায় যে আমরা সময় এবং স্পেসে সাব-প্রব্লেমটি করতে পারি । j < m a i + b j + 1 m O ( m 2 লগ এম )ai+bjj<mai+bj+1mO(m2logm)ও ( এম 2 লগ এম ) ও ( এম )O(logm)O(m2logm)O(m)
এখন, সংখ্যার সমস্ত উপ- সংখ্যার যোগফলগুলি বাছাই করার জন্য , আমরা কেবলমাত্র এই সাবরুটিন ব্যবহার করি যেখানে আইটেমের প্রথম অর্ধের সেট এবং তালিকাটি সেট আইটেম দ্বিতীয়ার্ধ। আমরা একই তালিকাটি অ্যালগোরিদমের সাথে পুনরাবৃত্তভাবে খুঁজে পেতে পারি finda i b inaibi
আমরা এখন আসল সমস্যাটি বিবেচনা করব। কে স্থানাঙ্কের সেট হতে দিন এবং এর স্থানাঙ্কের সেট হতে দিন । তারপরে
0 এস 1 1 ∏ i ∈ এস 0S00S11
∏i∈S0p(vi=0)∏i∈S1p(vi=1)==∏1≤i≤np(vi=0)∏i∈S1p(vi=1)p(vi=0)∏1≤i≤np(vi=0)exp(∑i∈S1logp(vi=1)p(vi=0)).
এই সংখ্যাগুলি বাছাই করা বাছাই করার , তাই আমরা এর উপসর্গের বাছাই করতে সমস্যা হ্রাস করেছি আইটেম।এন∑i∈S1logp(vi=1)−logp(vi=0)n