আমি একটি দক্ষ স্ট্রিং ট্রাই বাস্তবায়ন খুঁজছি। বেশিরভাগ ক্ষেত্রেই আমি এর মতো কোড পেয়েছি:
জাভাতে রেফারেন্সিয়াল বাস্তবায়ন (উইকিপিডিয়া প্রতি)
বেশিরভাগ দুটি কারণে আমি এই বাস্তবায়নগুলি অপছন্দ করি:
- তারা কেবল 256 ASCII অক্ষর সমর্থন করে। আমাকে সিরিলিকের মতো জিনিসগুলি coverাকতে হবে।
- এগুলি অত্যন্ত স্মৃতিশক্তি অযোগ্য ine
প্রতিটি নোডে 256 টি রেফারেন্সের অ্যারে থাকে যা জাভাতে একটি 64 বিট মেশিনে 4096 বাইট। এই নোডের প্রতিটিতে 4096 বাইটের প্রতিটি রেফারেন্স সহ 256 টি পর্যন্ত সাবনোড থাকতে পারে। সুতরাং প্রতিটি ASCII 2 টি অক্ষরের স্ট্রিংয়ের জন্য একটি সম্পূর্ণ ট্রাইয়ের জন্য 1MB এর চেয়ে কিছু বেশি প্রয়োজন। তিনটি চরিত্রের স্ট্রিং? 256MB কেবল নোডগুলিতে অ্যারে করার জন্য। ইত্যাদি।
অবশ্যই আমার ট্রিতে ১ million মিলিয়ন তিনটি চরিত্রের স্ট্রিং থাকার ইচ্ছা নেই, তাই প্রচুর স্থান স্রেফ নষ্ট হয়ে গেছে। এগুলির বেশিরভাগ অ্যারে কেবল নাল রেফারেন্স হিসাবে তাদের ক্ষমতা সন্নিবেশিত কীগুলির প্রকৃত সংখ্যাকে অতিক্রম করে। এবং যদি আমি ইউনিকোড যুক্ত করি তবে অ্যারেগুলি আরও বড় হয় (জাভাতে 256 এর পরিবর্তে চরের 64k মান রয়েছে)।
স্ট্রিংগুলির জন্য দক্ষ ট্রাই করার কোনও আশা আছে কি? আমি এই ধরণের বাস্তবায়নের তুলনায় বেশ কয়েকটি উন্নতি বিবেচনা করেছি:
- রেফারেন্সের অ্যারে ব্যবহারের পরিবর্তে, আমি আদিম পূর্ণসংখ্যার ধরণের অ্যারে ব্যবহার করতে পারি, যা নোডগুলির রেফারেন্সের অ্যারেটিতে সূচি দেয় যার আকারটি প্রকৃত নোডের সংখ্যার কাছাকাছি।
- আমি স্ট্রিংগুলিকে 4 টি বিট অংশে বিভক্ত করতে পারি যা গভীর গাছের দামে 16 মাপের নোড অ্যারেগুলিকে অনুমতি দেয়।