কম পরিচিত তবে দরকারী ডেটা স্ট্রাকচারগুলি কী কী?


795

আশেপাশে এমন কিছু ডেটা স্ট্রাকচার রয়েছে যা সত্যিই দরকারী তবে বেশিরভাগ প্রোগ্রামারদের কাছে অজানা। তারা কোনটি?

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

পিএস: আমি নৃত্য লিঙ্কগুলির মতো কৌশলগুলিতেও আগ্রহী যা একটি সাধারণ তথ্য কাঠামোর বৈশিষ্ট্যের চতুর ব্যবহার করে।

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


উত্তর:


271

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


12
বানান-চেকারদের দ্বারা খুব সাধারণভাবে ব্যবহৃত হয়
স্টিভেন এ। লো

বারস্টের চেষ্টাগুলিও একটি আকর্ষণীয় বৈকল্পিক, যেখানে আপনি কেবল নোড হিসাবে স্ট্রিংগুলির একটি উপসর্গ ব্যবহার করেন এবং অন্যথায় নোডগুলিতে স্ট্রিংগুলির তালিকা সঞ্চয় করেন।
টর্স্টেন মেরেক

পার্ল 10.১০ এ রেজেক্স ইঞ্জিন স্বয়ংক্রিয়ভাবে চেষ্টা তৈরি করে।
ব্র্যাড গিলবার্ট

আমার অভিজ্ঞতার মধ্যে চেষ্টাগুলি বেদনাদায়ক ব্যয়বহুল, প্রদত্ত যে একটি পয়েন্টার সাধারণত চরের চেয়ে দীর্ঘ হয়, যা লজ্জাজনক। এগুলি কেবল নির্দিষ্ট ডেটা-সেটের জন্য উপযুক্ত।
জো

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

231

ব্লুম ফিল্টার : এম বিটের বিট অ্যারে , শুরুতে সব সেট 0।

কোনও আইটেম যুক্ত করতে আপনি এটিকে কে হ্যাশ ফাংশনগুলির মাধ্যমে চালনা করুন যা আপনাকে তারপরে 1 তে সেট করা অ্যারেতে আপনাকে কে সূচী দেবে ।

কোনও আইটেমে সেট রয়েছে কিনা তা পরীক্ষা করতে, কে সূচকগুলি গণনা করুন এবং সেগুলি 1 তে সেট আছে কিনা তা পরীক্ষা করুন।

অবশ্যই এটি মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা দেয় (উইকিপিডিয়া অনুসারে এটি প্রায় 0.61 m (এম / এন) যেখানে এন inোকানো আইটেমের সংখ্যা)। মিথ্যা-নেতিবাচক সম্ভাবনা নেই।

কোনও আইটেম সরানো অসম্ভব, তবে আপনি অঙ্কন ও বর্ধন / হ্রাস দ্বারা উপস্থাপিত ব্লুম ফিল্টার গণনা করতে পারবেন ।


20
আপনি অভিধানগুলির সাথে তাদের ব্যবহারটি উল্লেখ করতে ভুলে
ক্রিস এস

8
গুগল বিগ টেবিল প্রয়োগের ক্ষেত্রে ব্লুম ফিল্টারগুলির ব্যবহারের কথা উল্লেখ করেছে।
ব্রায়ান জিয়ানফোরকারো

16
@ ফ্রেশকোড এটিতে আপনাকে সেটের কোনও উপাদানটির অভাবের জন্য সস্তাভাবে পরীক্ষা করতে দেয় যেহেতু আপনি মিথ্যা ধনাত্মক পেতে পারেন তবে কখনও মিথ্যা নেতিবাচক হতে পারবেন না
টম সাভেজ

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

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

140

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


আমি আমার নিজের ব্যবহারের জন্য এরকম কিছু চিন্তাভাবনা করেছি। এটি ইতিমধ্যে অন্য কোথাও প্রয়োগ করা হয়েছে জেনে ভাল লাগছে।
কিব্বি


2
যাকে বলা হয় তা না জেনে আমি সম্প্রতি জাভা-র জন্য খুব একই রকম কিছু লিখেছি - পারফরম্যান্সটি দুর্দান্ত হয়েছে: code.google.com/p/mikeralib/source/browse/trunk/Mikera/src/…
মাইক্রা

: দড়ি চমত্কার বিরল stackoverflow.com/questions/1863440/...
উইল

6
মাইকের লিঙ্কটি বাসি, এখানে বর্তমান
aptwebapps

128

স্কিপ তালিকাগুলি বেশ ঝরঝরে।

উইকিপিডিয়া
স্কিপ তালিকা হ'ল একটি সম্ভাব্য ডেটা কাঠামো, একাধিক সমান্তরাল, বাছাই করা লিঙ্ক তালিকার উপর ভিত্তি করে বাইনারি অনুসন্ধান গাছের সাথে তুলনীয় দক্ষতার সাথে (বেশিরভাগ ক্রিয়াকলাপের জন্য অর্ডার লগ এন গড় সময়)।

এগুলিকে ভারসাম্যযুক্ত গাছের বিকল্প হিসাবে ব্যবহার করা যেতে পারে (ভারসাম্যের কঠোর প্রয়োগের চেয়ে প্রব্লেস্টিক ব্যালেন্সিং ব্যবহার করে)। এগুলি প্রয়োগ করা সহজ এবং বলার চেয়ে দ্রুত, একটি লাল-কালো গাছ। আমি মনে করি তাদের প্রতিটি ভাল প্রোগ্রামার সরঞ্জামচেষ্টে থাকা উচিত।

আপনি যদি এখানে স্কিপ-তালিকাগুলির গভীরতার পরিচয় পেতে চান তবে তাদের উপরে অ্যালগরিদম বক্তৃতাটির জন্য এমআইটি'র পরিচিতির একটি ভিডিওর লিঙ্ক

এছাড়াও, এখানে জাভা অ্যাপলেটটি স্কিপ লিস্টগুলিকে চাক্ষুষভাবে প্রদর্শন করছে।


+1 কিউটি এটির বাছাই করা মানচিত্র এবং সেটগুলির জন্য আরবি-গাছের চেয়ে স্কিপ তালিকা ব্যবহার করে। হ্যাঁ, তারা নিফটি (যাইহোক, অপরিহার্য ভাষায়)।
মাইকেল একস্ট্র্যান্ড

2
রেডিস "সাজানো সেটগুলি" প্রয়োগ করতে স্কিপ তালিকা ব্যবহার করে।
anteryz

যখন আমাকে একটি ভাল ডেটা কাঠামোর প্রয়োজন হয় তখন স্কিপ তালিকাগুলি সম্ভবত আমার প্রিয় ডেটা কাঠামো এবং ডেটা ক্রম হিসাবে আমার কোনও গ্যারান্টি নেই এবং আমি অন্যান্য "সুষম" ডেটা কাঠামোর চেয়েও সহজ বাস্তবায়ন চাই। এত ভাল জিনিস।
ইরিনো

আকর্ষণীয় পার্শ্ব-নোট: আপনি যদি আপনার স্কিপ তালিকাগুলিতে পর্যাপ্ত স্তর যোগ করেন তবে আপনি মূলত একটি বি-ট্রি দিয়ে শেষ হন।
রিয়াদ কল্লা

92

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

বিট অ্যারে পৃথক বিটগুলি সংক্ষিপ্ত আকারে সঞ্চয় করে এবং দ্রুত বিট ক্রিয়াকলাপের অনুমতি দেয়।


6
মহাকর্ষের মতো দূরপাল্লার বাহিনী জড়িত এন-বডি সিমুলেশনের জন্যও স্থানিক সূচকগুলি কার্যকর।
জাস্টিন পিল

87

জিপার্স - ডেটা স্ট্রাকচারের ডেরাইভেটিভস যা 'কার্সর' - এর বর্তমান অবস্থানের প্রাকৃতিক ধারণা থাকতে কাঠামোটিকে পরিবর্তন করে। এগুলি সত্যই কার্যকর কারণ তারা গ্যারান্টি দেয় যে সূচকগুলি আবদ্ধ - ব্যবহারের বাইরে থাকতে পারে না, উদাহরণস্বরূপ xmonad উইন্ডো ম্যানেজারটিতে কোন উইন্ডোটি ফোকাস করেছে তা ট্র্যাক করতে।

আশ্চর্যজনকভাবে, আপনি ক্যালকুলাস থেকে মূল ডেটা কাঠামোর ধরণের কৌশল প্রয়োগ করে এগুলি অর্জন করতে পারেন !


2
এটি কেবল কার্যকরী প্রোগ্রামিংয়ে কার্যকর (প্রয়োজনীয় ভাষাতে আপনি কেবল পয়েন্টার বা একটি সূচক রাখেন)। এছাড়াও টিবিএইচ আমি এখনও জিপার্স কীভাবে কাজ করে তা পাই না।
স্টিফান মনোভ

4
@ স্টেফান পয়েন্টটি হ'ল আপনার এখন আলাদা ইন্ডেক্স বা পয়েন্টার রাখার দরকার নেই।
ডন স্টুয়ার্ট

69

এখানে কয়েকটি দেওয়া হল:

  • প্রত্যয় চেষ্টা করে। প্রায় সব ধরণের স্ট্রিং অনুসন্ধানের জন্য দরকারী (http://en.wikedia.org/wiki/Suffix_trie#Functionality )। প্রত্যয় অ্যারেগুলিও দেখুন; এগুলি প্রত্যয় গাছের মতো খুব দ্রুত নয়, তবে পুরোপুরি ছোট।

  • স্প্লে গাছ (উপরে বর্ণিত হিসাবে) তারা শীতল হওয়ার কারণটি তিনগুণ:

    • এগুলি ছোট: আপনার কেবল বাইনারি গাছের মতো বাম এবং ডান পয়েন্টার প্রয়োজন (কোনও নোড-রঙ বা আকারের তথ্য সংরক্ষণ করার প্রয়োজন নেই)
    • এগুলি (তুলনামূলকভাবে) কার্যকর করা খুব সহজ
    • তারা "পরিমাপের মানদণ্ড" এর সম্পূর্ণ হোস্টের জন্য অনুকূল মোড়কযুক্ত জটিলতার প্রস্তাব দেয় (লগ এন দেখার সময়টি সবাই জানেন। দেখাhttp://en.wikipedia.org/wiki/Splay_tree#Performance_theorems
  • সজ্জাযুক্ত অনুসন্ধানের গাছগুলি: আপনি একটি গাছে একগুচ্ছ (কী, প্রিও) জোড়া সংরক্ষণ করেন, যেমন এটি চাবিগুলির প্রতি শ্রদ্ধাশীল একটি ট্রি এবং অগ্রাধিকারের সাথে সম্মানের সাথে heগল-অর্ডার দেওয়া হয়। যে কোনও গাছের একটি অনন্য আকৃতি রয়েছে তা দেখাতে পারে (এবং এটি সর্বদা বামে পুরোপুরি প্যাক থাকে না)। এলোমেলো অগ্রাধিকার সহ, এটি আপনাকে প্রত্যাশিত ও (লগ এন) অনুসন্ধানের সময়, আইআইআরসি দেয়।

  • ও (১) প্রতিবেশী প্রশ্নের সাথে অনাকাঙ্ক্ষিত প্ল্যানার গ্রাফগুলির জন্য একটি বিশেষ বৈশিষ্ট্য হ'ল সংযুক্তি তালিকা। এটি কোনও বিদ্যমান ডাটা স্ট্রাকচারকে সংগঠিত করার কোনও বিশেষ উপায় হিসাবে কোনও ডেটা স্ট্রাকচার নয়। আপনি এটি কীভাবে করেন তা এখানে: প্রতিটি প্ল্যানার গ্রাফের সর্বাধিক degree. ডিগ্রি সহ একটি নোড থাকে such এই জাতীয় নোডটি চয়ন করুন, প্রতিবেশীদের তার প্রতিবেশী তালিকায় রাখুন, গ্রাফ থেকে অপসারণ করুন এবং গ্রাফটি খালি না হওয়া পর্যন্ত পুনরাবৃত্তি করুন। যখন একটি জুড়ি দেওয়া হয় (ইউ, ভি), তখন আপনার ভি এর প্রতিবেশী তালিকায় এবং সন্ধানের প্রতিবেশী তালিকার জন্য সন্ধান করুন। উভয়ের আকার সর্বাধিক 6, সুতরাং এটি ও (1)।

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


হ্যাপ অর্ডার করা অনুসন্ধান গাছকে ট্র্যাপ বলা হয়। একটি কৌশল যা আপনি এগুলি করতে পারবেন তা হ'ল নোডের গাছের নীচে যেখানে মুছে ফেলা সহজ push
পেপারহর্স

1
"হিপ অর্ডার করা অনুসন্ধান গাছকে ট্র্যাপ বলা হয়।" - আমি যে সংজ্ঞাটি শুনেছি, আইআইআরসি, একটি ট্র্যাপটি এলোমেলো অগ্রাধিকার সহ হ'ল একটি অর্পিত অনুসন্ধান গাছ । আপনি অ্যাপ্লিকেশনটির উপর নির্ভর করে অন্যান্য অগ্রাধিকারগুলি বেছে নিতে পারেন ...
জোনাস কলকার

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

@ j_random_hacker: প্রত্যয় অ্যারেগুলি asympototically ধীর হয় না। রৈখিক প্রত্যয় অ্যারে নির্মাণের জন্য কোডটির
এডওয়ার্ড কেএমইটিটি

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

65

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

এখানে কয়েকটি লিঙ্ক
http://www.cl.cam.ac.uk/research/srg/netos/lock-free/
http://www.research.ibm.com/people/m/michael/podc-1996.pdf [পিডিএফ-এর লিঙ্কসমূহ]
http://www.boyet.com/Articles/LockfreeStack.html

মাইক অ্যাক্টনের (প্রায়শই উত্তেজক) ব্লগে লক-ফ্রি নকশা এবং পদ্ধতির বিষয়ে কিছু দুর্দান্ত নিবন্ধ রয়েছে


লক-ফ্রি বিকল্পগুলি আজকের বহু-কোর, খুব সমান্তরাল,
স্কেলিবিলিটি

ভাল, একটি বিঘ্নিতকারী বেশিরভাগ ক্ষেত্রে আসলে আরও ভাল কাজ করে।
13:43

55

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


8
এটিকে "ইউনিয়ন-অনুসন্ধান ডেটা কাঠামো " ও বলা হয় আমি যখন প্রথম প্রথম অ্যালগরিদম শ্রেণিতে এই চতুর ডেটা কাঠামো সম্পর্কে জানতাম তখন আমি বিস্মিত হই ...
ব্লুরাজা - ড্যানি ফ্লুঘুফুট

ইউনিয়ন-অনুসন্ধান-মোছার এক্সটেনশানগুলি পাশাপাশি একটি ধ্রুবক-সময় মোছার অনুমতি দেয়।
পিক

4
আমি আমার অন্ধকার জেনারেটরের জন্য একটি বিতর্কিত সেট ব্যবহার করেছি, যাতে নিশ্চিত হয়ে যায় যে সমস্ত কক্ষগুলি প্যাসেজের মাধ্যমে
পৌঁছতে পারে

52

ফিবোনাচি স্তুপ করে

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


আপনি যেমন বলেছিলেন উচ্চ ধ্রুবক ফ্যাক্টর, এবং যে বন্ধুটি ছিল তার মতে ভাল প্রয়োগ করা শক্ত। দর্শনীয়ভাবে এটি দুর্দান্ত নয়, তবে এখনও, সম্ভবত জেনে রাখা মূল্যবান।
p4bl0

এই ছেলেরা এখানে তাদের অন্যান্য ধরণের ধরণের তুলনায় প্রতিযোগিতামূলকভাবে চালিত করেছে: cphstl.dk/Pstreamation/SEA2010/SEA-10.pdf একটি সম্পর্কিত ডেটার কাঠামো রয়েছে যা পেয়ারিং হ্যাপস যা প্রয়োগ করা সহজ এবং এটি বেশ ভাল ব্যবহারিক পারফরম্যান্সের অফার দেয়। তবে তাত্ত্বিক বিশ্লেষণ আংশিকভাবে উন্মুক্ত।
ম্যানুয়েল

ফিবোনাচি হিপসের সাথে আমার অভিজ্ঞতা থেকে আমি জানতে পেরেছি যে মেমরি বরাদ্দের ব্যয়বহুল ক্রিয়াকলাপটি অ্যারে দ্বারা ব্যাকেন্ডেড সাধারণ বাইনারি হ্যাপের চেয়ে কম দক্ষ করে তোলে।
জটকি

44

থ্রিডি রেন্ডারিংয়ের অভিজ্ঞতা সম্পন্ন যে কোনও ব্যক্তিকে বিএসপি গাছের সাথে পরিচিত হওয়া উচিত । সাধারণত, ক্যামেরা স্থানাঙ্কগুলি এবং ভারবহন জেনে রেন্ডারিংয়ের জন্য পরিচালিত হতে পারে এমন একটি 3 ডি দৃশ্যের কাঠামোগত পদ্ধতি এটি।

বাইনারি স্পেস পার্টিশন (বিএসপি) হাইডার প্লেন দ্বারা উত্তল সেটগুলিতে পুনরুক্তিভাবে কোনও স্থানকে বিভাজনের জন্য একটি পদ্ধতি। এই মহকুমা বিএসপি ট্রি হিসাবে পরিচিত একটি ট্রি ডেটা কাঠামোর মাধ্যমে দৃশ্যের প্রতিনিধিত্ব করে to

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

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


... এবং সম্পর্কিত অক্ট্রি এবং কেডি-ট্রি
লোয়েকি


38

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

অনুযায়ী মূল নিবন্ধ :

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

একটি ফিঙ্গার ট্রি একটি মনোয়েডের সাথে প্যারামিটারাইজ করা যেতে পারে এবং বিভিন্ন মনোয়েড ব্যবহারের ফলে গাছের জন্য বিভিন্ন আচরণ হতে পারে। এটি ফিঙ্গার গাছগুলি অন্যান্য ডেটা স্ট্রাকচারের অনুকরণ করতে দেয়।



কটাক্ষপাত আছে এই ডুপ্লিকেট উত্তর , এটি পড়া ভাল মূল্য আছে!
ফ্রাঙ্কোইস জি

34

বিজ্ঞপ্তি বা রিং বাফার - অন্যান্য জিনিসগুলির মধ্যে স্ট্রিমিংয়ের জন্য ব্যবহৃত হয়।


4
এছাড়াও, বিদ্বেষজনকভাবে, কোনওভাবে পেটেন্ট করা পরিচালিত হয়েছে (কমপক্ষে ভিডিওর জন্য ব্যবহৃত হয়)। ip.com/patent/USRE36801
ডেভিড আইসন

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

33

আমি অবাক হয়েছি যে কেউ মर्कলে গাছের (যেমন হ্যাশ ট্রি ) উল্লেখ করেনি ।

অনেক ক্ষেত্রে (পি 2 পি প্রোগ্রাম, ডিজিটাল স্বাক্ষর) ব্যবহৃত হয় যেখানে আপনি যখন আপনার কাছে কেবলমাত্র ফাইলের অংশ থাকে তখন আপনি একটি সম্পূর্ণ ফাইলের হ্যাশ যাচাই করতে চান।


32

<zvrba> ভ্যান এমডে-বোস গাছ

আমি মনে করি তারা কেন শান্ত। সাধারণভাবে, "কেন" প্রশ্নটি সবচেয়ে গুরুত্বপূর্ণ জিজ্ঞাসা করা হয়;)

আমার উত্তরটি হ'ল তারা আপনাকে কতগুলি কী ব্যবহার করছে তার থেকে আলাদা {1..n} কীগুলি সহ ও (লগ লগ এন) অভিধানগুলি দেয়। বারবার অর্ধেক দেওয়া যেমন আপনাকে ও (লগ এন) দেয়, বার বার স্ক্র্যাটিং আপনাকে ও (লগ এন) দেয়, যা ভিইবি ট্রিতে ঘটে।


তারা তাত্ত্বিক দৃষ্টিকোণ থেকে দুর্দান্ত। বাস্তবে, তবে এগুলি থেকে প্রতিযোগিতামূলক পারফরম্যান্স পাওয়া বেশ শক্ত। আমার জানা কাগজটি তাদের 32 বিট কী ( citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.2.7403 ) পর্যন্ত ভাল কাজ করতে পারে তবে এ পদ্ধতিটি সম্ভবত ৩৪-৩৫ বিটের চেয়ে বেশি বা স্কেল হবে না সুতরাং এবং এটির কোনও প্রয়োগ নেই।
ম্যানুয়েল

তারা শীতল হওয়ার আরেকটি কারণ হ'ল তারা বেশ কয়েকটি ক্যাশে-বিস্মৃত অ্যালগরিদমের জন্য একটি মূল বিল্ডিং ব্লক।
এডওয়ার্ড কেএমইটিটি


29

হ্যাশ টেবিলের একটি আকর্ষণীয় রূপটি বলা হয় কোকিল হ্যাশিং । হ্যাশের সংঘর্ষ মোকাবেলায় এটি কেবল 1 এর পরিবর্তে একাধিক হ্যাশ ফাংশন ব্যবহার করে। সংঘর্ষগুলি প্রাথমিক হ্যাশ দ্বারা নির্দিষ্ট করা অবস্থান থেকে পুরানো অবজেক্টটি সরিয়ে এবং বিকল্প হ্যাশ ফাংশন দ্বারা নির্দিষ্ট স্থানে সরিয়ে সমাধান করা হয়। কোকিল হ্যাশিং মেমরি স্পেসের আরও দক্ষ ব্যবহারের অনুমতি দেয় কারণ আপনি কেবলমাত্র 3 টি হ্যাশ ফাংশন দিয়ে আপনার লোড ফ্যাক্টরটি 91% পর্যন্ত বাড়িয়ে নিতে পারেন এবং এখনও অ্যাক্সেসের ভাল সময় থাকতে পারেন।


5
চেক হপস্কোচ হ্যাশিং দ্রুত হওয়ার দাবি করেছে।
chmike

27

একজন সর্বনিম্ন সর্বাধিক হিপ হ'ল একটি পৃথকীকরণ যা ডাবল-এন্ডের অগ্রাধিকার সারি প্রয়োগ করে। এটি হিপ প্রপারটিতে সাধারণ পরিবর্তন করে এটি অর্জন করে: একটি গাছকে ন্যূনতম সর্বাধিক আদেশ দেওয়া হয় বলে বলা হয় যদি সমান (বিজোড়) স্তরের প্রতিটি উপাদান সমস্ত শিশু এবং গ্র্যান্ড শিশুদের চেয়ে কম (বৃহত্তর) হয়। স্তরগুলি 1 থেকে শুরু করে গণনা করা হয়।

http://internet512.chonbuk.ac.kr/datastructure/heap/img/heap8.jpg


কার্যকর করার কৌশল। এমনকি সেরা প্রোগ্রামাররাও এটি ভুল পেতে পারে।
ফিনউইউ

26

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


এই লিঙ্কটি থেকে আকর্ষণীয় প্রতিলিপি: "
মূলটি হ'ল

23

বাম লিনিং লাল-কালো গাছ । ২০০৮ সালে প্রকাশিত রবার্ট সেডজউইকের লাল-কালো গাছগুলির একটি উল্লেখযোগ্যভাবে সরলীকৃত বাস্তবায়ন (কোডটি প্রয়োগের অর্ধেক লাইন)। আপনার যদি কখনও লাল-কালো গাছের প্রয়োগের জন্য আপনার মাথা মুড়ে ফেলার সমস্যা হয় তবে এই রূপটি সম্পর্কে পড়ুন।

অ্যান্ডারসন ট্রিগুলির সাথে খুব মিল (একইরকম না হলে)।



19

জের্ত স্টলটিং ব্রোডাল এবং ক্রিস ওকাসাকির বুট স্ট্র্যাপড স্কিউ-দ্বিপদী স্তূপ :

তাদের দীর্ঘ নাম সত্ত্বেও, তারা কোনও ফাংশন সেটিংয়েও asympototically অনুকূল হিপ অপারেশন সরবরাহ করে।

  • O(1)আকার, ইউনিয়ন , সন্নিবেশ, সর্বনিম্ন
  • O(log n) deleteMin

নোট করুন যে ইউনিয়ন সময়ের O(1)চেয়ে বরং O(log n)আরও বেশি সুপরিচিত হিপগুলির চেয়ে পৃথক হয় যা বামপন্থী হিপগুলির মতো সাধারণত ডেটা স্ট্রাকচার পাঠ্যপুস্তকে covered াকা থাকে । এবং ফিবোনাকির স্তূপগুলির বিপরীতে , অ্যাসিমেটিকগুলি অবিচ্ছিন্ন হওয়ার পরিবর্তে সবচেয়ে খারাপ, এমনকি যদি অবিচ্ছিন্নভাবে ব্যবহার করা হয় তবে!

আছে একাধিক বাস্তবায়নের মধ্যে Haskell।

ব্রোডাল একই অ্যাসিম্পটোটিকস সহ একটি জরুরী গাদা নিয়ে আসার পরে ব্রোডাল এবং ওকাসাকির দ্বারা তারা যৌথভাবে উদ্ভূত হয়েছিল ।


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

এর মধ্যে বেশিরভাগই না থাকলেও এগুলি এনজিস্ট ডিকশনারি অ্যালগরিদম এবং ডেটা স্ট্রাকচারগুলিতে নথিভুক্ত হয়


18

বল গাছ তারা এলোমেলো করে তোলে কারণ।

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


এগুলি সাধারণত "ভ্যানটেজ পয়েন্ট" গাছ বা ভিপি-ট্রি হিসাবেও পরিচিত। en.wikipedia.org/wiki/Vp-tree
এডওয়ার্ড KMETT

17

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


1
আমি অবশ্যই এটি একটি ডেটা স্ট্রাকচার হিসাবে বিবেচনা করব।
ক্রিস্টোফার বারবার

আগ্রহী যে কারও জন্য, সুইং পাঠ্যের উপাদানগুলির সমর্থনকারী ডকুমেন্ট (যেমন প্লেইন ডকুমেন্ট) মডেলগুলি ঠিক একইভাবে প্রয়োগ করা হয়; ১.২ এর আগে আমি বিশ্বাস করি যে ডকুমেন্টের মডেলগুলি সোজা অ্যারে ছিল, যা বড় ডকুমেন্টগুলির জন্য ভয়ঙ্কর সন্নিবেশ সম্পাদনের দিকে পরিচালিত করে; তারা গ্যাপ বাফারগুলিতে চলে যাওয়ার সাথে সাথে সমস্ত কিছু আবার বিশ্বের সাথে ঠিকঠাক হয়ে গেল।
রিয়াদ কল্লা

16

ফেনউইক ট্রি। দুটি প্রদত্ত সাবআইন্ডেক্স i এবং j এর মধ্যে ভেক্টরের সমস্ত উপাদানের যোগফল গণনা করার জন্য এটি একটি ডেটা স্ট্রাকচার। তুচ্ছ সমাধান, যোগফলের পূর্বে অঙ্কটি একটি আইটেম আপডেট করতে দেয় না (যেহেতু আপনাকে ও (এন) এর কাজ করতে হবে) আপডেট করতে দেয় না।

ফেনউইক ট্রি আপনাকে ও (লগ এন) এ আপডেট এবং ক্যোয়ার করার মঞ্জুরি দেয় এবং কীভাবে এটি কাজ করে তা সত্যিই দুর্দান্ত এবং সহজ। এটি ফেনউইকের মূল কাগজে খুব ভালভাবে ব্যাখ্যা করা হয়েছে, এখানে নিখরচায় পাওয়া যায়:

http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol24/issue3/spe884.pdf

এর পিতা, আরকিউএম ট্রিটিও দুর্দান্ত আমি প্রথমে আরকিউএম এবং তারপরে ফেনউইক ট্রি শেখাতে চাই।


আমি ভীত এটি একটি সদৃশ । সম্ভবত আপনি আগের উত্তরটি যুক্ত করতে চান?
ফ্রাঙ্কোইস জি

এছাড়াও সেগমেন্ট ট্রিগুলি সম্পর্কিত যা সমস্ত ধরণের পরিসীমা অনুসন্ধানের জন্য দরকারী।
ধ্রুববার্ড


13

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


12

এটি বেশিরভাগ ডোমেন-নির্দিষ্ট, তবে অর্ধ-প্রান্তের ডেটা কাঠামো বেশ ঝরঝরে। এটি বহুভুজ মেসগুলি (মুখ এবং প্রান্ত) দিয়ে পুনরাবৃত্তি করার একটি উপায় সরবরাহ করে যা কম্পিউটার গ্রাফিক্স এবং গণনা জ্যামিতিতে খুব দরকারী।

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