यह एक सबसे कम-संचालन चुनौती है जहां उद्देश्य सबसे कम उलटफेर का उपयोग करके एक वेक्टर को आरोही क्रम में क्रमबद्ध करना है। आपका एल्गोरिथ्म केवल "सब-वेक्टर रिवर्सल" 1 का उपयोग करके वेक्टर को सॉर्ट कर सकता है , लेकिन यह अंकगणितीय ऑपरेशनों, लूप्स, चेकिंग के लिए अन्य ऑपरेशंस का उपयोग कर सकता है यदि यह सॉर्ट किया गया है आदि । सब-वेक्टर रिवर्सल की संख्या जो आपके एल्गोरिदम निष्पादित करता है, उसका स्कोर है।
1 एक "उप-वेक्टर उत्क्रमण":
- वेक्टर में संख्याओं का चयन करें, और उस श्रेणी के तत्वों को उल्टा करें।
एक सरल उदाहरण देने के लिए, यदि आप वेक्टर से शुरू करते हैं {4,3,2,1}
, तो आप इसे कई तरीकों से सॉर्ट कर सकते हैं:
- पूरे वेक्टर को उलट दें। यह स्पष्ट रूप से सबसे छोटा दृष्टिकोण है क्योंकि इसके लिए केवल एक उलट की आवश्यकता होती है:
{4,3,2,1} -> {1,2,3,4}
- आप बबल सॉर्ट का एक संस्करण कर सकते हैं, जिसमें 6 रिवर्सल की आवश्यकता होती है:
{4,3,2,1} -> {3,4,2,1} -> {3,2,4,1} -> {2,3,4,1} -> {2,3,1,4} -> {2,1,3,4} -> {1,2,3,4}
- आप पहले 3 तत्वों के साथ शुरू कर सकते हैं, फिर तीन अंतिम, और अंत में दो पहले और दो अंतिम, जिसमें 4 स्वैप की आवश्यकता होती है:
{4,3,2,1} -> {2,3,4,1} -> {2,1,4,3} -> {1,2,4,3} -> {1,2,3,4}
- ... और इसी तरह। उपलब्ध विकल्पों की एक अनंत राशि है (यदि आप चाहें तो किसी भी ऑपरेशन को दोहरा सकते हैं)।
नियम और आवश्यकताएं:
100 नंबर वाली सूची के लिए आपका कोड एक मिनट से भी कम समय में समाप्त होना चाहिए। आप स्वयं इसे समय दे सकते हैं, लेकिन कृपया मेला 2 खेलें ।
आपको अपने द्वारा किए गए सभी स्वैप के आरंभ और अंत सूचक को संग्रहीत करना होगा, ताकि समाधान सत्यापित हो सके। (मैं समझाता हूं कि इसका क्या मतलब है नीचे)।
कोड निर्धारक होना चाहिए।
आप अपने इच्छित फॉर्मेट पर इनपुट ले सकते हैं: न्यूमेरिक वेक्टर, लिंक्ड-लिस्ट, लंबाई के साथ एरे ... जो भी आपको पसंद हो।
आप वेक्टर की एक कॉपी पर जो चाहें कर सकते हैं । जिसमें अलग-अलग उलटने का प्रयास करना और जांचना शामिल है जो सबसे अधिक कुशल है। ब्रूट-फोर्सिंग पूरी तरह से ठीक है, लेकिन समय सीमा के लिए छड़ी।
स्कोर 5 टेस्ट वैक्टर के लिए फ़्लिप की कुल संख्या है। टाई-ब्रेकर की तारीख पर मुहर लगेगी।
उदाहरण:
4 1 23 21 49 2 7 9 2 | प्रारंभिक वेक्टर / सूची 4 1 2 9 7 2 49 21 23 | (2, 8) (सूचक 2 और 8 के बीच तत्वों को फ़्लिप किया) 4 1 2 2 7 9 49 21 23 | (३, ५) 4 1 2 2 7 9 23 21 49 | (६,,) 4 1 2 2 7 9 21 23 49 | (६, 49 ) २ २ १ ४ 2 ९ २१ २३ ४ ९ | (०, ३) १ २ २ ४ 1 ९ २१ २३ ४ ९ | (0, 2)
स्कोर 6 होगा, क्योंकि आपने 6 उलटफेर किए। आपको एक उपयुक्त प्रारूप पर दाईं ओर सूचीबद्ध इंडिक्स को स्टोर (प्रिंट नहीं) करना चाहिए जो सत्यापन उद्देश्यों के लिए आसानी से प्रिंट / आउटपुट किया जा सकता है।
टेस्ट वैक्टर:
133, 319, 80, 70, 194, 333, 65, 21, 345, 142, 82, 491, 92, 167, 281, 386, 48, 101, 394, 130, 111, 139, 214, 337, 180, 24, 443, 35, 376, 13, 166, 59, 452, 429, 406, 256, 133, 435, 446, 304, 350, 364, 447, 471, 236, 177, 317, 342, 294, 146, 280, 32, 135, 399, 78, 251, 467, 305, 366, 309, 162, 473, 27, 67, 305, 497, 112, 399, 103, 178, 386, 343, 33, 134, 480, 147, 466, 244, 370, 140, 227, 292, 28, 357, 156, 367, 157, 60, 214, 280, 153, 445, 301, 108, 77, 404, 496, 3, 226, 37
468, 494, 294, 42, 19, 23, 201, 47, 165, 118, 414, 371, 163, 430, 295, 333, 147, 336, 403, 490, 370, 128, 261, 91, 173, 339, 40, 54, 331, 236, 255, 33, 237, 272, 193, 91, 232, 452, 79, 435, 160, 328, 47, 179, 162, 239, 315, 73, 160, 266, 83, 451, 317, 255, 491, 70, 18, 275, 339, 298, 117, 145, 17, 178, 232, 59, 109, 271, 301, 437, 63, 103, 130, 15, 265, 281, 365, 444, 180, 257, 99, 248, 378, 158, 210, 466, 404, 263, 29, 117, 417, 357, 44, 495, 303, 428, 146, 215, 164, 99
132, 167, 361, 145, 36, 56, 343, 330, 14, 412, 345, 263, 306, 462, 101, 453, 364, 389, 432, 32, 200, 76, 268, 291, 35, 13, 448, 188, 11, 235, 184, 439, 175, 159, 360, 46, 193, 440, 334, 128, 346, 192, 263, 466, 175, 407, 340, 393, 231, 472, 122, 254, 451, 485, 257, 67, 200, 135, 132, 421, 205, 398, 251, 286, 292, 488, 480, 56, 284, 484, 157, 264, 459, 6, 289, 311, 116, 138, 92, 21, 307, 172, 352, 199, 55, 38, 427, 214, 233, 404, 330, 105, 223, 495, 334, 169, 168, 444, 268, 248
367, 334, 296, 59, 18, 193, 118, 10, 276, 180, 242, 115, 233, 40, 225, 244, 147, 439, 297, 115, 354, 248, 89, 423, 47, 458, 64, 33, 463, 142, 5, 13, 89, 282, 186, 12, 70, 289, 385, 289, 274, 136, 39, 424, 174, 186, 489, 73, 296, 39, 445, 308, 451, 384, 451, 446, 282, 419, 479, 220, 35, 419, 161, 14, 42, 321, 202, 30, 32, 162, 444, 215, 218, 102, 140, 473, 500, 480, 402, 1, 1, 79, 50, 54, 111, 189, 147, 352, 61, 460, 196, 77, 315, 304, 385, 275, 65, 145, 434, 39
311, 202, 126, 494, 321, 330, 290, 28, 400, 84, 6, 160, 432, 308, 469, 459, 80, 48, 292, 229, 191, 240, 491, 231, 286, 413, 170, 486, 59, 54, 36, 334, 135, 39, 393, 201, 127, 95, 456, 497, 429, 139, 81, 293, 359, 477, 404, 129, 129, 297, 298, 495, 424, 446, 57, 296, 10, 269, 350, 337, 39, 386, 142, 327, 22, 352, 421, 32, 171, 452, 2, 484, 337, 359, 444, 246, 174, 23, 115, 102, 427, 439, 71, 478, 89, 225, 7, 118, 453, 350, 109, 277, 338, 474, 405, 380, 256, 228, 277, 3
मुझे पूरा यकीन है कि एक इष्टतम समाधान एनपी-हार्ड है (चूंकि नियमित पैनकेक छँटाई है)।
2 हाँ, एक मिनट की समय सीमा के कारण बहुत तेज़ कंप्यूटर वाले लोगों को लाभ हो सकता है। बहुत चर्चा के बाद मुझे लगा कि अगर हर कोई अपनी बेंचमार्किंग करता है तो यह सबसे तेज़ कोड चुनौती नहीं है।
n-1
? मैं केवल 50 के निचले हिस्से को साबित कर सकता हूं।