দুটি পৃথক ধারণা উভয়ই কেন “হিপ”?


170

সি-স্টাইলের ভাষাগুলিতে এবং ডেটা স্ট্রাকচার উভয়কেই "হিপ" নামে ডাইনামিক মেমরি বরাদ্দকরণের জন্য রানটাইম হিপ ব্যবহার করা হয় কেন ? কিছু সম্পর্ক আছে কি?


4
ডেটা স্ট্রাকচারের অধ্যয়নকালে আমি আজ এটি ভাবছিলাম।
মিটমারো


3
একটি ইংরেজি অভিধানে যান এবং "রান" এর অধীনে প্রবেশের সংখ্যা গণনা করুন। 40+ এন্ট্রিগুলির মধ্যে কতটি কম্পিউটারে প্রয়োগ হয়? :)
jmucchiello


এখানে সম্পর্কিত একটি পোস্ট গতিশীল মেমরি বরাদ্দকরণের জন্য ব্যবহৃত আর্ট রানটাইম হিপ।
আরবিটি

উত্তর:


77

ডোনাল্ড নুথ বলেছেন (কম্পিউটারের প্রোগ্রামিং, আর্ট অফ তৃতীয় সংস্করণ, খণ্ড। 1, পৃষ্ঠা 435):

বেশ কয়েকটি লেখক ১৯ available৫ সালের দিকে উপলভ্য মেমরির পুলটিকে "গাদা" হিসাবে বলতে শুরু করেছিলেন।

তিনি কোন লেখক কোন নির্দিষ্ট কাগজপত্রের উল্লেখ করেন না এবং বলেন না, তবে তিনি বলেন যে অগ্রাধিকারের সারিগুলির সাথে "গাদা" শব্দের ব্যবহার শব্দের প্রচলিত ধারণা।


11
পুল হ'ল স্তরের চেয়ে ভাল নাম হবে।

7
মজাদার. কারও কাছে তাকে জিজ্ঞাসা করা উচিত যে তিনি কোন লেখক মনে রাখছেন।
অধ্যাপক ফ্যালকেন

27
উইকিপিডিয়া দাবি করেছে যে এটি প্রাথমিক পর্যায়ে লিস্প তার স্মৃতিশক্তি স্টোর বাস্তবায়নের জন্য একটি গাদা (ডেটা স্ট্রাকচার) ব্যবহার করেছিল। এটা কিভাবে বলা হয় না। এর রেফারেন্সটি হ'ল "টমাস এইচ। কর্পেন, চার্লস ই। লেজারসন, রোনাল্ড এল রিভস্ট (1990): অ্যালগরিদমের পরিচিতি। এমআইটি প্রেস / ম্যাকগ্রা-হিল।" যা আমার নেই।
স্টিভ জেসোপ

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

4
@ স্টিভ জেসোপ - চেকিং করম্যান, লিসারসন, রিভেস্ট, স্টেইন - তৃতীয় সংস্করণ (২০০৯) হিপসোর্ট অধ্যায়ের শুরুতে এটি কেবল বলেছেন যে "হিপ" শব্দটি মূলত হিপসোর্টের প্রসঙ্গে তৈরি হয়েছিল, তবে এটি পরে উল্লেখ করা হয়েছে " আবর্জনা-সংগৃহীত স্টোরেজ, "যেমন প্রোগ্রামিং ভাষা জাভা এবং লিস্প সরবরাহ করে। আমাদের হিপ ডেটা স্ট্রাকচারটি আবর্জনা-সংগৃহীত স্টোরেজ নয় এবং যখনই আমরা এই বইয়ের স্তূপগুলি উল্লেখ করি, তখন আমরা আবর্জনা সংগ্রহের দিকের পরিবর্তে কোনও ডেটা স্ট্রাকচারের অর্থ করব '' সিএলআরএস - ২ য় সংস্করণেও প্রায় হুবহু একই রকম শব্দবন্ধ রয়েছে (লিস্প একটি গাদা ব্যবহার করেছে এমন কোনও ইঙ্গিত নেই)।
ডাঃ জিম্বোব

64

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


8
হ্যাঁ, আমি মনে করি এটি তার চেয়ে বেশি মূল বিষয় যা তিনি তাঁর প্রশ্নের ভিত্তি করছেন: তারা আলাদা। সুতরাং কেন তাদের একই জিনিস বলা হয় - এর কিছু অন্তর্নিহিত সম্পর্ক রয়েছে।
শন

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

অ্যান্ড্রু যে উত্তর দিচ্ছে। কোন সম্পর্ক নেই। শুধু একটি কাকতালীয় ঘটনা। মেমরির হিপগুলি সাধারণ ব্যবহারের চেয়ে বেশি সত্য, যেহেতু মেমরির জন্য বরাদ্দ করা হয় যেন "কাপড়ের গাদা"। ডেটা কাঠামো অবশ্য কল্পনাটির বৃহত প্রসারিত হওয়ার দাবি করেছে। এবং এটি বরং আরও আকর্ষণীয় "কেন" হয়ে যায়। নামটি আসলে আসবে নোডগুলি তাদের কী দ্বারা সজ্জিত এবং প্যারেন্ট নোড কী সর্বদা> = তার শিশু নোডের চেয়ে বেশি।
আলেকজান্দ্রে বেল

6
তারা অবশ্যই সম্পর্কিত নয়। তবে এটিকে "হিপ" বলার সমস্যাটি হ'ল "স্তূপের" প্রতিরূপ - "স্ট্যাক" - এটিও একটি আসল স্ট্যাক।
ডান

1
আমি জানি কেন হিপ ডেটা স্ট্রাকচারকে হিপ বলা হয়: কারণ এটি গাদা সম্পত্তি সন্তুষ্ট করে। তবে কেন গাদা সম্পত্তি বলা হয়? "টপ ভারি" এর মতো নামটি আরও ভাল হবে বলে এটি আমার কাছে কোনও ধারণা রাখে না।
থমাস এডিং

31

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

ডেটা কাঠামোটি হিপ 60-এর দশকের মাঝামাঝি সময়ে; 70-এর দশকের শুরুর দিকে মেমরি পুলটি গাদা করুন। আলগলের আলোচনায় হিজ শব্দটি (অর্থাত মেমরি পুল) অন্তত একাত্তরের প্রথম দিকে উইজঙ্গার্ডেন ব্যবহার করেছিলেন ।

সম্ভবত প্রাচীনতম ব্যবহার গাদা একটি ডাটা স্ট্রাকচার যেমন সাত বছর আগে পাওয়া যায়
উইলিয়ামস, JWJ 1964 "অ্যালগরিদম 232 - Heapsort", এসিএম এর কমিউনিকেশনস 7 (6): 347-348


1
হ্যাঁ, তবে একটি গাদা এছাড়াও ব্যাধি বোঝায় এবং মেমরির হিপগুলি সাধারণত বিক্ষিপ্ত হয়। ডেটা স্ট্রাকচারের হিপটি খুব ভাল অর্ডার করা হয়। সুতরাং আবার একটি সমান মেলে না heশ্বর এর সাধারণ সংজ্ঞা উপর ভিত্তি করে অন্যভাবে চলছে।
jmucchiello

এটি সর্বদা স্ট্যাকের বিপরীত হিসাবে পরিচয় হয় যা আইএমও নামটি ব্যাখ্যা করার জন্য যথেষ্ট।
পুনরায় পোস্টার

1
এটি কাকতালীয় নয় - বিনামূল্যে তালিকাটি দ্বিপদী স্তূপের মাধ্যমে অগ্রাধিকারের সারি হিসাবে প্রয়োগ করা যেতে পারে।
হানিকানট

2
@ জেমুচ্চিলো: লগের একটি গাদা ( ছবি দেখুন ) ভালভাবে সাজানো এবং গাছের সাথে সাদৃশ্যযুক্ত । এটি আমার স্নাতক পাঠ্যপুস্তকের একটি অনুসারে ডেটা স্ট্রাকচারের নামের উত্স।
gioele

6

প্রকৃতপক্ষে, মেমোরিটি কীভাবে বরাদ্দ করা হয়েছে সে সম্পর্কে পড়া ( বাডি ব্লকগুলি দেখুন ) ডেটা স্ট্রাকচারের একটি স্তূপ সম্পর্কে মনে করিয়ে দেয়।


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

5

আইএমও এটি কেবল একটি দুর্ঘটনা / কাকতালীয় বিষয় যে এই দুটি সম্পূর্ণ সম্পর্কযুক্ত বিষয়টির একই নাম। এটি গ্রাফ এবং গ্রাফের মতো


দুটি গ্রাফ যদিও কোনওভাবে সম্পর্কিত হতে পারে। নিম্নলিখিত হিসাবে কোনও ফাংশনের গ্রাফটি কল্পনা করুন: টিপল ডোমেন, ব্যাপ্তি) একটি প্রান্তবিন্দু এবং একটি প্রান্ত দুটি এইরকম

2
@ অ্যামিট: অবিচ্ছিন্ন গ্রাফগুলির জন্য যার অর্থ সীমাহীন সীমাহীন সংখ্যা। এটি ঠিক আছে, তবে এটি উল্লম্বের মধ্যে প্রান্তগুলির ধারণাটিকে অর্থহীন করে তোলে। ফ (x) = x * 2 ফাংশনের গ্রাফটিতে (0,0) এবং (1,2) এর মধ্যে একটি প্রান্ত রয়েছে? যদি হ্যাঁ, তবে (0,0) এবং (0.5,1) কীভাবে? (0,0) এবং (0.25,0.5)? শীর্ষে অবস্থানের মধ্যে একটি প্রান্তের ধারণা থাকার কোনও উপায় নেই, সুতরাং এটি সত্যই কোনও গ্রাফ নয়।
এমএকে

5

গাদা-জাতীয় ডেটা কাঠামো উপলভ্য মেমরির বরাদ্দ সন্ধানের অ্যালগরিদম দ্বারা ব্যবহৃত হয়। নিম্নলিখিতটি http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html থেকে উদ্ধৃত হয়েছে ।

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


1
আমি এটি সম্পর্কে অত্যন্ত সন্দেহবাদী, বিশেষত "... মেমরির মুক্ত এবং সংরক্ষিত অঞ্চলগুলি বাইনারি গাছের অনুরূপ একটি ডেটা কাঠামোতে রক্ষা করা হয় যা হিপ বলা হয়।" এটি আমার কাছে মনে হচ্ছে যেমন লেখক অনুমান করছেন যে "গাদা" নামের উপর ভিত্তি করে কোনও সংযোগ আছে এবং সম্ভবত এটি ভুল হয়েছে। কেউ কি নিশ্চিত / খণ্ডন করতে পারে?
ডন হ্যাচ

1
বাইনারি বাডি সিস্টেম (লিনাক্সে ব্যবহৃত) সম্পর্কে কিছুটা হালকা গবেষণার পরে, এটি কীভাবে ডেটা বিভাজন করে তা বাইনারি গাছ দ্বারা উপস্থাপন করা যেতে পারে। আপনি যদি মোট স্মৃতিশক্তি অনুসারে নোডগুলি পর্যবেক্ষণ করেন তবে এই বাইনারি গাছটি বৈধ সর্বাধিক স্তূপের মতো দেখায়, তবে নোডগুলি বাইনারি গাছে সর্বাধিক apেকে রাখা হয় না - নোডগুলি সরাসরি ফ্রি মেমরির ক্ষুদ্রতম পাতায় sertedোকানো হয়> অনুরোধ করা আকার। 1 2 3
এরিক ডাবé

1

কথোপকথন পদাবলী স্ট্যাক মেমরি এবং হিপ মেমরি সি ++ স্ট্যান্ডার্ড ব্যবহার করা হয় না। স্ট্যান্ডার্ডটি স্ট্যাটিক স্টোরেজ, থ্রেড স্টোরেজ, স্বয়ংক্রিয় স্টোরেজ এবং গতিশীল স্টোরেজ ব্যবহার করে।

স্ট্যান্ডার্ডের স্টোরেজ ডিউরেকশন বিভাগে আরও পাওয়া যাবে ।

অতএব, ভাষা এবং স্ট্যান্ডার্ড লাইব্রেরি দৃষ্টিকোণ থেকে, কোনও বিভ্রান্তি নেই।


1

প্র: গাদা কী? উ: একটি হিপ একে অপরের উপরে স্থাপন করা সামগ্রীর সংগ্রহ।

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


-2

সম্ভবত প্রয়োগ করা প্রথম মেমরি হিপ একটি গাদা কাঠামো দ্বারা পরিচালিত হয়েছিল?


8
এই হাইপোথিসিসটি একেবারে সুস্পষ্ট বলে মনে হয় না - হিপ (গতিশীল মেমরি অঞ্চল) বজায় রাখার জন্য কীভাবে একটি গাদা (ডেটা স্ট্রাকচার) কার্যকর?
কিথ র্যান্ডাল

7
-1। আমি স্পষ্টতই কেবল অনুমানের পরিবর্তে প্রমাণ সহ একটি অনুমোদনমূলক বক্তব্যকে পছন্দ করব।
রব কেনেডি

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