आप बस सूची में व्युत्क्रमों की संख्या गिन सकते हैं।
उलट देना
प्रकार के तत्वों के अनुक्रम में एक उलटा अनुक्रम अनुक्रम तत्वों की T
एक जोड़ी है जो कुछ <
सेट के आदेश के अनुसार क्रम से बाहर दिखाई देते हैं T
।
से विकिपीडिया :
औपचारिक रूप से, संख्याओं A(1), A(2), ..., A(n)
का एक क्रम हो n
।
तो i < j
और A(i) > A(j)
, फिर जोड़ी (i,j)
एक कहा जाता है उलट की A
।
एक अनुक्रम की व्युत्क्रम संख्या इसकी क्रमबद्धता का एक सामान्य उपाय है।
औपचारिक रूप से, व्युत्क्रम संख्या को व्युत्क्रम संख्या के रूप में परिभाषित किया जाता है, अर्थात
इन परिभाषाओं को स्पष्ट करने के लिए, उदाहरण अनुक्रम पर विचार करें 9, 5, 7, 6
। इस क्रम में व्युत्क्रम (0,1), (0,2), (0,3), (2,3)
और व्युत्क्रम संख्या है 4
।
यदि आप 0
और के बीच मान चाहते हैं 1
, तो आप उलटा संख्या को विभाजित कर सकते हैं N choose 2
।
इस स्कोर की गणना करने के लिए वास्तव में एक एल्गोरिथ्म बनाने के लिए कि किसी सूची को कैसे सॉर्ट किया जाता है, आपके पास दो दृष्टिकोण हैं:
दृष्टिकोण 1 (निर्धारक)
अपने पसंदीदा सॉर्टिंग एल्गोरिथ्म को संशोधित करें कि वह कितने आक्रमणों को ठीक कर रहा है, क्योंकि यह चलता है। हालांकि यह नैटिव है और आपके द्वारा चुने गए सॉर्टिंग एल्गोरिदम के आधार पर अलग-अलग कार्यान्वयन हैं, आप एक एल्गोरिथ्म के साथ समाप्त होंगे जो आपके द्वारा शुरू किए गए सॉर्टिंग एल्गोरिदम की तुलना में अधिक महंगा (जटिलता के संदर्भ में) नहीं है।
यदि आप इस मार्ग को लेते हैं, तो ध्यान रखें कि यह "स्वैप" की गिनती के रूप में सरल नहीं है। उदाहरण के लिए, मर्जसेर्ट सबसे खराब स्थिति है O(N log N)
, फिर भी यदि इसे अवरोही क्रम में क्रमबद्ध सूची में चलाया जाता है, तो यह सभी आक्रमणों को सही कर देगा N choose 2
। यह ऑपरेशन O(N^2)
में ठीक किए गए व्युत्क्रम हैं O(N log N)
। तो कुछ ऑपरेशनों को अनिवार्य रूप से एक बार में एक से अधिक उलटा सही करना होगा। आपको अपने कार्यान्वयन से सावधान रहना होगा। नोट: आप O(N log N)
इसे जटिलता के साथ कर सकते हैं , यह सिर्फ मुश्किल है।
संबंधित: क्रमपरिवर्तन में "व्युत्क्रम" की संख्या की गणना
दृष्टिकोण 2 (स्टोचस्टिक)
- बेतरतीब ढंग से नमूना जोड़े
(i,j)
, जहांi != j
- प्रत्येक जोड़ी के लिए, यह निर्धारित करें कि क्या
list[min(i,j)] < list[max(i,j)]
(0 या 1)
- इन तुलनाओं के औसत की गणना करें और फिर सामान्य करें
N choose 2
मैं व्यक्तिगत रूप से स्टोकेस्टिक दृष्टिकोण के साथ जाऊँगा जब तक कि आपको सटीकता की आवश्यकता न हो - यदि केवल इसलिए कि इसे लागू करना इतना आसान है।
यदि आप वास्तव में चाहते हैं, तो (सॉर्ट किए गए अवरोही z'
) के बीच एक मान ( ) -1
है 1
(सॉर्ट किया हुआ आरोही), आप बस ऊपर दिए गए मान को मैप कर सकते हैं ( z
), जो 0
(सॉर्ट किया हुआ आरोही) और 1
(सॉर्ट किया हुआ अवरोही) है, इस सूत्र का उपयोग करके इस सीमा तक। :
z' = -2 * z + 1