দ্রুত সূচীকরণ, সংযোজন, প্রিপেন্ড, পুনরাবৃত্তির সাথে অ্যারের মতো স্থাবর (অবিচ্ছিন্ন) ডেটা স্ট্রাকচার বাস্তবায়ন


11

আমি অ্যারের অনুরূপ একটি ধ্রুবক ডেটা কাঠামো খুঁজছি (তবে অপরিবর্তনীয়), দ্রুত সূচীকরণ, সংযোজন, প্রিপেন্ড এবং পুনরাবৃত্তির (ভাল লোকাল) ক্রিয়াকলাপের অনুমতি দেয়।

Clojure স্থির ভেক্টর সরবরাহ করে, তবে এটি কেবল দ্রুত সংযোজনের জন্য। স্কালার ভেক্টর কার্যকরভাবে ধ্রুবক-সময় সংযোজন এবং পুনরায় সংযোজন করেছে, তবে এটি কীভাবে কার্যকর করা যায় তা আমি পাই না, কারণ এটি ক্লোজার ভেক্টর হিসাবে একই ডেটা স্ট্রাকচার (বিট-ম্যাপযুক্ত ভেক্টর ট্রাই) এবং যেমন আমি বুঝতে পেরেছি, বিট-ম্যাপযুক্ত ভেক্টর ট্রাই কিছু কৌশল ছাড়া দ্রুত প্রিপেন্ড করতে পারে না।

আমি বাস্তবায়ন ব্যবহারের জন্য প্রস্তুত নয় তবে কীভাবে এই জাতীয় ডেটা কাঠামোটি নিজে প্রয়োগ করতে পারি তার বিবরণে আমি আগ্রহী।

উত্তর:


13

সুস্পষ্ট প্রার্থী একটি অবিচ্ছিন্ন ভারসাম্য বাইনারি গাছ। আপনার তালিকাভুক্ত সমস্ত ক্রিয়াকলাপগুলি অনুলিপি ব্যবহার করে বা ( এলজি এন ) সময়ে করা যেতে পারে । এই রানটাইমটি কীভাবে অর্জন করবেন সে সম্পর্কে আরও তথ্যের জন্য, নীচে উল্লেখ করা ক্রিস ওকাসাকির বইটি দেখুন বা আমার উত্তর এখানেহে(1)হে(এলজিএন)

অবশ্যই, বৈকল্পিক হিসাবে, এই জাতীয় গাছের প্রতিটি পাতা নিজেই একটি পরিবর্তনযোগ্য অ্যারে (ক্রমাগত মানের ক্রম) ধারণ করতে পারে। এটি কোনও মান আপডেট করা কম দক্ষ করে তোলে তবে এটি আপনার পরিস্থিতির পক্ষে ভাল কাজ করতে পারে যদি আপনি কোনও বিদ্যমান মান সংশোধন না করতে চান, কেবল সংযোজন এবং সংশোধন করতে পারেন। এইভাবে, আপনার ভেক্টরটি পঁচায় স্থায়ী অ্যারেগুলির সাথে ভারসাম্য বাইনারি গাছ হিসাবে উপস্থাপিত, পরিবর্তনযোগ্য ক্রমের ক্রম হিসাবে উপস্থাপিত হয়। এটি দ্রুত ইনডেক্সিং (পাতার সংখ্যায় লগারিদমিক), দ্রুত সংযোজন এবং সংশোধন এবং দ্রুত পুনরাবৃত্তির অনুমতি দেয়। সবচেয়ে খারাপ ক্ষেত্রে অ্যাসিম্পটোটিক জটিলতা আরও ভাল নয়, তবে অনুশীলনে পারফরম্যান্সটি সম্ভবত আরও ভাল হতে পারে।

স্ট্যান্ডার্ড রেফারেন্স হ'ল ক্রিস ওকাসাকির 1998 সালের বই "পিউরিলি ফাংশনাল ডেটা স্ট্রাকচার"।
আরো দেখুন


ধন্যবাদ. দেখে মনে হচ্ছে আরআরবি-গাছগুলি ভাল প্রার্থী, এবং তারা ইতিমধ্যে (পূর্ণ নয়) ক্লোজার বাস্তবায়ন করেছে।
Tvaroh

আমার ধারণা ওকাসাকি আমাদের বলছেন কীভাবে অপরিবর্তনীয়তা এবং অধ্যবসায়ের এই রানটাইমগুলি অর্জন করতে হয়?
রাফেল

1
@ রাফেল, হ্যাঁ আপনি কীভাবে রানটাইম অর্জন করবেন তা ব্যাখ্যা করার জন্য আমি উল্লেখ যুক্ত করেছি (আমার উত্তরের শুরুতে)।
ডিডাব্লিউ

4

আমি ইনক্রিমেন্টাল রেগুলার এক্সপ্রেশন ম্যাচিং সম্পর্কে আমার নিবন্ধে এই জাতীয় ডেটা স্ট্রাকচারের একটি বাস্তবায়ন বর্ণনা করেছি - দেখুন http://jkff.info/articles/ire/#ropes-strings-with-fast-concationation এবং সেই অংশটির নীচে এবং উপরে ।

এটি ধ্রুব-উচ্চতা গাছের বিভিন্ন ধরণের (বি-গাছ বা 2-3 গাছের মতো)। মূলত এটি (2,3) গাছ, যার পাতা (N, 2N-1) অ্যারে, প্রতি-উপাদান ওভারহেড এড়ানোর জন্য। (A (N, 2N-1) অ্যারে এমন একটি অ্যারে যার দৈর্ঘ্য N..2N-1 এর দৈর্ঘ্যের মধ্যে রয়েছে) বৃহত্তর এন আপনাকে ছোট ছোট ওভারহেড দেয় তবে রৈখিকভাবে বিভাজন এবং সংমিশ্রনের জটিলতা বৃদ্ধি করে। ইনডেক্সিং, বিভাজন এবং কন্টেনটেশনের মতো অপারেশনগুলি পাতার স্তরে (এন, 2 এন-1) জেনারালাইজ করে 2-3 গাছের মধ্যে যেভাবে কাজ করে তার সাথে খুব মিল।


লিঙ্কগুলি বিরতি; দয়া করে একটি যথাযথ, শক্তিশালী রেফারেন্স দিন (এটি লোকেদের লিঙ্ক ছাড়াই আপনার কাগজ সন্ধান করতে দেয়)।
রাফেল

আমি কোনও জার্নালে কাগজটি প্রকাশ করি নি, কেবল আমার ব্যক্তিগত ওয়েবসাইটে। সম্ভবত এটি আর্ক্সিভের উপর রাখা উচিত, ভাল ধারণা।
jkff

আমি বেশিরভাগ লেখক (গুলি), শিরোনাম এবং বছর সম্পর্কে ভাবছিলাম - এটি দরকার হলে গুগলিংকে আরও সহজ করে তোলে। আরএক্সিভ এ লাগানো আরও ভাল, সত্য!
রাফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.