দ্রুত বানান পরীক্ষক তৈরির জন্য কার্যকর ডেটা স্ট্রাকচার


41

আমি একটি বানান-পরীক্ষক লেখার চেষ্টা করছি যা একটি দুর্দান্ত বৃহত অভিধানের সাথে কাজ করা উচিত। কোন শব্দটি ভুল বানান শব্দের নিকটবর্তী হয় তা নির্ধারণ করতে ডামেরাউ-লেভেনস্টাইন দূরত্ব ব্যবহার করে আমার অভিধানের ডেটা ইনডেক্স করার জন্য আমি একটি কার্যকর উপায় চাই ।

আমি এমন একটি ডেটা স্ট্রাকচারের সন্ধান করছি যা আমাকে মহাকাশ জটিলতা এবং রানটাইম জটিলতার মধ্যে সেরা সমঝোতা দেয়।

ইন্টারনেটে আমি যা পেয়েছি তার উপর ভিত্তি করে, কী ধরণের ডেটা স্ট্রাকচার ব্যবহার করতে হবে সে সম্পর্কে আমার কয়েকটি লিড রয়েছে:

trie

Trie-500px

এটি আমার প্রথম চিন্তা এবং বাস্তবায়ন করা বেশ সহজ দেখায় এবং দ্রুত অনুসন্ধান / সন্নিবেশ সরবরাহ করা উচিত। দামেরাউ-লেভেনস্টাইন ব্যবহার করে আনুমানিক অনুসন্ধানের বিষয়টি এখানেও কার্যকর করা উচিত be স্পেস জটিলতার ক্ষেত্রে এটি খুব কার্যকরী বলে মনে হচ্ছে না কারণ আপনার সম্ভবত পয়েন্টার স্টোরেজ সহ প্রচুর ওভারহেড রয়েছে।

প্যাট্রিসিয়া ট্রে

Trie-500px

এটি নিয়মিত ট্রির চেয়ে কম জায়গা ব্যয় করে বলে মনে হচ্ছে আপনি মূলত পয়েন্টার সংরক্ষণের ব্যয়টি এড়িয়ে যাচ্ছেন, তবে আমার কাছে খুব বড় অভিধানের ক্ষেত্রে ডেটা বিভাজন সম্পর্কে আমি কিছুটা উদ্বিগ্ন।

প্রত্যয় গাছ

প্রত্যয়-500px

আমি এটি সম্পর্কে নিশ্চিত নই, মনে হয় কিছু লোক পাঠ্য খনির ক্ষেত্রে এটি দরকারী বলে মনে করে তবে আমি স্পষ্টভাবে নিশ্চিত নই যে এটি একটি বানান পরীক্ষকের জন্য পারফরম্যান্সের ক্ষেত্রে কী দেবে।

টার্নারি অনুসন্ধান ট্রি

TST

এগুলি দেখতে সুন্দর লাগছে এবং জটিলতার দিক থেকে প্যাট্রিসিয়া ট্রাইসের কাছাকাছি হওয়া উচিত (আরও ভাল?) তবে আমি প্যাট্রিশিয়া ট্রাইজের চেয়ে আরও খারাপ হতে পারলে খণ্ডিতকরণ সম্পর্কে নিশ্চিত নই।

ফাটল গাছ

বিস্ফোরণ

এটি হাইব্রিডের মতো বলে মনে হচ্ছে এবং চেষ্টা এবং এর মতো এর থেকে কী কী লাভ হবে তা আমি নিশ্চিত নই, তবে আমি বেশ কয়েকবার পড়েছি যে এটি পাঠ্য খনির জন্য খুব দক্ষ।


এই প্রসঙ্গে কোন ডেটা স্ট্রাকচারটি ব্যবহার করা সবচেয়ে ভাল এবং অন্যগুলির তুলনায় এটি কী আরও ভাল করে তোলে সে সম্পর্কে আমি কিছু প্রতিক্রিয়া পেতে চাই। যদি আমি এমন কিছু ডেটা স্ট্রাকচার মিস করছি যা বানান-পরীক্ষকের পক্ষে আরও বেশি উপযুক্ত হবে তবে আমিও খুব আগ্রহী।


প্যাট্রিসিয়া ট্রাই পয়েন্টারগুলি সঞ্চয় করার ব্যয়টি কীভাবে এড়াতে পারে? এটি কি কেবল একটি এন.ইউইকিপিডিয়া.আর / উইকি / রেডিক্স_ট্রি ? যদি এটি হয় তবে আমি মনে করি এটি এখনও প্রচুর পয়েন্টার সঞ্চয় করে তবে আপনার প্রচুর স্থান সঞ্চয় হবে কারণ সাধারণ উপসর্গগুলি কেবল একবারে সংরক্ষণ করা হয়
জো

n

1
@ লিঙ্কার: আপনি কি আপনার অভিধানের জন্য সমস্ত রূপ চেষ্টা করেছেন? একটি স্থির ব্যবহারের ক্ষেত্রে দেওয়া, কোন ডেটাস্ট্রাকচার কতটা জায়গা ব্যয় করে তা খুঁজে বের করার সম্ভবত এটিই দ্রুততম উপায়।
রাফেল

1
এটি কেবলমাত্র একটি প্রাথমিক অভিধান, সঠিকভাবে বানান শব্দের একটি পরিচিত তালিকা।
চার্লস মেনগুই

উত্তর:


4

আমি একই সমস্যার মুখোমুখি হয়েছি, তবে ভিন্ন ভিন্ন পদ্ধতি নিয়েছি। আপনি কিছু "হ্যাশ" ফাংশন তৈরি করতে পারেন, যা অনুরূপ শব্দের জন্য একই বা কাছাকাছি সংখ্যা দেবে।

সমস্যাটি হ'ল, সেই ফাংশন যা সন্নিবেশ / সরিয়ে দেওয়ার সাথে শব্দের জন্য "ভাল" ফলাফল দেয়, তা রূপান্তরটির জন্য "খারাপ" দেয় এবং বিপরীতে। উদাহরণ: সংখ্যার সাথে চিঠিপত্রের মানচিত্র, সংলগ্ন সংখ্যার অনুরূপ চিঠি এবং প্রতিটি অক্ষরের শব্দে কেবল তাদের যোগফল দিন। তারপরে প্রতিটি কী এর জন্য সেট সহ হ্যাশ-টেবিল তৈরি করুন এবং শব্দের জন্য ছেদটি সন্ধান করুন।

যদি আমরা "স্পেস" শব্দটির শব্দের দিকে লক্ষ্য করি তবে কিছু ফলাফল অর্জন করা যেতে পারে। চিঠি পরিবর্তন করার জন্য এক্স, যোগ / অপসারণের জন্য ওয়াই, ট্রানজিশনের জন্য জেড, বা এর মতো কিছু।

তবে এটি কেবল বিমূর্ত ধারণা, এগুলি বাস্তবায়নের জন্য আমার পর্যাপ্ত সময় নেই।


এই Soundex নেই en.wikipedia.org/wiki/Soundex
rgrig

4

O(log(n))O

মেট্রিক ট্রি এ স্ট্রিং সংরক্ষণ করবেন না। কেবল একটি সূচক সঞ্চয় করুন, এবং একটি প্যাট্রিসিয়া গাছের স্ট্রিংগুলি সঞ্চয় করুন।

আপনার কোন গাছটি ব্যবহার করা উচিত তা আমি নিশ্চিত নই। এটি আপনার ডেটা এবং আপনার প্রয়োজনীয়তার উপর নির্ভর করবে (আপনার কি দ্রুত inোকানো দরকার?) আপনার প্রশ্নটি আপডেট করুন যদি আপনি দেখতে পান যে একটি গাছ অন্যের চেয়ে কার্যকর is

আপনি লুসিনের মতো বিশেষ সরঞ্জামগুলিও দেখতে পারেন।

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