คุณจะได้รับเป็นรายการหรือเวกเตอร์หรืออะไรก็ตามกลุ่มของ 3-tuples หรืออะไรก็ตามที่สองสิ่งแรกคือสตริงและสิ่งที่สามคือจำนวน สตริงคือเมืองและจำนวนคือระยะห่างระหว่างพวกเขา คำสั่งของเมืองในทูเปิลนั้นเป็นเรื่องที่ไม่มีกฎเกณฑ์ (เช่นไม่สำคัญว่าจะมาก่อนและมาเป็นอันดับที่สอง) เนื่องจากเป็นระยะทางเท่ากันในแต่ละวิธี นอกจากนี้ยังมีสิ่งอันดับหนึ่งสำหรับการอ้างอิงที่เชื่อมต่อแต่ละคู่ อาจไม่มีการเชื่อมต่อทุกเมือง นอกจากนี้ระยะทางยังเป็นบวกอยู่เสมอ (ไม่ใช่0
) คุณไม่จำเป็นต้องตรวจสอบเงื่อนไขเหล่านี้คุณอาจสันนิษฐานว่าอินพุตจะมีรูปแบบที่ดี งานของคุณคือคืนเมืองในลำดับวนรอบเช่นถ้าคุณเริ่มที่เมืองใดเมืองหนึ่งและวนรอบกลับไปที่เมืองเดียวกันระยะทางระหว่างเมืองจะน้อยที่สุด (อย่างแน่นอนและทั้งหมด กรณี) คุณอาจคิดว่ามีวิธีแก้ปัญหาอยู่ ตัวอย่างเช่นให้เราบอกว่าคุณได้รับ
[("New York", "Detroit", 2.2), ("New York", "Dillsburg", 3.7), ("Hong Kong", "Dillsburg", 4), ("Hong Kong", "Detroit", 4), ("Dillsburg", "Detroit", 9000.1), ("New York", "Hong Kong", 9000.01)]
คุณสามารถส่งออกใด ๆ ต่อไปนี้ (แต่คุณจะต้องส่งออกอย่างใดอย่างหนึ่ง):
["Detroit","Hong Kong","Dillsburg","New York"]
["Hong Kong","Dillsburg","New York","Detroit"]
["Dillsburg","New York","Detroit","Hong Kong"]
["New York","Detroit","Hong Kong","Dillsburg"]
["Dillsburg","Hong Kong","Detroit","New York"]
["New York","Dillsburg","Hong Kong","Detroit"]
["Detroit","New York","Dillsburg","Hong Kong"]
["Hong Kong","Detroit","New York","Dillsburg"]
เพราะเป็นการเดินทางที่สั้นที่สุด: 13.9
แต่ไม่
["Dillburg","Detroit","New York","Hong Kong"]
เพราะมันไม่ได้สั้นที่สุด
ดูen.wikipedia.org/wiki/Travelling_salesman_problem
เกณฑ์การให้คะแนน
นี่คือจุดที่น่าสนใจ คุณนำจำนวนตัวอักษรที่คุณมีแล้วเสียบเข้ากับสูตรตัวพิมพ์เล็กและตัวพิมพ์เล็กที่สุด ตัวอย่างเช่นสมมติว่าคุณเขียนโปรแกรมบังคับเดรัจฉานที่มีความยาว 42 ตัวอักษร ในฐานะที่เราทุกคนรู้ว่ากรณีที่เลวร้ายที่สุดคือn!
ที่n
เป็นจำนวนของเมือง 42! = 1405006117752879898543142606244511569936384000000000 นั่นคือคะแนนของคุณ ต่ำสุดชนะคะแนน
หมายเหตุ: หลังจากนั้นฉันก็โล่งใจเช่นกัน แต่ไม่แน่ใจว่าจะแก้ปัญหาอย่างไรและหวังว่าจะไม่มีใครสังเกตเห็น คนทำดังนั้นฉันจะไปกับข้อเสนอแนะของ issacg:
ตัวเลือกเดียวคือ O (n!) และ O (b ^ n n ^ a ln (n) ^ k) และขอบเขตทั้งหมดจะต้องแน่นเท่าที่จะทำได้เนื่องจากสัญกรณ์นั้น
O(n!)
และO(b^n*n^a*ln(n)^k)
และขอบเขตทั้งหมดจะต้องแน่นเป็นไปได้ที่ได้รับสัญกรณ์ OP ควรชี้แจง
O(n^2*2^n)
ซึ่งน้อยกว่าO(n!)
สำหรับ n ขนาดใหญ่
O(n!)
ไม่ใช่O(sqrt(n)*n^n/e^n)
หรือO(n!/100000000000000000000)
?