আমি কীভাবে একটি হ্যাশ টেবিল এবং একটি ট্রি (উপসর্গ গাছ) এর মধ্যে চয়ন করব?


134

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

আপনি সূচকটি পাওয়ার পরে হ্যাশ টেবিলগুলি তাত্ক্ষণিকভাবে চেহারা হবে । সূচকটি পাওয়ার জন্য কীটি হ্যাশ করা মনে হচ্ছে এটি সহজেই প্রায় 50 টি পদক্ষেপ নিতে পারে।

কেউ কি আমাকে এই সম্পর্কে আরও অভিজ্ঞ দৃষ্টিভঙ্গি সরবরাহ করতে পারেন? ধন্যবাদ!


1
এটি লক্ষ করার মতো যে একটি রেডিক্স গাছ একটি সরল ট্রাইয়ের চেয়ে বেশি দক্ষ কারণ আপনার প্রতিটি স্ট্রিং বাইটের জন্য একটি নতুন শাখা লাগবে না। এছাড়াও, রেডিক্স ট্রি হ্যাশ টেবিলের চেয়ে ভাল "ফাজি" অনুসন্ধানগুলির জন্য সমর্থন সরবরাহ করে কারণ আপনি যখন পথটি কাজ করার সময় ব্যক্তিগত বিটগুলি দেখছেন। উদাহরণস্বরূপ 00110010ইনপুট বাইট হতে পারে তবে আপনি ম্যাচটি অন্তর্ভুক্ত করতে চান 00111010যা কেবলমাত্র একটি বিট সরানো হয়েছে।
এক্সনক্রস

উত্তর:


116

চেষ্টাগুলির সুবিধা:

অধিকার:

  • অনুমানযোগ্য ও (কে) দেখার সময় যেখানে কে কী এর আকার
  • খোঁজখবরটি যদি সেখানে না থাকে তবে কে-এর চেয়ে কম সময় নিতে পারে
  • সমর্থন ট্র্যাভারসাল আদেশ
  • হ্যাশ ফাংশনের দরকার নেই
  • মুছে ফেলা সহজ

নতুন অপারেশন:

  • আপনি কীগুলির উপসর্গগুলি দ্রুত সন্ধান করতে পারেন, প্রদত্ত উপসর্গ সহ সমস্ত এন্ট্রি গণনা করতে পারেন ইত্যাদি

সংযুক্ত কাঠামোর সুবিধা:

  • যদি অনেকগুলি সাধারণ উপসর্গ থাকে তবে তাদের প্রয়োজনীয় স্থানটি ভাগ করা হবে।
  • অপরিবর্তনীয় চেষ্টা কাঠামো ভাগ করতে পারে। জায়গায় কোনও ট্রাই আপডেট করার পরিবর্তে, আপনি নতুন একটি তৈরি করতে পারেন যা কেবলমাত্র একটি শাখা বরাবর, অন্য কোথাও পুরানো ট্রাইতে নির্দেশ করে different এটি সম্মতি, এক টেবিলের এক সাথে একাধিক সংস্করণ ইত্যাদির জন্য কার্যকর হতে পারে etc.
  • একটি অপরিবর্তনীয় ট্রাই সংকোচনযোগ্য। এটি হ্যাশ-কনসিংয়ের মাধ্যমে প্রত্যয়গুলিতে কাঠামো ভাগ করতে পারে ।

হ্যাশ টেবিলের সুবিধা:

  • সবাই হ্যাশ টেবিল জানে, তাই না? বেশিরভাগ উদ্দেশ্যে চেষ্টা করার চেয়ে দ্রুততর আপনার সিস্টেমে ইতিমধ্যে একটি দুর্দান্ত ভাল-অনুকূলকরণ বাস্তবায়ন হবে।
  • আপনার কীগুলির কোনও বিশেষ কাঠামোর প্রয়োজন নেই।
  • সুস্পষ্ট লিঙ্কযুক্ত ত্রি কাঠামোর চেয়ে বেশি স্থান-দক্ষ ( নীচে মন্তব্য দেখুন )

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

1
অন্য কাঠামো থেকে অন্য কাঠামোর ডেটা অ্যাক্সেস সম্পর্কে কীভাবে? আমি ক্যাশে এবং অবস্থানের কথা ভাবছি
হোরিয়া তোমা

8
@ গ্যালাকটিকা, এটি আমার অভিজ্ঞতার সাথে সাংঘর্ষিক: উদাহরণস্বরূপ, স্থানের জন্য আমি যে সমস্ত কাঠামো পরিমাপ করেছি তার এই উত্তরে একটি ট্রাই সবচেয়ে খারাপ ফলাফল করেছিল। এটি বোধগম্য হয় যেহেতু একটি পয়েন্টার বাইটের চেয়ে অনেক বড়। হ্যাঁ, উপসর্গগুলি ভাগ করে নেওয়া সহায়তা করে তবে সমতা অবধি পৌঁছাতে অবশ্যই প্রচুর ওভারহেড অতিক্রম করতে হবে। একটি আরও স্থান-দক্ষ প্রতিনিধিত্ব অনেক সাহায্য করতে পারে, কিন্তু তারপরে আমরা আর সুস্পষ্ট সংযুক্ত কাঠামোর কথা বলছি না।
দারিয়াস বেকন

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

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

45

আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার উপর এটি নির্ভর করে। আপনার যা করার দরকার তা হ'ল সন্নিবেশ এবং লুকআপ, হ্যাশ টেবিলটি নিয়ে যান go আপনার যদি আরও জটিল সমস্যা যেমন প্রিফিক্স-সম্পর্কিত প্রশ্নের সমাধান করতে হয় তবে ট্রাই আরও ভাল সমাধান হতে পারে।


8
যদি হ্যাশ টেবিল এবং ট্রাইয়ের কোয়েরিতে একই জটিলতা থাকে, কে দৈর্ঘ্যের স্ট্রিংয়ের জন্য ও (কে) কেন আমরা হ্যাশের জন্য যাব? আপনি দয়া করে ব্যাখ্যা করতে পারেন?
সাজ্জাদ হিছাইন খান

29

সকলেই হ্যাশ টেবিল এবং এর ব্যবহারগুলি জানেন তবে এটি হ্যাশ টেবিলটি কত বড়, হ্যাশ ফাংশনের গণ্য জটিলতার উপর নির্ভর করে constant

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

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


10

একটি গাছ ব্যবহার করুন:

  1. আপনার যদি স্বয়ংক্রিয় সম্পূর্ণ বৈশিষ্ট্য প্রয়োজন
  2. 'এ' বা 'কুড়াল' দিয়ে শুরু করে সমস্ত শব্দ সন্ধান করুন।
  3. একটি প্রত্যয় গাছ গাছের একটি বিশেষ রূপ। প্রত্যয় গাছগুলির হ্যাশটি কভার করতে পারে না এমন সুবিধার সম্পূর্ণ তালিকা রয়েছে।

4

এমন কিছু আছে যা আমি কাউকে স্পষ্টভাবে উল্লেখ করতে দেখিনি যে আমি মনে করি এটি গুরুত্বপূর্ণ। হ্যাশ টেবিল এবং বিভিন্ন ধরণের চেষ্টা উভয়েরই সাধারণত O(k)ক্রিয়াকলাপ হবে, যেখানে kবিটগুলিতে স্ট্রিংয়ের দৈর্ঘ্য (বা সমানভাবে অক্ষরে)।

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


3

কোনও ট্রিতে সন্নিবেশ এবং অনুসন্ধান হ'ল ইনপুট স্ট্রিং ও (গুলি) এর দৈর্ঘ্যের সাথে লিনিয়ার।

একটি হ্যাশ উত্তর সন্নিবেশ সন্ধানের জন্য আপনাকে একটি ও (1) দেবে, তবে প্রথমে আপনাকে ইনপুট স্ট্রিংয়ের উপর ভিত্তি করে হ্যাশ গণনা করতে হবে যা আবার ও (গুলি) is

সিদ্ধান্ত, অ্যাসিপটোটিক সময়ের জটিলতা উভয় ক্ষেত্রেই লিনিয়ার।

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

টাই ভাঙতে নিজেকে এই প্রশ্নটি জিজ্ঞাসা করুন: আমাকে কি কেবল পুরো শব্দগুলির জন্য অনুসন্ধান করতে হবে? বা আমার কি একটি উপসর্গের সাথে মিলে সমস্ত শব্দ ফেরত দেওয়া দরকার? (যেমন একটি ভবিষ্যদ্বাণীপূর্ণ পাঠ্য ইনপুট সিস্টেম হিসাবে)। প্রথম ক্ষেত্রে, একটি হ্যাশ জন্য যান। এটি সহজ এবং ক্লিনার কোড। পরীক্ষা এবং রক্ষণাবেক্ষণ করা সহজ। আরও বিশদযুক্ত ব্যবহারের ক্ষেত্রে যেখানে উপসর্গ বা সূফিক্সগুলি গুরুত্বপূর্ণ, সেখানে ট্রাইতে যান।

এবং আপনি যদি এটি কেবল মজাদার জন্য করেন তবে ট্রাই প্রয়োগ করা রবিবার বিকেলে ভাল ব্যবহার করতে পারে।


"একটি হ্যাশ উত্তর সন্নিবেশ সন্ধানের জন্য আপনাকে একটি ও (1) দেবে, তবে প্রথমে আপনাকে ইনপুট স্ট্রিংয়ের উপর ভিত্তি করে হ্যাশ গণনা করতে হবে যা আবার ও (গুলি) হয়।" এটি ব্যাখ্যা করার জন্য ধন্যবাদ!
আবদাবী

2

Hashtable বাস্তবায়ন স্থান মতো মৌলিক তুলনায় কার্যকরী মধ্যে Trie বাস্তবায়ন। তবে স্ট্রিং সহ, বেশিরভাগ ব্যবহারিক অ্যাপ্লিকেশনগুলিতে অর্ডার করা প্রয়োজনীয় necessary তবে হ্যাশ টেবিল পুরোপুরি লেক্সোগ্রাফিকাল ক্রমকে ব্যাঘাত ঘটাচ্ছে। এখন, যদি আপনার অ্যাপ্লিকেশন লেক্সোগ্রাফিকাল অর্ডারের ভিত্তিতে ক্রিয়াকলাপ করছে (যেমন আংশিক অনুসন্ধান, প্রদত্ত উপসর্গ সহ সমস্ত স্ট্রিং, বাছাই করা ক্রমে সমস্ত শব্দ), আপনার চেষ্টা করা উচিত। কেবলমাত্র অনুসন্ধানের জন্য, হ্যাশ টেবিলটি ব্যবহার করা উচিত (তর্ক হিসাবে এটি এটি ন্যূনতম অনুসন্ধানের সময় দেয়)।

পিএস: এগুলি ব্যতীত, টার্নারি অনুসন্ধান ট্রি (টিএসটি) একটি দুর্দান্ত পছন্দ হবে। এর অনুসন্ধানের সময়টি হ্যাশটেবলের চেয়ে বেশি তবে অন্য সমস্ত ক্রিয়াকলাপে সময় সাশ্রয়ী। এছাড়াও, চেষ্টা করার চেয়ে এর আরও বেশি জায়গা দক্ষ।


-2

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


6
বেশিরভাগ হ্যাশ টেবিলগুলি জ্ঞাত মৃত্যুদন্ডের সময়টির গ্যারান্টি দেয় না - সবচেয়ে খারাপ পরিস্থিতি হ'ল (এন), যদি প্রতিটি উপাদান সংঘর্ষিত হয় এবং শৃঙ্খলিত হয়
অ্যাডাম রোজেনফিল্ড

2
যে কোনও ডেটা সেট করার জন্য, আপনি একটি নিখুঁত হ্যাশ ফাংশন গণনা করতে পারেন যা সেই ডেটার জন্য ও (1) লকআপের গ্যারান্টি দেয়। অবশ্যই, নিখুঁত হ্যাশ গণনা বিনামূল্যে হয় না।
জর্জ ভি। রিলি 6

5
এছাড়াও, চেইন সংঘর্ষগুলি পরিচালনা করার একমাত্র উপায় নয়; এক ধরণের জন্য এই has কোকিল হ্যাশিং ( en.wikedia.org/wiki/Cuckoo_hashing ) হ্যান্ডেল করার জন্য সমস্ত ধরণের আকর্ষণীয়, চতুর উপায় রয়েছে এবং সর্বোত্তম পছন্দ ক্লায়েন্ট কোডের প্রয়োজনের উপর নির্ভর করে।
হ্যাঙ্ক গে

কোকিল হ্যাশিং এবং ব্লুম ফিল্টারের সাথে এর সম্পর্ক সম্পর্কে জানতাম না, একটি আকর্ষণীয় পাঠের জন্য তৈরি করবে, ধন্যবাদ!
হোরিয়া তোমা

রবিন-হুড হ্যাশিং সম্পর্কে ভুলে যাবেন না, যা ক্যাশে এবং বৈকল্পিকতার জন্য সেরা। sebastiansylvan.com/2013/05/08/… codecapsule.com/2013/11/11/robin-hood-hashing
নিকোলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.