আমি কখন একটি গাদা ব্যবহার করতে চাই?


93

অগ্রাধিকারের সারির সুস্পষ্ট উত্তর ছাড়াও, কখন আমার প্রোগ্রামিং অ্যাডভেঞ্চারে গাদা কার্যকর হবে?


8
এখানে প্রচুর ভাল উত্তর রয়েছে, তাই আমি "যখন একটি পাইল কেবলমাত্র যথেষ্ট পরিমাণে বড় না হয় তখন" দিয়ে চিম করব।
ডন ভার্ভ

উত্তর:


122

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

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

অগ্রাধিকার সারি, শিডিয়ুলার (যেখানে প্রথম দিকের জিনিসটি পছন্দসই রয়েছে) ইত্যাদি জন্য কার্যকর etc

হিপ এমন একটি গাছ যেখানে পিতামাতার নোডের মান তার বংশধর নোডের চেয়ে বড় is

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


4
নোট এটি একটি সুবিধাজনক নিশ্চিত NlogN সাজানোর যে অতিরিক্ত অ্যারে বরাদ্দ প্রয়োজন হয় না হতে পারে
Overflown

38
সাক্ষাত্কারের প্রশ্নগুলির
হিপগুলি জেনেও

21
@ ভিভেকিয়ান 2 আমি এখানে আসার একমাত্র কারণ হ'ল আমার একটি সাক্ষাত্কার হবে।
বাইকসর

বৃহত্তম (বা সবচেয়ে ছোট) আইটেমটি ট্র্যাক করতে সহায়ক স্ট্যাক সহ স্ট্যাক ক্লাসটি ব্যবহার করবেন না কেন। পুনরুদ্ধার হ'ল ও (1)
রিধওয়ান শাকিল

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

49

হ্যাপগুলি এমন স্ট্রাকচার যা হ'ল নূন্যতম বা সর্বাধিকের কাছে দ্রুত প্রবেশের অনুমতি দেয়

তবে কেন আপনি এটি চান? আপনি শুধু প্রতি এন্ট্রি পরীক্ষা পারে অ্যাড যদি এটা ক্ষুদ্রতম বা বৃহত্তম যাচ্ছে তা দেখার। এই ধীরে ধীরে আপনার সর্বদা সবচেয়ে ছোট বা সবচেয়ে বড় থাকে O(1)

উত্তরটি হ'ল কারণ গাদা আপনাকে সবচেয়ে ক্ষুদ্রতম বা বৃহত্তমটিকে টানতে দেয় এবং দ্রুতই নেক্সট সবচেয়ে ছোট বা বৃহত্তম জানতে পারে । এজন্য এটিকে অগ্রাধিকারের সারি বলা হয়।

বাস্তব বিশ্বের উদাহরণ (যদিও খুব সুন্দর বিশ্বের নয়):

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

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

আরও পরিশীলিত উদাহরণ:

মনে করুন আপনার কাছে পূর্ণসংখ্যার ক্রম রয়েছে এবং আপনি এটির ট্র্যাক রাখতে চান median। মিডিয়ান হ'ল একটি নম্বর যা অর্ডার করা অ্যারের মাঝে থাকে।

উদাহরণ:

[1, 2, 5, 7, 23, 27, 31]

উপরের ক্ষেত্রে, 7মিডিয়ান কারণ ছোট সংখ্যাযুক্ত অ্যারেটি [1, 2, 5]বড় সংখ্যাযুক্তগুলির একই আকারের হয় [23, 27, 31]। সাধারণত, অ্যারেতে একটি অদ্ভুত সংখ্যক উপাদান থাকে, তবে মাঝারিটি মাঝের 2 টি উপাদানের গাণিতিক গড় হয়, যেমন (5 + 7)/2

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

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


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

12

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

স্তূপের আর একটি দরকারী বৈশিষ্ট্য হ'ল এটি অ্যারে থেকে স্থানে তৈরি করা যেতে পারে!


3

নির্বাচন অ্যালগরিদমগুলির জন্যও ভাল (কমপক্ষে বা সর্বাধিক সন্ধান করা)


3

যে কোনও সময় আপনি কোনও অস্থায়ী তালিকা বাছাই করার সময়, আপনাকে গাদা বিবেচনা করা উচিত।


0

আপনি যথাক্রমে সবচেয়ে ছোট এবং বৃহত্তম উপাদানগুলিতে অ্যাক্সেস করতে চাইলে আপনি একটি মিনিহ্যাপ বা ম্যাক্সহ্যাপ ব্যবহার করতে পারেন।

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