সর্বাধিক ভাষাগুলি সর্বাধিক হ্যাপ প্রয়োগের পরিবর্তে ন্যূনতম গাদা কেন সরবরাহ করে?


19

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

পাইথনের হ্যাপক মডিউল তালিকার শীর্ষে একটি বাইনারি মিনি-হ্যাপ প্রয়োগ করে।

জাভার লাইব্রেরিতে একটি অগ্রাধিকারের কিউ ক্লাস রয়েছে, যা একটি ন্যূন-অগ্রাধিকার-সারি প্রয়োগ করে।

গো এর লাইব্রেরিতে একটি ধারক / হ্যাপ মডিউল রয়েছে যা কোনও সামঞ্জস্যপূর্ণ ডেটা কাঠামোর উপরে একটি মিনি-হ্যাপ প্রয়োগ করে।

অ্যাপলের কোর ফাউন্ডেশন ফ্রেমওয়ার্কটিতে একটি সিএফবাইনারিহ্যাপ কাঠামো রয়েছে, যা একটি মিনিট-হিপ প্রয়োগ করে।

আমি একটি ন্যূনতম হিপ থেকে সর্বাধিক heালু স্বজ্ঞাত এবং আমি বিশ্বাস করি প্রযুক্তিগতভাবে বাস্তবায়নের পার্থক্য কেবল একটি তুলনামূলক অপারেটর পরিবর্তন করার প্রশ্ন of কোন বাস্তব কারণ আছে? সর্বাধিক অ্যাপ্লিকেশনগুলির সর্বাধিক গাদা পরিবর্তে একটি মিনিট প্রয়োজন? আগাম ধন্যবাদ


তারা ঠিক একই জিনিস না? আমি বিতর্কিত হিসাবে বন্ধ করতে ভোট।

2
মাত্র দু'দিন আগে আমার সি ++ এ একটি মিনিটের গাদা দরকার ছিল এবং এতে কিছুটা বিরক্ত হয়েছিল যে অগ্রাধিকার_কুই ডিফল্ট সর্বাধিক গাদাতে হবে। এটি আমাকে আমার কাস্টম ক্লাসে অপারেটর> সংজ্ঞায়িত করতে বাধ্য করেছিল, যার ইতিমধ্যে অপারেটর <ছিল। গ্রাফগুলি নিয়ে কাজ করার সময় আপনি সাধারণত সবচেয়ে সংক্ষিপ্ততম প্রান্তকে অগ্রাধিকার দিতে চান, সুতরাং আপনার একটি মিনিটের গাদা প্রয়োজন।
এলএসি

2
@ ল্যাক: আপনি ব্যবহার করতে পারেন std::not2(std::less<T>())

উত্তর:


9

অন্যরা যেমন পর্যবেক্ষণ করেছেন, যদি গাদা একটি তুলনামূলক গ্রহণ করে, তবে একটি আচরণ বা অন্যটি পাওয়া খুব বেশি কঠিন নয়। গুগল কোডের একটি द्रुत ধারণা, তবে, প্রস্তাবিত যে দুটি অ্যাপ্লিকেশন বারবার আসে তার কারণে মিনি-হিপগুলি প্রকৃত কোডে অনেক বেশি প্রচলিত।

  • ডিজকস্ট্রা / এ * / আরও অনেক সংক্ষিপ্ত পাথ অ্যালগরিদম (কারণ আংশিক পাথ দীর্ঘ হয়)।

  • ইভেন্ট সিমুলেশন (কারণ সময় এগিয়ে যায়)।

এছাড়াও, আমি যুক্তি দেব যে ডিফল্ট সাজানোর কারণে আইটেমগুলি ছোট থেকে বড় হয়, তাই ডিফল্ট গাদা হওয়া উচিত।


2
আমি সাধারণত সি ++ এ প্রোগ্রাম করি এবং বিপরীতটি অবাক করে: কেন সি ++ একটি মিনিট-হিপ বাস্তবায়ন করে না? যেমনটি আপনি বলেছেন, বেশিরভাগ অ্যালগরিদমগুলি একটি মিনিট-হিপ ব্যবহার করে।
মার্টন ফিক্সম্যান

5

এটি কেবল স্বাদের বিষয়। আমি মনে করি না এর কোনও নির্দিষ্ট কারণ থাকবে। এটি ঠিক যেমন কিছু লোকেরা সমস্যাটিকে ন্যূনতম হিসাবে চিহ্নিত করার মতো সমস্যা প্রকাশ করতে পছন্দ করেন, আবার কেউ কেউ বলেন সর্বাধিক মুনাফা করা।


3

আমি জানি বেশিরভাগ ভাষাগুলি এটি ন্যূনতম বা সর্বোচ্চ-হিপ হওয়া উচিত কিনা তা সিদ্ধান্ত নিতে একটি পরামিতি পাস করার অনুমতি দেয়। তাই ডিফল্ট মানটি কিছুটা স্বেচ্ছাচারী। আমার ধারণা বেশিরভাগ ভাষার ক্ষেত্রে এটি ডিফল্ট অপারেটর কী তা নির্ধারণ করার জন্য ধারাবাহিকতার একটি প্রশ্ন। স্টিলে সি ++ এর জন্য ডিফল্ট std::lessএকটি মিনিট-হিপ বাড়ে ।

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


3
আমি মনে করি না যে এরকম সংযোগ আছে। আপনি <বা> ব্যবহার করে উভয় ধরণের হিপ প্রয়োগ করতে পারেন। আসলে, এসটিএল :: কম এসটিএলে ডিফল্ট, তবে তারা একটি মিনিটের স্তূপের পরিবর্তে সর্বোচ্চ গাদা প্রয়োগ করে।
এলএসি

1

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

আপনি সর্বদা 1 এর সূচকের পরিপূরক গ্রহণ করে এক থেকে অন্যটিতে রূপান্তর করতে পারেন।

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