আমি কীভাবে একটি কার্যকরী অভিধানের ডেটা কাঠামো চয়ন করব?


10

আমি নিম্নলিখিত তথ্য কাঠামো সম্পর্কে কিছুটা পড়েছি:

  • ব্যাগওয়েলের আদর্শ হ্যাশ চেষ্টা করে
  • লারসনের ডায়নামিক হ্যাশ টেবিল
  • লাল-কালো গাছ
  • প্যাট্রিসিয়া গাছ

... এবং আমি নিশ্চিত যে সেখানে আরও অনেক লোক রয়েছে। আমি প্রত্যেকে যেটির জন্য আরও উপযুক্ত, বা কেন আমি একে অপরের থেকে বেছে নেব সেভাবে খুব কম দেখেছি। সুতরাং, এই লাইন বরাবর কয়েকটি প্রশ্ন এখানে:

  1. কোন কার্যকরী অভিধানের ডেটা স্ট্রাকচারগুলি সম্পর্কে জানা গুরুত্বপূর্ণ?
  2. এই পদ্ধতির পক্ষে কি কি?
  3. কখন আরও বেশি প্রয়োজনীয় ডেটা কাঠামো ব্যবহার করা বোধগম্য হয়?

সংখ্যা 2 এবং 3 যদিও আরও গুরুত্বপূর্ণ। :-)



এই প্রশ্ন (3 নম্বরযুক্ত আইটেম ব্যতীত) একটি [বড় তালিকা] এর অনুভূতি আছে।
কাভেহ

2
উপরের লিঙ্কযুক্ত প্রশ্নটি আপনার উদ্বেগকে সম্বোধন করে কিনা তা জানার পক্ষে সহায়ক হবে এবং যদি না কেন?
সুরেশ ভেঙ্কট

@ সুরেশ - এর উত্তর # 1, তবে 2 এবং 3 আরও গুরুত্বপূর্ণ ছিল। আমি বেশিরভাগ ক্ষেত্রে একটি বৃহত-চিত্র ওভারভিউ খুঁজছি যাতে কোনটি আরও গভীরতার সাথে অধ্যয়নের জন্য উপযুক্ত তা আমি নির্ধারণ করতে পারি।
জেসন

2
ঠিক আছে. সুতরাং এটি তখন প্রশ্ন সম্পাদনা মূল্যবান হতে পারে।
সুরেশ ভেঙ্কট

উত্তর:


16

আমি হারিয়ে যাওয়া ছাড়া সত্যই উত্তর দিতে পারি না (অনেকগুলি মাত্রা রয়েছে যার সাথে আপনি এই কাঠামোগুলি তুলনা করতে পারেন), তবে # 3 এর উত্তরটি খুব সহজ।

একটি অত্যাবশ্যক ডেটা কাঠামো ব্যবহার করুন যদি: (ক) একেবারে কোনও এলিয়াসিং না থাকে, বা (খ) দক্ষ সম্প্রচারের জন্য আপনাকে সত্যই এলিয়াসিং ব্যবহার করতে হবে।

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

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

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

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


2
এই প্রসঙ্গে আলিয়াসিং কি?
সুরেশ ভেঙ্কট

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

"তবে অভিভাবক পয়েন্টারগুলির সাথে একটি অপরিহার্য লাল-কালো গাছে মুছে ফেলা বাস্তবায়ন আপনাকে আত্মহত্যার কথা ভাবতে ছাড়বে" সেডজউইকের বাম দিকে ঝুঁকানো লাল-কালো গাছগুলি দেখুন। মুছে ফেলার সাধারণ কেস স্ট্যান্ডার্ড ট্রিক দ্বারা মুছে ফেলা-মিনিটে হ্রাস করা হয় এবং এলএলআরবি গাছগুলির জন্য মুছুন-মিনিট নিজেই খুব সহজ। কোন প্যারেন্ট পয়েন্টার প্রয়োজন।
পার স্বীকৃত

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

1

কোন কার্যকরী অভিধানের ডেটা স্ট্রাকচারগুলি সম্পর্কে জানা গুরুত্বপূর্ণ?

উচ্চতা-ভারসাম্য বাইনারি গাছ এবং সেগুলির চেষ্টা একটি ভাল চতুর্দিকে সমঝোতা। এছাড়াও:

  • প্যাট্রিসিয়া গাছ।
  • হ্যাশ চেষ্টা করে।

এই পদ্ধতির পক্ষে কি কি?

উচ্চতা-ভারসাম্য বাইনারি গাছ এবং সেগুলির চেষ্টাগুলি পারমাণবিক কীগুলির জন্য একটি চতুর্দিকে সমঝোতা। ক্রম কীগুলির জন্য চেষ্টাগুলি একই, যেমন স্ট্রিং কীগুলি।

প্যাট্রিসিয়া গাছগুলি কয়েক গুণ দ্রুত হতে পারে তবে কেবল পূর্ণসংখ্য কীগুলির অনুমতি দেয় mit

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

লাল-কালো গাছগুলি কম গুরুত্বপূর্ণ কারণ উচ্চতা-ভারসাম্য গাছগুলির তুলনায় তাদের কোনও উল্লেখযোগ্য সুবিধা নেই তবে তা উল্লেখযোগ্য অসুবিধায় রয়েছে যে তারা দক্ষ ইউনিয়ন, ছেদ এবং পার্থক্যের অনুমতি দেয় না।

একইভাবে, আঙ্গুলের গাছগুলি অনুশীলনে খুব বেশি ভাল নয়।

কখন আরও বেশি প্রয়োজনীয় ডেটা কাঠামো ব্যবহার করা বোধগম্য হয়?

যখন আপনার অভিধানটি একবারে পপুলেট হয় এবং তারপরে কেবলমাত্র দেখার জন্য অর্থাত্ হিমায়িত হয়।

আপনার যখন পারফরম্যান্সের প্রয়োজন হয় (.NET এর মতো একটি শালীন হ্যাশ টেবিলটি Dictionaryসাধারণত সাধারণভাবে কার্যকরী অভিধানের চেয়ে 10-40 × দ্রুত হয়) ×

যখন আপনার কোনও দুর্বল অভিধান প্রয়োজন কারণ কোনও খাঁটি কার্যকরী দুর্বল অভিধান নেই।

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