मानते हैं कि दूरी की गणना केवल स्वैप होती है, यहां क्रमिक क्रम पर चलने वाला एक विचार है, जो रैखिक समय में चलता है।
एल्गोरिदम का पहला चरण यह सुनिश्चित कर रहा है कि दो तार वास्तव में उनके चरित्र सामग्री में बराबर हैं। यह एक हैश तालिका (या एक निश्चित सरणी जो सभी वर्णमाला को कवर करता है) का उपयोग कर रैखिक समय में किया जा सकता है। यदि वे नहीं हैं, तो एस 2 को एस 1 का क्रमपरिवर्तन नहीं माना जा सकता है, और "स्वैप गिनती" अप्रासंगिक है।
दूसरा चरण एस 2 से एस 1 को बदलने के लिए आवश्यक न्यूनतम स्वैप की गणना करता है। यह क्रमपरिवर्तन पी का निरीक्षण करके किया जा सकता है जो एस 1 से एस 2 में परिवर्तन के अनुरूप है। उदाहरण के लिए, यदि s1 = "abcde" और s2 = "badce", तो p = (2,1,4,3,5), जिसका अर्थ है कि स्थिति 1 में तत्व # 2 है, स्थिति 2 में तत्व # 1, आदि शामिल है। क्रमिक समय में क्रमपरिवर्तन permutation cycles में तोड़ दिया जा सकता है। उदाहरण में चक्र (2,1) (4,3) और (5) हैं। न्यूनतम स्वैप गणना प्रति चक्र आवश्यक स्वैप की कुल गणना है। लम्बाई के चक्र को "इसे ठीक करने" के लिए के-1 स्वैप की आवश्यकता होती है। इसलिए, स्वैप की संख्या एन-सी है, जहां एन स्ट्रिंग लम्बाई है और सी चक्रों की संख्या है। हमारे उदाहरण में, परिणाम 2 है (स्वैप 1,2 और फिर 3,4)।
अब, वहाँ दो समस्याओं यहाँ हैं, और मुझे लगता है कि मैं भी उन्हें अभी हल करने के लिए थक गया हूँ :)
1) मेरे समाधान मानती है कि कोई चरित्र दोहराया है, जो हमेशा मामला नहीं है। स्वैप गिनती की गणना करने के लिए कुछ समायोजन की आवश्यकता है।
2) मेरा फॉर्मूला # मिनस्वाप्स = एन-सी को सबूत चाहिए ... मुझे इसे वेब में नहीं मिला।
स्रोत
2010-06-19 23:04:15
होमवर्क टैग, हो सकता है? – KevenK
ओह वाह, 110 प्रश्न, 3 उत्तर, और केवल 6 अपवॉट्स? – KevenK