मेरे पास प्राथमिकता के साथ कुछ ऑब्जेक्ट हैं जो यौगिक प्रकार है और केवल आंशिक रूप से ऑर्डर किया गया है । मुझे इस प्राथमिकता के क्रम में वस्तुओं का चयन करने की आवश्यकता है (यानी हर बार न्यूनतम आइटम प्राप्त करें )। लेकिन आदेश को मनमाने ढंग से पूरा करने के बजाय, मैं पसंद करूंगा यदि कतार इस अर्थ में स्थिर थी कि यदि एक से अधिक न्यूनतम तत्व हैं, तो उसे सबसे पुराना वापस करना चाहिए।
क्या कोई ढेर डेटा संरचना है जो आंशिक आदेश देने के साथ काम करेगी? या इसके साथ काम करने के लिए नियमित प्राथमिकता कतार का एक संशोधन? एल्गोरिथ्म के लिए आम पसंद मुझे साधारण बाइनरी या 4-एरी हीप है, लेकिन यह आंशिक आदेश देने के साथ काम नहीं करता है।
प्राथमिकता मान समर्थन:
- ऑपरेशन का उपयोग करके आंशिक आदेश देना । यह आंशिक आदेश है, तो यह संभव है कि गलत है और भी गलत है। मैं लिखने के उस मामले में।
- आंशिक आदेश देने के लिए एक रैखिक विस्तार को परिभाषित किया जा सकता है। प्राथमिकता कतार के लिए इसका उपयोग करना आसान तरीका है क्योंकि एल्गोरिथ्म उस तरह से काम करता है। लेकिन आदेश प्रदर्शन को प्रभावित करता है और सम्मिलन का क्रम ऐसा लगता है कि यह सबसे खराब मामलों से बचने में सबसे अच्छा होना चाहिए।
इसके अतिरिक्त मैं जिस एल्गोरिथ्म का उपयोग करना चाहता हूं, उसे कतार में सभी प्राथमिकताओं को जानने की जरूरत है।
प्राथमिकताओं के कुछ वास्तविक-विश्व अर्थ हैं, लेकिन परिवर्तन के अधीन हैं, इसलिए यह अन्य गुणों पर भरोसा करने के लिए व्यवहार्य नहीं लगता है जो उनके पास हो सकते हैं।
नोट: बाइनरी हीट्स आंशिक ऑर्डरिंग के साथ काम नहीं करते हैं। , और साथ एक बाइनरी हीप मान लें , जहां और और । वे उस क्रम में तैनात हैं, इसलिएख ग एक ≼ ग एक ⋚ ̸ ख एक ⋚ ̸ ग
a (0)
/ \
b (1) c (2)
अब d डाला गया है। अगला मुक्त स्थिति 3 है, का बायां बच्चा , इसलिए हम प्राप्त करते हैं
a (0)
/ \
b (1) c (2)
/
d (3)
यदि (जिसका मतलब घ ≼ ग संक्रामिता से है, लेकिन के बारे में कुछ नहीं कहा घ और ख ) और घ ⋚ ̸ ख , तो घ के साथ बदली नहीं प्राप्त करता है ख है, क्योंकि यह कम नहीं है। लेकिन यह वास्तव में एक से कम है , लेकिन इसके साथ इसकी तुलना नहीं की जाती है, इसलिए अब मुख्य ढेर अपरिवर्तनीय नहीं है; शीर्ष न्यूनतम नहीं है।
मुझे संदेह है कि द्विपदीय ढेर की शैली में कुछ हद तक ढेर काम कर सकते हैं। मूल रूप से हमेशा नए मूल्यों की जड़ के साथ तुलना करना और केवल एक साथ तुलनीय तत्वों को जोड़ना महत्वपूर्ण है। यह जंगल में पेड़ों को बेतरतीब ढंग से आकार देता है और इस प्रकार ढेर में परस्पर अतुलनीय सेटों की संख्या पर निर्भरता को जटिल बनाता है। मुझे कुछ संदेह है कि जटिलता को ठीक नहीं किया जा सकता है (हमें तुलना करना जारी रखना होगा जब तक कि हम एक तुलनीय तत्व को नहीं मारते हैं) मुझे कुछ याद हो सकता है, इसलिए मैं इसे खुला छोड़ रहा हूं।
नोट: ऑर्डर करना आंशिक है और जबकि इसके लिए एक रैखिक विस्तार को परिभाषित करने के तरीके हैं, टाइमस्टैम्प जोड़ना और द्वितीयक मानदंड के रूप में इसका उपयोग करना उनमें से एक नहीं है। मान लीजिए हम टाइमस्टैम्प सौंपा प्रत्येक के लिए एक और आदेश परिभाषित ≼ ' के रूप में एक ≼ ' ख iff एक ≼ ख या ( ख ⋠ एक और टी ( एक ) ≤ टी ( ख ) । तो फिर लगता है हम अलग है एक , ख, , जैसे कि टी ( एक ) ≤ टी ( ख ) ≤ टी ( ग ) और सी ≤ एक । फिर एक ≼ ' ख और ख ≼ ' ग , लेकिन ग ≼ ' एक है, इसलिए संबंध सकर्मक नहीं है और इसलिए सभी को एक एक आदेश नहीं है। इस तरह का विस्तार केवल कमजोर आदेशों के लिए काम करता है, लेकिन आंशिक रूप से नहीं।
संपादित करें: मुझे एहसास हुआ कि न केवल किसी भी सेट को परिभाषित करने के लिए अनंत है, लेकिन मुझे वास्तव में कतार में वर्तमान में कुशलता से तत्वों को प्राप्त करने में सक्षम होने की आवश्यकता है। इसलिए मैं अब इस बात पर विचार कर रहा हूं कि क्या कुछ सामान्य ढेर संरचना में उपप्रकार वाले विशेष नोड्स को जोड़ने से मदद मिलेगी।