সমস্ত জোড় জিসিডি গণনা করে, নকলগুলি সরিয়ে, এবং পুনরাবৃত্তি করে তুলনামূলক দক্ষতার সাথে এটি সমাধান করা সম্ভব। এটি পুনরাবৃত্তি করার আগে ডুপ্লিকেটগুলি সরিয়ে ফেলার কাজ এটি কার্যকর করে তোলে।
আমি নীচে আরও বিস্তারিতভাবে অ্যালগরিদম ব্যাখ্যা করব, তবে প্রথমে, এটি বাইনারি অপারেটর সংজ্ঞায়িত করতে সহায়তা করে । যদি ধনাত্মক পূর্ণসংখ্যার সেট হয় তবে সংজ্ঞা দিনএস , টি⊗এস, টি
এস। টি={gcd(s,t):s∈S,t∈T}.
নোট করুনএবং (আপনার সমস্যায়); সাধারণত, সেগুলির চেয়েও ছোট হবে, যা অ্যালগরিদমকে দক্ষ করতে সহায়তা করে। এছাড়াও লক্ষ করুন যে আমরা সাথে গণনা করতে পারি সাধারণ গণনা দ্বারা জিসিডি অপারেশন।| এস ⊗ টি | ≤ 10 9 এস ⊗ টি এস ⊗ টি | এস | × | টি ||S⊗T|≤|S|×|T||S⊗T|≤109S। টিএস। টি|S|×|T|
সেই স্বরলিপিটি সহ, এখানে আলগোরিদিম। যাক সংখ্যার ইনপুট সেট করা। কম্পিউট , তারপর , তারপর , ইত্যাদি। ক্ষুদ্রতম খুঁজুন যেমন যে কিন্তু । তারপরে আপনি জানেন যে এই জাতীয় ক্ষুদ্রতম উপসেটটির আকার হ'ল । আপনি যদি এই জাতীয় সাবসেটের একটি দৃ concrete় উদাহরণ আউটপুট করতে চান তবে ব্যাক-পয়েন্টার রেখে আপনি সহজেই এই জাতীয় সেটটি পুনর্গঠন করতে পারেন।এস 2 = এস 1 ⊗ এস 1 এস 3 = এস 1 ⊗ এস 2 এস 4 = এস 1 ⊗ এস 3 কে 1 ∈ এস কে 1 ∉ এস কে - 1 কেS1S2=S1⊗S1S3=S1⊗S2S4=S1⊗S3k1∈Sk1∉Sk−1k
এটি তুলনামূলকভাবে দক্ষ হবে, কারণ মধ্যবর্তী সেটগুলির কোনওটিই above চেয়ে বেশি আকারে বৃদ্ধি পায় না (বাস্তবে, তাদের আকার সম্ভবত এর চেয়ে অনেক কম হবে), এবং চলমান জন্য প্রায় জিসিডি অপারেশন। 500 × ( | এস 1 | + | এস 2 | + ⋯ )109500×(|S1|+|S2|+⋯)
এখানে এমন একটি অপ্টিমাইজেশন যা আরও দক্ষতা আরও উন্নত করতে পারে। মূলত, আপনি মতো ক্ষুদ্রতম খুঁজে পেতে পুনরাবৃত্ত দ্বিগুণ ব্যবহার করতে পারেন । বিশেষ করে, একে উপাদান , আমরা ক্ষুদ্রতম উপসেট ট্র্যাক রাখতে1 ∈ এস ট এক্স ∈ এস আমি S 1 এস 1 , S 2 , S 4 , S 8 , এস 9 এস 2 = এস 1 ⊗ এস 1 এস 4 = এস 2 ⊗ এস 2 এস 8 = এস 4 ⊗ এস 4 এস 9 = এস 1 × এস 8 কে ∈ [ 1k1∈Skx∈SiS1 যার GCD হয় যার আকার ≤ আমি । (আপনি যখন সদৃশগুলি সরিয়ে ফেলেন, তখন আপনি ছোটটি সাবসেটের পক্ষে সম্পর্কগুলি সমাধান করুন)) এখন নয়টি সেট এস 1 , এস 2 , এস 3 , এস 4 , … , এস 9 এর ক্রমটি গণনা করার চেয়েx≤iS1,S2,S3,S4,…,S9আমরা পরিবর্তে পাঁচটি সেট ক্রম গনা , কম্পিউটিং দ্বারা , তারপর , তারপর , তারপর । আপনি যেতে গিয়ে, তেমন প্রথম । একবার আপনি পাওয়া করেছি যেমন যে , আপনি অবিলম্বে বন্ধ করতে পারবেন: আপনি ক্ষুদ্রতম উপসেট যার GCD হয় জানতে পারেন সঙ্গে যুক্ত উপসেট দিকে তাকিয়ে । সুতরাং, আপনি এমন কোনও সেট পৌঁছানোর সাথে সাথে আপনি থামতে পারবেনS1,S2,S4,S8,S9S2=S1⊗S1S4=S2⊗S2S8=S4⊗S4S9=S1×S81 ∈ এস কে কে 1 ∈ এস কে 1 1 এস কে 1 ∈ এস কেk∈[1,2,4,8,9]1∈Skk1∈Sk11Sk1∈Sk, এটি আপনাকে কোনও ছোট উপসেট খুঁজে পেলে তাড়াতাড়ি থামতে দেয়।
এটি সময়-দক্ষ এবং স্থান-দক্ষ হতে হবে। প্রতিটি উপাদান each এর জন্য স্থান বাঁচানোর জন্য আপনাকে পুরো সেটটি সংরক্ষণ করতে হবে না: এটি দুটি ব্যাকপয়েন্টার সংরক্ষণ করার জন্য যথেষ্ট (যাতে এর দুটি উপাদান আপনি জিসিডি নিয়েছিলেন, পেতে ) এবং বৈকল্পিকভাবে সংশ্লিষ্ট সাবসেটের আকার।এস আই , এস জে এক্সx∈SkSi,Sjx
নীতিগতভাবে, আপনি যে কোনও ক্রম ক্রমটি অন্য কোনও সংযোজন দ্বারা প্রতিস্থাপন করতে পারেন । আমি জানি না যে আরও কিছু সংযোজন চেইন আরও ভাল হবে কিনা। সর্বোত্তম পছন্দটি সঠিক উত্তরগুলির বিতরণ এবং সেটগুলি এর প্রত্যাশিত আকারের উপর নির্ভর করবে যা আমার কাছে স্পষ্ট নয় তবে সম্ভবত পরীক্ষার মাধ্যমে প্রাপ্ত হতে পারে।এস কে[1,2,4,8,9]Sk
ক্রেডিট: প্রতিটি উপাদান সহ সংখ্যার একটি উপসেট জমা করার ধারণা জন্য KWillets আমার ধন্যবাদ , যা তাড়াতাড়ি বাঁধন অনুমতি দেয়।Si