হিপ বনাম বাইনারি অনুসন্ধান ট্রি (বিএসটি)


169

গাদা এবং বিএসটি-র মধ্যে পার্থক্য কী?

কখন গাদা ব্যবহার করবেন এবং কখন বিএসটি ব্যবহার করবেন?

যদি আপনি উপাদানগুলি বাছাই করা ফ্যাশনে পেতে চান, তবে স্তরের চেয়ে বিএসটি আরও ভাল?


13
এই প্রশ্নটি অফ-টপিক হিসাবে উপস্থিত বলে মনে হচ্ছে কারণ এটি কম্পিউটার বিজ্ঞান সম্পর্কিত এবং cs.stackexchange.com- এ জিজ্ঞাসা করা উচিত
ফ্লো


3
আমার মনে হচ্ছে এটি স্ট্যাক এক্সচেঞ্জ এবং স্ট্যাক ওভারফ্লো উভয়ের সাথেই সম্পর্কিত। এখানে এটি থাকা ভাল
আজিজব্রো 12:39

উত্তর:


190

সারসংক্ষেপ

          Type      BST (*)   Heap
Insert    average   log(n)    1
Insert    worst     log(n)    log(n) or n (***)
Find any  worst     log(n)    n
Find max  worst     1 (**)    1
Create    worst     n log(n)  n
Delete    worst     log(n)    log(n)

এই টেবিলের সমস্ত গড় সময়গুলি সন্নিবেশ করা বাদ দিয়ে তাদের খারাপ সময়গুলির সমান।

  • *: এই উত্তরের সর্বত্র, বিএসটি == ভারসাম্য বিএসটি, যেহেতু ভারসাম্যহীন অ্যাসেম্পোটোটিকভাবে সফল হয়
  • **: এই উত্তরে একটি তুচ্ছ পরিবর্তন ব্যবহার করে ব্যাখ্যা করা হয়েছে
  • ***: log(n)পয়েন্টার গাছের গাদা nজন্য, গতিশীল অ্যারে হিপ জন্য

একটি বিএসটি-তে বাইনারি হ্যাপের সুবিধা

  • বাইনারি হিপগুলিতে গড় সময় সন্নিবেশ হ'ল O(1)বিএসটি-র জন্য O(log(n))এটি হ'ল হত্যার বৈশিষ্ট্য।

    এছাড়াও অন্যান্য স্তূপগুলি রয়েছে যা ফিবোনাচি হিপগুলিরO(1) মতো এমোরাইজড (শক্তিশালী) পৌঁছায় এবং এমনকি ব্রোডাল কাতারের মতো নিকৃষ্টতম পরিস্থিতিও দেখা যায় , যদিও এটি অ-অ্যাসিম্পোটিক পারফরম্যান্সের কারণে ব্যবহারিক নাও হতে পারে: ফিবোনাচি হিপস বা ব্রোডাল সারিগুলি কোথাও অনুশীলনে ব্যবহৃত হয়?

  • বাইনারি হ্যাপগুলি গতিশীল অ্যারে বা পয়েন্টার ভিত্তিক গাছগুলির উপরে দক্ষতার সাথে প্রয়োগ করা যায়, কেবলমাত্র পয়েন্টার ভিত্তিক গাছ ST সুতরাং আমরা যদি মাঝেমধ্যে পুনরায় আকারের বিলম্বকে সামর্থ করতে পারি তবে স্তূপের জন্য আমরা আরও বেশি স্থানের দক্ষ অ্যারে বাস্তবায়ন বেছে নিতে পারি।

  • বাইনারি গাদা সৃষ্টি হয় O(n)সবচেয়ে খারাপ ক্ষেত্রে , O(n log(n))বিএসটি জন্য।

বাইনারি হিপগুলির উপরে বিএসটি-র সুবিধা

  • স্বেচ্ছাসেবী উপাদানগুলির জন্য অনুসন্ধান করা হয় O(log(n))এই বিএসটিগুলির হত্যাকারী বৈশিষ্ট্য।

    গাদা জন্য, এটি O(n)সাধারণত, বৃহত্তম উপাদান ছাড়া যা হয় O(1)

বিএসটি-র উপর গাদা করার "ভুয়া" সুবিধা

  • গাদা O(1)সর্বোচ্চ, বিএসটি সন্ধান করতে হয়O(log(n))

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

    প্রকৃতপক্ষে, এটি বিএসটিগুলির তুলনায় গাদাগুলির একটি সীমাবদ্ধতা : একমাত্র দক্ষ অনুসন্ধান এটি বৃহত্তম উপাদানটির জন্য।

গড় বাইনারি হ্যাপ সন্নিবেশ করা হয় O(1)

সূত্র:

স্বজ্ঞাত যুক্তি:

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

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

জিসিসি সি ++ স্ট্যান্ডার্ড লাইব্রেরি রিয়েল হার্ডওয়ারে বেনমার্ক .োকান

আমি + োকানোর সময়গুলি সম্পর্কে সঠিক কিনা তা দেখার জন্য আমি সি ++ std::set( লাল-কালো গাছ বিএসটি ) এবং std::priority_queue( গতিশীল অ্যারে হিপ ) সন্নিবেশকে বেঞ্চমার্ক করেছি এবং আমি এটি পেয়েছি:

এখানে চিত্র বর্ণনা লিখুন

  • মানদণ্ডের কোড
  • প্লট স্ক্রিপ্ট
  • প্লট ডেটা
  • সিপিইউ সহ একটি লেনোভো থিংকপ্যাড পি 5১ ল্যাপটপে উবুন্টু 19.04, জিসিসি 8.3.0 এ পরীক্ষিত: ইনটেল কোর আই 7-7820 এইচকিউ সিপিইউ (4 টি কোর / 8 থ্রেড, 2.90 গিগাহার্টজ বেস, 8 এমবি ক্যাশে), র‌্যাম: 2x স্যামসাং এম 471 এ 2 কে 43 বিবি 1-সিআরসি (2 এক্স 16 জিআইবি) , 2400 এমবিপিএস), এসএসডি: স্যামসং এমজেডভিএলবি 512 এএইচকিউ -000 এল 7 (512 জিবি, 3,000 এমবি / সে)

তাই পরিষ্কার:

জিসি সি ++ স্ট্যান্ডার্ড লাইব্রেরি রত্ন 5 এ মাপদণ্ডের বেঞ্চমার্ক

জেম 5 একটি সম্পূর্ণ সিস্টেম সিমুলেটর, এবং তাই এর সাথে একটি অসীম নির্ভুল ঘড়ি সরবরাহ করে m5 dumpstats। তাই আমি পৃথক প্রবেশের সময় নির্ধারণের জন্য এটি ব্যবহার করার চেষ্টা করেছি।

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা:

  • গাদা এখনও স্থির, তবে এখন আমরা আরও বিশদে দেখতে পাচ্ছি যে কয়েকটি লাইন রয়েছে এবং প্রতিটি উচ্চতর লাইনই বেশি বিচ্ছিন্ন।

    এটি উচ্চতর এবং উচ্চতর সন্নিবেশগুলির জন্য মেমরি অ্যাক্সেসের বিলম্বগুলির সাথে সমান হতে হবে।

  • টুডো আমি বিএসটিকে সম্পূর্ণরূপে ব্যাখ্যা করতে পারি না কারণ এটি এত লোগারিথিক এবং কিছুটা বেশি ধ্রুবক লাগে না।

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

একটি আড়াল H64 এইচপিআই সিপিইউতে এই বিল্ড্রুট সেটআপের সাথে বেঞ্চমার্কযুক্ত

বিএসটি কোনও অ্যারেতে দক্ষতার সাথে প্রয়োগ করা যায় না

গাদা অপারেশনগুলিতে কেবল একটি গাছের ডালকে বুদবুদ করতে বা নীচে ফেলা প্রয়োজন, সুতরাং O(log(n))সবচেয়ে খারাপ পরিস্থিতি অদলবদল,O(1) গড়।

একটি বিএসটি ভারসাম্য বজায় রাখার জন্য গাছের আবর্তন প্রয়োজন, যা অন্য একটির জন্য শীর্ষ উপাদানকে পরিবর্তন করতে পারে এবং পুরো অ্যারেটিকে চারদিকে ঘোরাতে হবে (O(n) ) ।

গাদা একটি অ্যারে দক্ষতার সাথে প্রয়োগ করা যেতে পারে

পিতামাতার এবং শিশুদের সূচকগুলি এখানে প্রদর্শিত হিসাবে বর্তমান সূচি থেকে গণনা করা যেতে পারে

বিএসটি-র মতো কোনও ভারসাম্যমূলক ক্রিয়াকলাপ নেই।

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

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

গতিশীল অ্যারে হ্যাপস বনাম পয়েন্টার ট্রি হ্যাপস

পয়েন্টার হ্যাপগুলির শীর্ষে গাদা দক্ষতার সাথে প্রয়োগ করা যেতে পারে: দক্ষ পয়েন্টার-ভিত্তিক বাইনারি হ্যাপ বাস্তবায়ন করা কি সম্ভব?

গতিশীল অ্যারে বাস্তবায়ন আরও স্থান দক্ষ। মনে করুন যে প্রতিটি গাদা উপাদানটিতে একটিতে কেবলমাত্র একটি পয়েন্টার রয়েছে struct:

  • গাছ প্রয়োগের জন্য প্রতিটি উপাদানের জন্য তিনটি পয়েন্টার সংরক্ষণ করতে হবে: পিতামাতা, বাম শিশু এবং ডান শিশু। সুতরাং মেমরির ব্যবহার সর্বদা হয় 4n(3 টি ট্রি পয়েন্টার + 1 structপয়েন্টার)।

    বৃক্ষ বিএসটিগুলিতে আরও ভারসাম্যপূর্ণ তথ্যের প্রয়োজন হবে, যেমন কালো-লাল-নেস।

  • ডায়নামিক অ্যারে বাস্তবায়ন 2nদ্বিগুণ হওয়ার ঠিক পরে আকার হতে পারে । সুতরাং এটি হতে চলেছে 1.5n

অন্যদিকে, গাছের স্তূপগুলি সবচেয়ে খারাপ ক্ষেত্রে সন্নিবেশ করায় কারণ ব্যাকিং গতিশীল অ্যারে এর আকার দ্বিগুণ করার জন্য অনুলিপি করা সবচেয়ে O(n)খারাপ ক্ষেত্রে লাগে , অন্যদিকে গাছের স্তূপ প্রতিটি নোডের জন্য নতুন নতুন বরাদ্দ করে।

তবুও, ব্যাকিং অ্যারে দ্বিগুণ হওয়া O(1)সূচিত হয়েছে, সুতরাং এটি সর্বোচ্চ বিলম্বিত বিবেচনায় নেমে আসে। এখানে উল্লেখ করা হয়েছে

দর্শন

  • বিএসটিগুলি পিতা বা মাতা এবং সমস্ত বংশধরদের মধ্যে একটি বৈশ্বিক সম্পত্তি বজায় রাখে (ছোট ছোট, ডানদিকে বড়)।

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

    এই বিশ্বব্যাপী সম্পত্তিটি রক্ষণাবেক্ষণ করতে (লগ এন সন্নিবেশ করা) আরও ব্যয়বহুল, তবে আরও শক্তিশালী অনুসন্ধান (লগ এন অনুসন্ধান) দেয়।

  • গাদা পিতামাতা এবং প্রত্যক্ষ বাচ্চাদের (পিতামাতাদের> শিশুদের) মধ্যে একটি স্থানীয় সম্পত্তি বজায় রাখে।

    একটি গাদা শীর্ষ নোড বড় উপাদান, যা শুধুমাত্র বজায় রাখতে স্থানীয় জ্ঞান প্রয়োজন (আপনার পিতামাতাকে জেনে)।

বিএসটি বনাম হিপ বনাম হাশম্যাপের তুলনা:

  • বিএসটি: হয় হয় যুক্তিসঙ্গত হতে পারে:

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

  • হ্যাশ মানচিত্র: কেবল একটি আনর্ডারড সেট হতে পারে, দক্ষ বাছাই করার মেশিন নয়, কারণ হ্যাশিং কোনও ক্রম মেশানো।

দ্বি-সংযুক্ত তালিকা list

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

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

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

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

বিভিন্ন ভারসাম্য বিএসটি এর তুলনা

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

  • লাল-কালো গাছ । 2019 সালের হিসাবে সর্বাধিক ব্যবহৃত বিবিএসটি হিসাবে প্রদর্শিত হবে, যেমন এটি জিসিসি 8.3.0 সি ++ বাস্তবায়ন দ্বারা ব্যবহৃত
  • এভিএল গাছ । বিএসটি থেকে কিছুটা বেশি সুষম বলে মনে হয়, তাই কিছুটা বেশি ব্যয়বহুল অনুসন্ধানের ব্যয়ে বিলম্বিতা খুঁজে পাওয়া আরও ভাল। উইকির সংক্ষিপ্তসার: "এভিএল গাছগুলি প্রায়শই লাল-কালো গাছের সাথে তুলনা করা হয় কারণ উভয়ই একই ক্রিয়াকলাপকে সমর্থন করে এবং মৌলিক ক্রিয়াকলাপের জন্য [একই] সময় নেয় lookup এগুলি আরও কঠোরভাবে ভারসাম্যযুক্ত red বংশধরদের পৃথক পৃথক সংখ্যা। "
  • WAVLমূল কাগজ rebalancing এবং আবর্তনের অপারেশন উপর সীমা পরিপ্রেক্ষিতে যে সংস্করণ সুবিধার উল্লেখ করা হয়।

আরো দেখুন

সি এস অনুরূপ প্রশ্ন: /cs/27860/whats-the-difference-between-a-binary-search-tree-and-a-binary-heap


4
I + 1ed, তবে গড় ও (1) বাইনারি হ্যাপ সন্নিবেশকে ন্যায্য প্রমাণিত "কাগজ" এখন একটি মৃত লিঙ্ক, এবং "স্লাইডগুলি" কেবল প্রমাণ ছাড়াই দাবি জানায়। এছাড়াও আমি মনে করি এটি পরিষ্কার করতে সাহায্য করবে যে এখানে "গড় কেস" এর অর্থ গড় অনুমান করা যে sertedোকানো মানগুলি নির্দিষ্ট বন্টন থেকে আসে , সুতরাং এই বৈশিষ্ট্যটি আসলে কীভাবে "ঘাতক" তা আমি নিশ্চিত নই।
j_random_hacker

3
বিএসটি এবং ভারসাম্যপূর্ণ বিএসটি মনে হয় বিনিময়যোগ্যভাবে ব্যবহৃত হবে। এটা পরিষ্কার করে দেওয়া উচিত যে বিভ্রান্তি এড়াতে উত্তরটি ভারসাম্যপূর্ণ বিএসটিকে বোঝায়।
gklpak

2
- @Bulat আমি আমরা একটু digressing করছি, কিন্তু আমরা উভয় সর্বোচ্চ এবং একই সময়ে সর্বনিম্ন চান, আমরা যদি আমরা সতর্ক থাকুন না হন দুই গাদা বজায় রাখার কোনো সমস্যার সম্মুখীন হতে পারে মনে stackoverflow.com/a/1098454/7154924 । সর্বাধিক মিনি-হিপ (অ্যাটকিনসন এট আল এর কারণে) ব্যবহার করা সম্ভবত ভাল, যা এই উদ্দেশ্যে বিশেষভাবে ডিজাইন করা হয়েছে।
ফ্লো

1
@ সিরোস্যান্টিলি 新疆 改造 中心 六四 事件 法轮功: বাইনারি হিপ মোছার কাজটি ও (লগ এন) কেন হয় তা আমি বুঝতে পারি না। এটি কেবলমাত্র তখনই কার্যকর হয় যদি আপনার গাদা অংশের একটি পয়েন্টার থাকে তবে বেশিরভাগ ব্যবহারের ক্ষেত্রে আপনার কী থাকে এবং আপনাকে প্রথমে O (n) লাগে এমন উপাদানটি খুঁজে বের করতে হবে।
রিকোলা

5
হিপ সন্নিবেশ হ'ল লগ (এন) ও (1) নয়
বোবো

78

হিপ কেবল গ্যারান্টি দেয় যে উচ্চ স্তরের উপাদানগুলি নিম্ন স্তরের উপাদানগুলির চেয়ে বেশি (সর্বোচ্চ-হিপ জন্য) বা আরও ছোট (মিনিট-হিপের জন্য), যেখানে বিএসটি আদেশ দেয় ("বাম" থেকে "ডানদিকে") guaran আপনি যদি সাজানো উপাদান চান তবে বিএসটি দিয়ে যান।


8
"স্তূপটি কেবল গ্যারান্টি দেয় যে উচ্চ স্তরের উপাদানগুলি নিম্ন স্তরের উপাদানগুলির চেয়ে বেশি (সর্বোচ্চ-হিপ জন্য) বা আরও ছোট (ন্যূন-হিপের জন্য)," "- স্তূপটি প্রতিটি স্তরের প্রতি এটি প্রয়োগ করে না , তবে কেবল পিতামাতার মধ্যে- চেইন। [1, 5, 9, 7, 15, 10, 11]একটি বৈধ ন্যূনতম-হিপ উপস্থাপন করে তবে 7স্তরটি 3 স্তর 2 এর চেয়ে ছোট 9হয় a দর্শনীয়তার জন্য, উদাহরণস্বরূপ দেখুন স্তূপগুলির জন্য নমুনা উইকিপিডিয়া চিত্রের25 এবং 19উপাদানগুলি । (এছাড়াও লক্ষ করুন যে উপাদানগুলির মধ্যে বৈষম্য সম্পর্ক কঠোর নয়, যেহেতু উপাদানগুলি অগত্যা অনন্য নয়))
ড্যানিয়েল অ্যান্ডারসন

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

50

কখন হিপ ব্যবহার করবেন এবং কখন বিএসটি ব্যবহার করবেন

গাদা findMin / findMax (এ উত্তম O(1),) যখন বিএসটি সময়ে ভাল সব খুঁজে বের করে ( O(logN))। সন্নিবেশ O(logN)উভয় কাঠামোর জন্য। যদি আপনি কেবল ফাইন্ডমিন / ফাইন্ডম্যাক্সের (যেমন অগ্রাধিকার-সম্পর্কিত) যত্নশীল হন তবে গাদা দিয়ে যান। আপনি যদি সাজানো সবকিছু চান তবে বিএসটি দিয়ে যান।

এখান থেকে প্রথম কয়েকটি স্লাইডগুলি খুব পরিষ্কারভাবে বিষয়গুলি ব্যাখ্যা করে।


3
সন্নিবেশ সবচেয়ে খারাপ ক্ষেত্রে উভয়ের জন্য লগারিদমিক হলেও গড় হিপ সন্নিবেশকে ধ্রুবক সময় লাগে। (যেহেতু বিদ্যমান উপাদানগুলির বেশিরভাগটি নীচে রয়েছে, বেশিরভাগ ক্ষেত্রে একটি নতুন উপাদানকে কেবলমাত্র এক বা দুটি স্তর বাছাই করতে হবে, যদি তা না হয়))
স্তরই

1
@xysun আমি মনে করি বিএসটি findMin & findMax মধ্যে উত্তম stackoverflow.com/a/27074221/764592
Yeo

2
@ ইয়েও: ফাইন্ডমিন xor ফাইন্ডম্যাক্সের জন্য গাদা ভাল । আপনার যদি উভয়েরই প্রয়োজন হয় তবে বিএসটি আরও ভাল।
মূক হাঁস

1
আমি মনে করি এটি কেবল একটি সাধারণ ভুল ধারণা। ইয়োও দ্বারা নির্দেশিত নূন্যতম এবং সর্বাধিক সন্ধান করতে একটি বাইনারি গাছ সহজেই সংশোধন করা যায়। এটি আসলে স্তূপের একটি সীমাবদ্ধতা : একমাত্র কার্যকর সন্ধানটি ন্যূনতম বা সর্বোচ্চ। গাদা প্রকৃত সুবিধা হে (1) গড় সন্নিবেশ হিসাবে আমি ব্যাখ্যা: stackoverflow.com/a/29548834/895245
সিরো Santilli郝海东冠状病六四事件法轮功

1
সিরো Santilli এর উত্তর অনেক ভালো হয়: stackoverflow.com/a/29548834/2873507
ভিক Seedoubleyew

9

অন্যদের দ্বারা উল্লিখিত হিসাবে, হিপগুলি O findMin বা findMax (1) এ করতে পারে তবে একই ডেটা কাঠামো উভয়ই নয়। তবে আমি একমত নই যে ফাইন্ডমিন / ফাইন্ডম্যাক্সে হিপ ভাল। আসলে, একটি সামান্য পরিবর্তন করে, বিএসটি উভয় findMin এবং findMax ও (1) এ করতে পারে।

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

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

আমি নীচের মন্তব্যে আপনার চিন্তা শুনতে আগ্রহী হবে ধন্যবাদ :)

হালনাগাদ

অনুরূপ প্রশ্নের ক্রস রেফারেন্স আমরা হিপ অপারেশন অনুকরণ করতে বাইনারি অনুসন্ধান ট্রি ব্যবহার করতে পারি? বিএসটি ব্যবহার করে হিপ অনুকরণের বিষয়ে আরও আলোচনার জন্য।


আপনি একমত না কেন? আপনি কি নীচে আপনার চিন্তায় ভাগ করে নিতে চান?
ইয়েও

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

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

সংশোধন: এটি O (1) এর জন্য popMinবা popMaxএটি নয়, তবে এটি ও (লগ এন) কারণ এটি একটি ভারসাম্যপূর্ণ বিএসটি হতে হবে যা প্রতিটি মুছার ক্রিয়াকলাপের ভারসাম্য বজায় রাখতে হবে। সুতরাং এটি বাইনারি হিপ হিসাবে একই popMinবা popMaxযা হে (লগ এন) চালায়
ইয়ো

2
আপনি প্রথম মিনিট / সর্বাধিক পেতে পারেন তবে কেথ মিনিট / সর্বাধিক পাওয়া স্বাভাবিক বিএসটি জটিলতায় ফিরে যেতে পারে।
কেওস

3

একটি বাইনারি অনুসন্ধান ট্রি সংজ্ঞাটি ব্যবহার করে: যে প্রতিটি নোডের জন্য, এর বাম দিকে নোডের একটি কম মান (কী) থাকে এবং এর ডানদিকে নোডের একটি বৃহত্তর মান (কী) থাকে।

যেখানে গাদা হিসাবে, বাইনারি গাছের প্রয়োগ হচ্ছে নিম্নলিখিত সংজ্ঞাটি ব্যবহার করে:

যদি A এবং B নোড হয়, যেখানে বি A এর চাইল্ড নোড, তবে A এর মান (কী) অবশ্যই B.T এর মান (কী) এর চেয়ে বড় বা সমান হতে হবে, কী (A) ≥ কী (B) )।

http://wiki.answers.com/Q/Difference_between_binary_search_tree_and_heap_tree

আমি আমার পরীক্ষার জন্য আজ একই প্রশ্নে দৌড়েছি এবং আমি এটি সঠিকভাবে পেয়েছি। হাসি ... :)


"গাদা, বাইনারি গাছের বাস্তবায়ন হচ্ছে" - কেবল এই ইঙ্গিত করে যে একটি গাদা একটি ধরণের বাইনারি গাছ, এক ধরণের বিএসটি নয়
সাদ

3

হিপ এর উপরে বিএসটি এর আরেকটি ব্যবহার; একটি গুরুত্বপূর্ণ পার্থক্যের কারণে:

  • কোনও বিএসটিতে উত্তরসূরি এবং পূর্বসূরীর সন্ধানে ও (এইচ) সময় লাগবে। (ও (লগইন) ভারসাম্যপূর্ণ বিএসটিতে)
  • হিপ থাকাকালীন, কোনও উপাদানটির উত্তরসূরি বা পূর্বসূরি খুঁজে পেতে ও (এন) সময় লাগে।

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

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

সম্পাদিত:

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


1
হ্যাঁ. এটি বাছাই করা ক্রম থেকে সাজানো থেকে শুরু করে। ওএস (এন) একটি বিএসটি এর আন্ডার ট্রভারসাল জন্য সময়, যা সাজানো ক্রম দেয়। হিপগুলিতে থাকাকালীন, আপনি ন্যূনতম উপাদানটি বের করেন এবং তারপরে ও (লগ এন) সময়ে পুনরায় heapify করুন। সুতরাং, এন উপাদানগুলি বের করতে O (n লগন) লাগবে। এবং এটি আপনাকে বাছাই করা ক্রম দিয়ে ছাড়বে।
কোডারর

from unsorted to sorted sequence. O(n) time for inorder traversal of a BST, which gives sorted sequence.ঠিক আছে, বিএসটি-তে অরক্ষিত সিকোয়েন্স থেকে আমি কী (এন লগন) সময়ের চেয়ে কম সময়ের সাথে কী তুলনার ভিত্তিতে একটি পদ্ধতি জানি না, যা বিএসটিকে সিকোয়েন্স অংশে আধিপত্য করে। (যেখানে ও (এন) হিপ নির্মাণ রয়েছে)) আমি এটিকে ন্যায্য বিবেচনা করব (যদি অর্থহীন না হয়) অবধি অবিচ্ছিন্নতার কাছাকাছি থাকা এবং বিএসটিগুলি বাছাই করা state
গ্রেইবার্ড

আমি এখানে যা ব্যাখ্যা করতে চাইছি তা হ'ল যদি আপনার কাছে একটি বিএসটি এবং এন উপাদানগুলির একটি গাদা থাকে তবে সমস্ত উপাদানগুলি উভয় ডেটা স্ট্রাকচার থেকে সাজানো ক্রমে মুদ্রণ করা যেতে পারে এবং বিএসটি ও (এন) সময়ে এটি করতে পারে (আন্ডার ট্র্যাভারসাল) ), যখন গাদা O (n লগন) সময় নেবে। আপনি এখানে কী বলতে চাইছেন তা আমি বুঝতে পারি না। আপনি কীভাবে বলবেন যে বিএসটি আপনাকে ও (এন লগনে) অনুসারে বাছাই করা ক্রম দেবে।
CODError

আমি মনে করি আপনি একটি বিএসটি এবং একটি হিপ তৈরিতে নেওয়া সময়কেও বিবেচনা করছেন। তবে আমি ধরে নিলাম আপনার কাছে এটি ইতিমধ্যে রয়েছে, আপনি এটি সময়ের সাথে সাথে তৈরি করেছেন এবং এখন আপনি সাজানো ফলাফল পেতে চান। আমি কি তোমার কথা পাচ্ছি না?
CODError

1
সম্পাদিত ... আমি আশা করি আপনি এখনই সন্তুষ্ট; পি এবং সঠিক হলে একটি +1 দিন।
কোডেরর

1

একটি অ্যারে থেকে BST এ সমস্ত এন উপাদান সন্নিবেশ করান O (n লগইন) লাগে। n একটি অ্যারেতে এলিমেন্টগুলি হে (এন) সময়ে একটি গাদাতে .োকানো যেতে পারে। যা গাদা একটি নির্দিষ্ট সুবিধা দেয়


0

হিপ কেবল গ্যারান্টি দেয় যে উচ্চ স্তরের উপাদানগুলি নিম্ন স্তরের উপাদানের তুলনায় বৃহত্তর (সর্বোচ্চ-হিপ জন্য) বা আরও ছোট (ন্যূনতম-হিপের জন্য)

আমি উপরের উত্তরটি পছন্দ করি এবং আমার মন্তব্যটি আমার প্রয়োজন এবং ব্যবহারের জন্য আরও নির্দিষ্ট করে রাখি। আমাকে n অবস্থানের তালিকাটি প্রতিটি অবস্থান থেকে নির্দিষ্ট বিন্দুর (0,0) দুরত্ব খুঁজে পেতে এবং তারপরে ছোট দূরত্বে থাকা am এর অবস্থানগুলি ফিরিয়ে আনতে হয়েছিল। আমি অগ্রাধিকার সারিতে ব্যবহৃত যা হিপ। দূরত্বগুলি খুঁজে পেতে এবং গাদা করার জন্য এটি আমাকে এন (লগ (এন)) এন-লোকেশন লগ (এন) প্রতিটি সন্নিবেশ করিয়েছিল। তারপরে স্বল্পতম দূরত্বে এম পাওয়ার জন্য এটি মি (লগ (এন)) মি-লোকেশন লগ (এন) হিপিং আপ মোছার জন্য নিল।

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

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