मैं एक समारोहहास्केल: रैखिक समय में एक क्रमपरिवर्तन को उलटने के लिए, केवल सूचीबद्ध करता
invert :: [Int] -> [Int]
कि मानता है कि अपने इनपुट [0..(n-1)]
का क्रमपरिवर्तन है, और उसके प्रतिलोम देता है परिभाषित करना चाहते हैं का उपयोग कर। क्या कोई इसे केवल सूचियों और tuples (बिना सरणी के) का उपयोग कर परिभाषित कर सकता है ताकि यह रैखिक समय में चलता है?
यह मुख्य रूप से अकादमिक हित से बाहर है; वास्तविक कोड में मैं Array
या STArray
या इसी तरह का उपयोग कर सकता हूं।
आप एक क्रमचय के विपरीत है क्या व्याख्या कर सकते हैं सूची? – Tarrasch
तार्रास, यहां एक नज़र डालें: http://mathworld.wolfram.com/InversePermutation.html – Kenji
मुझे यह प्रश्न पसंद है, लेकिन मुझे विश्वास है कि ओ (एन) में ऐसा करना संभव नहीं है। एक सीधी विधि को सॉर्टिंग की आवश्यकता होती है। यदि हास्केल ने ओ (1) अनुक्रमण और संलग्न करने का समर्थन किया है, तो यह संभव होगा। 'डेटा.लिस्ट' में कई ऑपरेशन ओ (एन) हैं, इसलिए हम दक्षता के मामले में बहुत सीमित हैं। – Kenji