এটি একটি দীর্ঘ পাঠ্য। আমার সাথে সহ্য করুন। সিদ্ধ হয়ে, প্রশ্নটি হল: কোনও কার্যক্ষম স্থানে র্যাডিক্স সাজানোর অ্যালগরিদম আছে ?
প্রারম্ভিক
আমি একটি বিশাল সংখ্যক স্থির দৈর্ঘ্যের স্ট্রিং পেয়েছি যা কেবলমাত্র "এ", "সি", "জি" এবং "টি" অক্ষর ব্যবহার করে (হ্যাঁ, আপনি এটি অনুমান করেছেন: ডিএনএ ) যা আমি বাছাই করতে চাই।
এই মুহুর্তে, আমি ব্যবহার করি std::sort
যা এসটিএল এর সমস্ত সাধারণ বাস্তবায়নে অন্তঃকরণ ব্যবহার করে । এটি বেশ ভাল কাজ করে। যাইহোক, আমি নিশ্চিত যে রেডিক্স বাছাই আমার সমস্যাটি পুরোপুরি ঠিক করে দেয় এবং অনুশীলনে আরও ভালভাবে কাজ করা উচিত ।
বিস্তারিত
আমি এই অনুমানটিকে খুব নিখুঁত বাস্তবায়নের সাথে পরীক্ষা করেছি এবং তুলনামূলকভাবে ছোট ইনপুটগুলির জন্য (10,000 এর আদেশে) এটি সত্য ছিল (ভাল, কমপক্ষে দ্বিগুণের চেয়ে দ্রুত হিসাবে)। তবে সমস্যাটির আকার বড় হয়ে গেলে রানটাইম অত্যন্ত অস্বাভাবিকভাবে হ্রাস পায় ( এন > 5,000,000)।
কারণটি সুস্পষ্ট: রেডিক্স সাজানোর জন্য পুরো ডেটাটি অনুলিপি করা প্রয়োজন (আমার নিষ্পাপ বাস্তবায়নে একাধিকবার, আসলে)। এর অর্থ হ'ল আমি আমার মূল স্মৃতিতে 4 ডলার জিআইবি রেখেছি যা স্পষ্টতই কর্মক্ষমতা হ্রাস করে। তা না পারলেও সমস্যার আকারগুলি আরও বড় হয়ে যাওয়ার কারণে আমি এত বেশি স্মৃতি ব্যবহার করতে পারি না।
ব্যবহারের ক্ষেত্রে
আদর্শভাবে, এই অ্যালগরিদম ডিএনএ সেইসাথে DNA5, অথবা এমনকি ডিএনএ (যা একটি অতিরিক্ত ওয়াইল্ডকার্ড অক্ষর "N" মানে মঞ্জুর করে), 2 এবং 100 এর মধ্যে কোন স্ট্রিং দৈর্ঘ্য সঙ্গে কাজ করা উচিত IUPAC অস্পষ্টতা কোড (16 স্বতন্ত্র মান ফলে)। যাইহোক, আমি বুঝতে পারি যে এই সমস্ত ক্ষেত্রে আচ্ছাদন করা যায় না, তাই আমি যে কোনও গতির উন্নতি পেয়ে খুশি। কোডটি অ্যালগরিদম কোনটি প্রেরণ করবে তা গতিময় সিদ্ধান্ত নিতে পারে।
গবেষণা
দুর্ভাগ্যক্রমে, রেডিক্স সাজানোর উইকিপিডিয়া নিবন্ধটি অকেজো। ইন-প্লেস ভেরিয়েন্ট সম্পর্কে বিভাগটি সম্পূর্ণ আবর্জনা। র্যাডিক্স উপর, NIST-পিতাকেও অধ্যায় সাজানোর অবাস্তব পরবর্তী। দক্ষ অ্যাডাপটিভ ইন-প্লেস রেডিক্স বাছাই করা নামে একটি প্রতিশ্রুতিশীল-সাউন্ডিং পেপার রয়েছে যা "এমএসএল" অ্যালগরিদমকে বর্ণনা করে। দুর্ভাগ্যক্রমে, এই কাগজটিও হতাশ।
বিশেষত, নিম্নলিখিত জিনিস আছে।
প্রথমত, অ্যালগরিদমটিতে বেশ কয়েকটি ভুল রয়েছে এবং এতে অনেকগুলি অব্যক্ত থাকে। বিশেষত, এটি পুনরাবৃত্তি কলটির বিশদ দেয় না (আমি কেবল ধরে নিই যে এটি বর্তমান শিফট এবং মাস্কের মানগুলি গণনা করতে কিছু পয়েন্টার বৃদ্ধি করে বা হ্রাস করে)। এছাড়াও, এটি ফাংশনগুলি dest_group
এবং dest_address
সংজ্ঞা না দিয়ে ব্যবহার করে । এগুলি কীভাবে দক্ষতার সাথে প্রয়োগ করা যায় তা দেখতে আমি ব্যর্থ হয়েছি (এটি ও (1) এ; কমপক্ষে dest_address
তুচ্ছ নয়)।
সর্বশেষে তবে অন্ততপক্ষে, অ্যালগরিদম ইনপুট অ্যারের অভ্যন্তরের উপাদানগুলির সাথে অ্যারে সূচকগুলি অদলবদল করে স্থান-নেস অর্জন করে। এটি স্পষ্টতই কেবল সংখ্যাসূচক অ্যারেগুলিতে কাজ করে। আমার এটি স্ট্রিংয়ে ব্যবহার করা দরকার। অবশ্যই, আমি কেবল দৃ strong় টাইপিংয়ের স্ক্রু করতে পারি এবং ধরেই নিতে পারি যে স্মৃতিটি আমার কোনও সূচক যেখানে এটি সম্পর্কিত নয় সেগুলি সঞ্চয় করে সহ্য করবে। তবে এটি কেবল ততক্ষণ কাজ করে যতক্ষণ না আমি আমার স্ট্রিংগুলি 32 বিট মেমরির (32 বিট পূর্ণসংখ্যা ধরে) মেশাতে পারি। এটি কেবলমাত্র 16 টি অক্ষর (এই মুহুর্তের জন্য উপেক্ষা করুন যে 16> লগ (5,000,000))।
লেখকের একজনের অন্য একটি কাগজ মোটেই কোনও সঠিক বিবরণ দেয় না, তবে এটি এমএসএলের রানটাইমকে সাব-লিনিয়ার হিসাবে দেয় যা ভুল বলে ভুল।
পুনরুদ্ধার করার জন্য : ডিএনএ স্ট্রিংয়ের সাথে কাজ করে এমন কোনও কার্যত রেফারেন্স বাস্তবায়ন বা কমপক্ষে একটি ভাল সিউডোকোড / ওয়ার্কিং ইন-প্লেস র্যাডিক্স সাজানোর বর্ণনা পাওয়া যাবে কি?