मेरे पास निम्न सरणी है। मैं कैसे जांच सकता हूं कि एन तत्व युक्त सरणी न्यूनतम ढेर है या नहीं? कैसे जांचें कि सरणी एक न्यूनतम ढेर है या नहीं?
उत्तर
के बाद से अपने सूचकांक 1 से शुरू होता है, (सूचकांक 0 होता है 0 - क्यों?), किसी विशेष नोड के बच्चों के सूचकांक इस प्रकार का निर्धारण कर सकते हैं: दिए गए नोड के सूचकांक
- चलो हो
i
i
के सूचकांक के बाईं बच्चे:2i
i
सूचकांक ':2i + 1
इस प्रकार प्रत्येक नोड के लिए, आप आसानी से जांच सकते हैं कि दोनों बच्चे नोड से अधिक हैं।
कुछ लोग इंडेक्स 1 पर रूट डालना पसंद करते हैं। वे कहते हैं कि यह प्रदर्शन कारणों से है (बाएं बच्चे की गणना करते समय अतिरिक्त जोड़ को हटा देता है, और माता-पिता की गणना करते समय एक घटाव हटा देता है), लेकिन मैंने प्रदर्शन तुलना की है: कोई सार्थक नहीं अंतर। दोष यह है कि यह सी-जैसे भाषा प्रोग्रामर के बीच अनगिनत बाड़पोस्ट त्रुटियों का कारण बनता है। मुझे लगता है कि लोग इसका मुख्य कारण यह मानते हैं क्योंकि सेडगेविक ने 1 9 83 में एल्गोरिदम पुस्तक लिखी थी, और उसके सभी उदाहरण 1-आधारित सरणी के साथ पास्कल में थे। उनके पास्कल उदाहरणों के सी अनुवाद आज भी प्रचलित हैं। –
is_heap
एक अच्छा सुझाव है। आपको बस उचित तुलनित्र का उपयोग करने की आवश्यकता है। चाहे पेड़ एक न्यूनतम/अधिकतम ढेर है या नहीं की जाँच करने के
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
int main()
{
std::vector<int> v {0, 5, 9, 11, 14, 18, 19 };
std::cout << std::is_heap(
v.begin()+1, // off by 1
v.end(),
std::greater<int>() // std::less is used by default for max-heap
);
}
परिचित चौड़ाई पहले खोज (BFS) भी लागू किया जा सकता: और तुम भी यह iterators के साथ अपने 1-आधारित अनुक्रमण के साथ, आसानी से उपयोग कर सकते हैं।
#include <iostream>
#include <queue>
int main() {
int tree[] = {5, 9, 11, 14, 18, 19, 21, 33, 17, 27};
int size = 10;
std::queue <int> q;
q.push(0);
bool flag = true;
while(!q.empty()) {
int x = q.front();
q.pop();
int left = 2*x+1, right = 2*x+2; // 0-based indexing used here
if(left < size) { // check if left child exists or not.
q.push(left);
// check value at parent is less than child or not.
if(tree[x] > tree[left]) {
flag = false;
break;
}
}
if(right < size) { // check whether right child exists or not.
q.push(right);
if(tree[x] > tree[right]) { // check value of parent less than child.
flag = false;
break;
}
}
}
if(flag)
std::cout << "It is minimum heap.\n";
else
std::cout << "Not a minimum heap.\n";
return 0;
}
विचार wookie919 जैसा ही है।
- 1. कैसे जांचें कि एक बहुआयामी सरणी खाली है या नहीं?
- 2. कैसे जांचें कि सरणी शून्य या खाली है या नहीं?
- 3. कैसे जांचें कि सरणी खाली नहीं है या नहीं?
- 4. जांचें कि सरणी खाली है या शून्य
- 5. पोस्टग्रेज़: जांचें कि सरणी फ़ील्ड में मूल्य है या नहीं?
- 6. एक न्यूनतम-अधिकतम ढेर
- 7. एक सॉर्टेड सरणी एक मिनी-ढेर है? अधिकतम-ढेर का न्यूनतम मूल्य क्या है?
- 8. न्यूनतम ढेर विधि- न्यूनतम ढेर एल्गोरिदम
- 9. सरणी सूची क्या है या नहीं जांचें?
- 10. कैसे जांचें कि एक डबल शून्य है या नहीं?
- 11. कैसे जांचें कि एक जार फ़ाइल मान्य है या नहीं?
- 12. .NET कैसे जांचें कि पथ एक फ़ाइल है या नहीं?
- 13. कैसे जांचें कि एक गतिशील वस्तु सी # में एक सरणी है या नहीं?
- 14. पता कैसे लगाया जाए कि स्मृति ढेर से है या नहीं? (ढेर या स्थिर चर नहीं)
- 15. जांचें कि सरणी (AngularJS)
- 16. जांचें कि सॉकेट कनेक्ट है या नहीं
- 17. कैसे जांचें कि गतिविधि अभी भी ढेर में है या नहीं?
- 18. कैसे जांचें कि सरणी 2.8 में एक विशेष मान है?
- 19. जांचें कि सरणी C++
- 20. जांचें कि डोमेन पंजीकृत है या नहीं
- 21. जांचें कि सरणी PHP
- 22. कैसे जांचें कि एक बाइट सरणी वैध छवि है या नहीं?
- 23. जांचें कि ऑब्जेक्ट्स की एक सरणी अंडरस्कोर
- 24. जांचें कि फ़ाइल मौजूद है या नहीं,
- 25. -Xms: प्रारंभिक ढेर का आकार या न्यूनतम ढेर आकार?
- 26. शेयरपॉइंट: जांचें कि आइटम सूची में मौजूद है या नहीं, न्यूनतम ओवरहेड
- 27. ढेर एक कार्यान्वयन विस्तार है, या नहीं?
- 28. जांचें कि निर्देशिका एक माउंट पॉइंट है या नहीं?
- 29. जांचें कि स्ट्रिंग में सरणी
- 30. जावा जांचें कि सरणी [] आइटम मौजूद है
http://stackoverflow.com/questions/4157159/algorithm-for-checking-if-an-array-with-n-elements-is-a-minimum-heap इसका संदर्भ लें। –
क्या आप ['std :: is_heap'] (http://en.cppreference.com/w/cpp/algorithm/is_heap) ढूंढ रहे हैं? –
नोड के बच्चे मैं 2i और 2i + 1 पर हैं। तो एक [2i]> = एक [i] और एक [2i + 1]> = एक [i] सत्यापित करें क्योंकि यह ढेर संपत्ति है: बच्चे कम से कम अपने माता-पिता के रूप में बड़े होते हैं। – Gene