पीक (डेटा प्रकार ऑपरेशन)

कंप्यूटर विज्ञान में, पीक कुछ अमूर्त डेटा प्रकारों पर एक संचालन है, विशेष रूप से अनुक्रमिक संग्रह (अमूर्त डेटा प्रकार) जैसे स्टैक (अमूर्त डेटा प्रकार) और क्यू (अमूर्त डेटा प्रकार), जो संग्रह से तत्व को हटाए बिना संग्रह के शीर्ष ("सामने") का मान देता है। इस प्रकार यह "पॉप" या "डीक्यू" जैसे संचालन के समान मान देता है, लेकिन डेटा को संशोधित नहीं करता है।

"पीक" नाम स्टैक पर मूल "पुश" और "पॉप" संचालन के समान है, लेकिन इस संचालन का नाम डेटा प्रकार और भाषा के आधार पर भिन्न होता है। पीक को सामान्य रूप से डेटा जोड़ने और हटाने के अधिक आधारिक संचालन की तुलना में एक अनावश्यक संचालन माना जाता है, और जैसे कि इन डेटा प्रकारों की मूल परिभाषा में सम्मिलित नहीं है। हालाँकि, चूंकि यह एक उपयोगी संचालन है और सामान्य रूप से आसानी से प्रयुक्त किया जाता है, इसे प्रायः अभ्यास में सम्मिलित किया जाता है, और कुछ परिभाषाओं में पीक को आधारभूत के रूप में सम्मिलित किया जाता है, पॉप (या एनालॉग) को पीक के संदर्भ में परिभाषित किया जाता है; अमूर्त परिभाषा देखें।

डेटा प्रकार
अनुक्रमिक प्रकार जिसके लिए प्रायः पीक को प्रयुक्त किया जाता है इसमें सम्मिलित हैं: एकल-एंडेड प्रकार, जैसे स्टैक, सामान्य रूप से केवल एक पीक स्वीकार करते हैं, एंड में जो संशोधित होता है। डबल-एंडेड प्रकार, जैसे डीक्यू, प्रत्येक एंड पर दो पीक स्वीकार करते हैं।
 * स्टैक (अमूर्त डेटा प्रकार)
 * क्यू (अमूर्त डेटा प्रकार)
 * प्राथमिकता क्यू (जैसे हीप (डेटा संरचना))
 * डबल-एंडेड क्यू (डीक्यू)
 * डबल-एंडेड प्राथमिकता क्यू (डीईपीक्यू)

पीक के लिए नाम अलग-अलग होते हैं। स्टैक के लिए "पीक" या "टॉप" सामान्य हैं, जबकि क्यू के लिए "फ्रंट" सामान्य है। डीक्यू पर संचालन के अलग-अलग नाम होते हैं, प्रायः "फ्रंट" और "बैक" या "फर्स्ट" और "लास्ट" होते है। पीक" नाम भी कभी-कभी "टॉप, सममित" के अर्थ में पाया जाता है, हालांकि यह प्रक्रिया "पीक" के लिए वर्तनी त्रुटि के रूप में भी होता है।

अमूर्त परिभाषा
सामान्य रूप से, पीक पॉप के समान मान देता है, लेकिन डेटा को परिवर्तित नहीं करता है। संग्रह खाली होने पर गतिविधि भिन्न होती है - प्रायः यह एक खाली संग्रह पर एक पॉप के समान एक अंडरफ्लो (अधः संचार) त्रुटि उत्पन्न करता है, लेकिन कुछ कार्यान्वयन एक फ़ंक्शन प्रदान करते हैं जो बदले में (त्रुटि के बिना) अनिवार्य रूप से प्रयुक्त करते हैं

इस गतिविधि को विभिन्न तरीकों से सिद्ध किया जा सकता है। उदाहरण के लिए, स्टैक का एक सामान्य वीडीएम (वियना विकास पद्धति) विवरण शीर्ष (पीक) को परिभाषित करता है और एटॉमिक के रूप में हटाता है, जहां टॉप (शीर्ष), टॉप मान देता है (स्टैक को संशोधित किए बिना), और स्टैक को संशोधित करता है (बिना मान दिए)। इस स्थिति में पॉप को टॉप और हटाने के संदर्भ में परिभाषित किया गया है।

वैकल्पिक रूप से, दिए गए पॉप, संचालन पीक को स्वयंसिद्ध किया जा सकता है:
 * peek(D) = pop(D)
 * peek(D), D = D

जिसका अर्थ है 'पॉप के समान मान देता है', और अंतर्निहित डेटा को नहीं बदलता है (पीक के बाद डेटा का मान पहले जैसा ही होता है)।

कार्यान्वयन
पॉप संचालन के एक साधारण संस्करण द्वारा पीक को सामान्य रूप से ओ (1) समय और कोई अतिरिक्त स्थान नहीं लेते हुए सामान्य रूटीन में बहुत आसानी से प्रयुक्त किया जा सकता है। अधिकांश अनुक्रमिक डेटा प्रकारों को एक डेटा संरचना द्वारा कार्यान्वित किया जाता है जिसमें एक संदर्भ (कंप्यूटर विज्ञान) अंत तक होता है, और इस प्रकार पीक को संदर्भित ऑपरेटर द्वारा कार्यान्वित किया जाता है। हालांकि कुछ स्थितियों में यह अधिक जटिल है।

कुछ डेटा प्रकारों के लिए, जैसे कि स्टैक, इसे अधिक आधारिक संचालन के संदर्भ में दोहराया जा सकता है, लेकिन अन्य डेटा प्रकारों जैसे कि क्यूज़ के लिए, यह नहीं हो सकता। यहां तक ​​​​कि यदि अन्य संचालनों के संदर्भ में पीक को पुनरावृत जा सकता है, तो इसे अलग से प्रयुक्त करना लगभग सदैव अधिक उपयुक्त होता है, क्योंकि यह डेटा को संशोधित करने से बचता है, और इसे प्रयुक्त करना आसान होता है, क्योंकि इसमें पॉप के समान मान प्रतिकृत होता है (या अनुरूप संचालन), लेकिन फिर डेटा को संशोधित नहीं कर रहा है।

स्टैक, प्राथमिकता क्यू, डीक्यू और डीईपीक्यू प्रकारों के लिए, पीक को पॉप और पुश के संदर्भ में प्रयुक्त किया जा सकता है (यदि एक ही एंड पर किया जाता है)। स्टैक और डीक्यू के लिए यह सामान्य रूप से उपयुक्त है, क्योंकि अधिकांश कार्यान्वयन में ये संचालन ओ (1) हैं, और मेमोरी आवंटन की आवश्यकता नहीं है (क्योंकि वे डेटा के आकार को कम करते हैं) - डीक्यू के दो एंड में से प्रत्येक स्टैक के रूप में कार्य करता है। प्राथमिकता क्यू और डीईपीक्यू के लिए, हालांकि, डीक्यूइंग और एनक्यूइंग में प्रायः ओ (लॉग एन) समय लगता है (उदाहरण के लिए यदि बाइनरी हीप के रूप में प्रयुक्त किया जाता है), जबकि ओ (1) पीक का प्रदर्शन (यहां सामान्य रूप से  फाइंड-मिन  या  फाइंड-मैक्स  कहा जाता है) प्राथमिकता क्यू की एक प्रमुख वांछित विशेषता है, और इस प्रकार पीक को लगभग सदैव अलग से प्रयुक्त किया जाता है।

क्यू के लिए, क्योंकि एनक्यूइंग और डीक्यूइंग विपरीत एंड(सिरे) पर होते हैं, पीक को आधारिक संचालन के संदर्भ में प्रयुक्त नहीं किया जा सकता है, और इस प्रकार प्रायः इसे अलग से प्रयुक्त किया जाता है।

एक स्थिति जिसमें पीक साधारण नहीं है, एक स्व-संतुलन बाइनरी सर्च ट्री द्वारा कार्यान्वित एक आदेशित सूची प्रकार (अर्थात, तत्वों को क्रम में अभिगम्य किया जा सकता है) में है। इस स्थिति में फाइंड-मिन या फाइंड-मैक्स ओ (लॉग एन) समय लेते हैं, जैसा कि किसी अन्य तत्व तक पहुंचता है। फाइंड-मिन या फाइंड-मैक्स ओ (1) समय बनाना न्यूनतम या अधिकतम मानों को कैश करके किया जा सकता है, लेकिन यह डेटा संरचना और तत्वों को जोड़ने या हटाने के संचालन के लिए ओवरहेड जोड़ता है।

संदर्भ

 * Horowitz, Ellis: "Fundamentals of Data Structures in Pascal", Computer Science Press, 1984, p. 67