আমি একটি ডেটা স্ট্রাকচারের সন্ধান করছি যা একটি অক্ষর সেট over এর উপরের স্ট্রিংগুলির একটি সেট সঞ্চয় করে , নিম্নলিখিত ক্রিয়াকলাপ সম্পাদন করতে সক্ষম। স্ট্রিং এস এর সেট স্টোর করে ডেটা স্ট্রাকচার হিসাবে আমরা ডি ( এস ) কে চিহ্নিত করি ।
Add-Prefix-Setউপর : প্রদত্ত কিছু সেট টি এর (সম্ভবত খালি) স্ট্রিং, যার আকার একটি ধ্রুবক দ্বারা বেষ্টিত এবং কার স্ট্রিং লেন্থ একটি ধ্রুবক, এর বিনিময়ে দ্বারা বেষ্টিত করা হয় ডি ( { T গুলি | টন ∈ টি , গুলি ∈ এস } ) । এই উভয় সীমাবদ্ধ ধ্রুবক বিশ্বব্যাপী: সমস্ত ইনপুট টি এর জন্য তারা একই ।Get-Prefixesঅন : ফিরুন { এ | a s ∈ S , a ∈ Σ } । লক্ষ্য করুন আমি সত্যিই কিছু মনে না করেন কি কাঠামো এই সেট জন্য ব্যবহার করা হয়, যতদিন আমি এটির সামগ্রীগুলি গনা করতে হে ( | Σ | ) সময়।Remove-Prefixesউপর : রিটার্ন ডি ( { গুলি | একটি গুলি ∈ এস , একটি ∈ Σ } ) ।Merge: প্রদত্ত এবং ডি ( টি ) , রিটার্ন ডি ( এস ∪ টি ) ।
এখন, আমি সত্যিই সময়ে এই সমস্ত অপারেশনগুলি করতে চাই , তবে আমি এমন কাঠামোর সাথে ভাল যা এই সমস্ত অপারেশনগুলি ও ( এন ) সময়ে করে, যেখানে এন দীর্ঘতম স্ট্রিংয়ের দৈর্ঘ্য is কাঠামো। একত্রীকরণ ক্ষেত্রে, আমি চাই ণ ( এন 1 + + N 2 ) চলমান সময়, যেখানে n হল 1 হয় এন প্রথম এবং জন্য এন 2 এন দ্বিতীয় গঠন জন্য।
একটি অতিরিক্ত প্রয়োজন হ'ল কাঠামোটি অপরিবর্তনীয় বা কমপক্ষে যে উপরের ক্রিয়াকলাপগুলি 'নতুন' স্ট্রাকচারগুলি ফিরিয়ে দেয় যা পুরানোগুলিকে নির্দেশ করে এখনও আগের মতো কাজ করে।
Orশ্বর্যকরণ সম্পর্কে একটি নোট: এটি ভাল, তবে আপনাকে অধ্যবসায়ের জন্য নজর রাখতে হবে। আমি যেমন সমস্ত সময় পুরানো কাঠামোগুলি পুনরায় ব্যবহার করি, একই কাঠামোর কিছু নির্দিষ্ট সেট অপারেশনের সাথে যদি আমি কোনও খারাপ পরিস্থিতিতে আঘাত করি তবে আমি সমস্যায় পড়ব (সুতরাং এটি তৈরি করা নতুন কাঠামো উপেক্ষা করে)।
আমি যে পার্সিং অ্যালগরিদমে কাজ করছি তাতে আমি এমন কাঠামো ব্যবহার করতে চাই; উপরের কাঠামোটি আমার কাছে আলগোরিদমের জন্য প্রয়োজন চেহারাটি ধারণ করবে।
আমি ইতিমধ্যে একটি ট্রাই ব্যবহার করে বিবেচনা করেছি , তবে মূল সমস্যাটি হ'ল কীভাবে দক্ষতার সাথে মার্জ করতে হয় তা আমি জানি না। যদি স্ট্রিংগুলির সেটটিতে Add-Prefix-Setকেবলমাত্র একক-অক্ষরযুক্ত স্ট্রিং থাকে, তবে আপনি এই সেটগুলি একটি স্ট্যাকে সঞ্চয় করতে পারেন যা আপনাকে প্রথম (তিন) ক্রিয়াকলাপের জন্য চলমান সময় দেয়। যাইহোক, এই পদ্ধতিরটি মার্জ করার জন্যও কাজ করে না।
পরিশেষে, নোট করুন আমি কারকগুলিতে আগ্রহী নই : আমার যত্নের জন্য এটি স্থির।
Add-Prefix-Setএটি করতে পারেন )
Add-Prefix-Setবা আপনি একটি নির্বিচারে স্ট্রিং সেট দিয়ে শুরু করেন?