นี่เป็นรูปแบบที่พบได้ทั่วไปสำหรับการเรียงลำดับอัลกอริทึม:
def sort(l):
while not is_sorted(l):
choose indices i, j
assert i < j
if l[i] > l[j]:
l[i], l[j] = l[j], l[i]
ขั้นตอนวิธีการเหล่านี้ทำงานได้ดีเพราะดัชนีi
และได้รับการแต่งตั้งอย่างรอบคอบบนพื้นฐานของรัฐของรายการj
l
อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าเรามองไม่เห็นl
และต้องเลือกสุ่มสี่สุ่มห้า เราจะเรียงลำดับรายการได้เร็วแค่ไหน?
l
ความท้าทายของคุณคือการเขียนฟังก์ชั่นที่ผลคู่แบบสุ่มของดัชนีได้รับเพียงความยาวของ โดยเฉพาะคุณต้องเอาท์พุทสองดัชนีด้วยi, j
0 <= i < j < len(l)
ฟังก์ชั่นของคุณควรทำงานกับความยาวของรายการใด ๆ แต่จะได้คะแนนในรายการความยาว 100
คะแนนของคุณคือจำนวนตัวเลือกดัชนีเฉลี่ยที่จำเป็นในการเรียงลำดับรายการสับแบบสุ่มอย่างสม่ำเสมอตามรูปแบบด้านบนซึ่งดัชนีจะถูกเลือกตามฟังก์ชั่นของคุณ
ฉันจะให้คะแนนการส่งโดยใช้จำนวนตัวเลือกดัชนีเฉลี่ยมากกว่า 1,000 ครั้งในรายการที่มีการสับแบบสุ่มที่มีความยาว 100 โดยไม่มีการป้อนซ้ำ
ฉันขอสงวนสิทธิ์ในการเรียกใช้การทดลองน้อยลงหากการส่งนั้นชัดเจนไม่ใช่การแข่งขันหรือไม่ยุติลงและฉันจะทำการทดลองเพิ่มเติมเพื่อแยกความแตกต่างของคู่แข่งชั้นนำเพื่อค้นหาผู้ชนะคนเดียว หากการส่งยอดนิยมหลายรายการยังคงอยู่ภายในระยะขอบของข้อผิดพลาดที่ขีด จำกัด ของทรัพยากรการคำนวณของฉันฉันจะประกาศผู้ชนะการส่งก่อนหน้านี้จนกว่าจะสามารถนำทรัพยากรการคำนวณอื่น ๆ มาใช้ได้
นี่คือตัวอย่างโปรแกรมการให้คะแนนใน Python:
import random
def is_sorted(l):
for x in range(len(l)-1):
if l[x] > l[x+1]:
return False
return True
def score(length, index_chooser):
steps = 0
l = list(range(length))
random.shuffle(l)
while not is_sorted(l):
i, j = index_chooser(length)
assert (i < j)
if l[i] > l[j]:
l[i], l[j] = l[j], l[i]
steps += 1
return steps
ฟังก์ชั่นของคุณอาจไม่รักษาสถานะที่ไม่แน่นอนใด ๆ โต้ตอบกับตัวแปรทั่วโลกส่งผลกระทบต่อรายการl
อื่น ๆ ฟังก์ชั่นของคุณการป้อนข้อมูลจะต้องมีความยาวของรายการl
และจะต้องส่งออกคู่ได้รับคำสั่งของจำนวนเต็มในช่วง[0, len(l)-1]
(หรือที่เหมาะสมสำหรับภาษาของคุณ การจัดทำดัชนีรายการ) อย่าลังเลที่จะถามว่ามีบางอย่างได้รับอนุญาตในความคิดเห็นหรือไม่
การส่งอาจเป็นภาษาที่ใช้งานฟรี โปรดรวมสายรัดเกณฑ์การให้คะแนนหากยังไม่ได้โพสต์สำหรับภาษาของคุณ คุณสามารถโพสต์คะแนนชั่วคราว แต่ฉันจะแสดงความคิดเห็นด้วยคะแนนอย่างเป็นทางการ
การให้คะแนนคือจำนวนขั้นตอนเฉลี่ยในรายการที่เรียงลำดับในรายการที่มีการสับแบบสุ่มที่มีความยาว 100 โชคดี