2011-06-08 22 views
29

मैं विभिन्न प्रकार के ढेर डेटा संरचनाओं को देख रहा था।क्या फिबोनाची ढेर का मानक जावा कार्यान्वयन है?

फाइबोनैकी ढेर में (1) सम्मिलन (2) हटाने और (2) न्यूनतम तत्व खोजने के लिए बेहतर सबसे खराब केस जटिलता प्रतीत होती है।

मुझे पता चला है कि जावा में एक वर्ग PriorityQueue है जो संतुलित बाइनरी ढेर है। लेकिन उन्होंने फिबोनाची ढेर का उपयोग क्यों नहीं किया?

इसके अलावा, क्या java.util में एक फाइबोनैकी ढेर का कार्यान्वयन है?

धन्यवाद!

+2

जावा संग्रह केवल सबसे आम डेटा संरचना प्रदान करते हैं। मुझे लगता है कि फिबोनाची ढेर अधिक विशिष्ट है, या शायद यह अधिक स्मृति का उपयोग कर रहा है। –

+2

@ जेम्स, फिर भी फिबोनैकी ढेर के साथ क्या मायने रखता है? ओ.ओ – ignis

उत्तर

42

नहीं, मानक जावा संग्रह API में Fibonacci ढेर का कार्यान्वयन नहीं है। मुझे यकीन नहीं है कि यह क्यों है, लेकिन मुझे विश्वास है कि ऐसा इसलिए है क्योंकि फिबोनाची ढेर एक अमूर्त भावना में असीम रूप से महान हैं, लेकिन उनके पास अभ्यास में भारी स्थिर कारक हैं। संग्रह ढांचे में एक द्विपदीय ढेर भी नहीं है, जो शामिल करने के लिए एक और अच्छा ढेर होगा।

पूरी तरह से लापरवाह स्वयं-प्लग के रूप में, मेरे पास an implementation of a Fibonacci heap in Java on my personal website है। मुझे यकीन नहीं है कि यह कितना उपयोगी होगा, लेकिन अगर आप यह देखने के लिए उत्सुक हैं कि यह कैसे काम करता है तो मुझे लगता है कि यह एक अच्छा प्रारंभिक बिंदु हो सकता है।

आशा है कि इससे मदद मिलती है!

+0

बहुत बहुत धन्यवाद। आपका कार्यान्वयन कई स्पष्टीकरणों के साथ अच्छी तरह से किया गया है और अच्छी तरह से प्रलेखित है। मैं इसे देख लूंगा। – Phil

+1

क्या कुछ (यूनिट) परीक्षण हैं? कोड भी लाइसेंस है? – Karussell

+0

वाह, मैं मस्ती के लिए अपना खुद का लिखने जा रहा था लेकिन आपका बहुत अच्छा है! – Andy

5

लेकिन उन्होंने फिबोनाची ढेर का उपयोग क्यों नहीं किया?

शायद क्योंकि उन ढेर में द्विआधारी कुंजी की तुलना में प्रति प्रविष्टि बहुत अधिक है।

इसके अलावा, जावा.टिल में फिबोनाची ढेर का कार्यान्वयन है?

नहीं, लेकिन

  1. वहाँ नाथन फिएद्लेर से graphmaker है - GPL और अच्छा test coverage, साथ लेकिन इसके बारे में this nice blog post और के बारे में समस्याओं एक फाइबोनैचि में एक नजर है प्रत्यारोपण हो सकता है। इस पोस्ट में कई अन्य जावा कार्यान्वयन का संदर्भ दिया गया है।
  2. यूनिट के साथ कुछ कोड here
  3. JGraphT project (भी नाथन फिएद्लेर) है और यह भी साथ (कुछ मामूली) परीक्षण tests लेकिन LGPL नहीं है।
  4. अंतिम लेकिन कम से कम Neo4j - जीपीएल - कोई परीक्षण नहीं है।
1

लेकिन उन्होंने फिबोनाची ढेर का उपयोग क्यों नहीं किया?

मुझे लगता है कि मुख्य कारण यह है कि फाइबोनैकी ढेर केवल उस मामले में मदद कर सकता है जब आपके पास बहुत अधिक कमी होती है, एक ऑपरेशन से जुड़ा हुआ ऑपरेशन मेरा ऑपरेशन। उदाहरण के लिए, जब आप इसे डिजस्ट्रा के एल्गोरिदम के साथ उपयोग कर रहे हैं।

इसके अलावा, जावा.टिल में फिबोनाची ढेर का कार्यान्वयन है?

Java.util में कोई कार्यान्वयन नहीं है, लेकिन मैंने फिबोनैकी ढेर के मौजूदा ओपन-सोर्स संस्करणों का उपयोग करके इस विषय पर कुछ प्रयोग किया है। आप इसे on my blog या project's GitHub repository पर पा सकते हैं।

+0

क्या आप पहले प्रश्न के लिए अपने उत्तर पर विस्तार कर सकते हैं – arunmoezhi

+0

बेशक मैं कर सकता हूं। Fibonacci हीप में कमी को निष्पादित करने और संचालन सम्मिलित करने पर बाइनरी हीप पर श्रेष्ठता है, यह भी निकालने के लिए एक ही समय जटिलता है, लेकिन इस ऑपरेशन में बीएच की तुलना में एफएच के लिए और अधिक समय लगता है, क्योंकि यह आंतरिक वृक्ष जंगल को समेकित कर रहा है। तो यदि आपके पास बहुत कम कमी है तो यह सामान्य बाइनरी हीप की तुलना में धीमी है। कुछ विशेष ग्राफों के लिए, यह डिजस्ट्रा के एल्गोरिदम के लिए मामला है। – gabormakrai