Tôi đã tính toán kích thước trung bình của mỗi người trong số 24 thùng hơn 100 thử nghiệm cho mỗi người trong số các thuật toán đề xuất ở đây. Tôi nghĩ rằng điều thú vị là ba trong số bốn dường như kết quả là trung bình 20010/24 mục mỗi thùng, nhưng phương pháp ngây thơ mà tôi mô tả hội tụ với mức trung bình đó một cách nhanh chóng nhất. Điều này làm cho một số cảm giác trực quan với tôi. Phương pháp đó giống như tuyết rơi ngẫu nhiên trên 24 thùng, và do đó có khả năng dẫn đến các thùng có kích thước xấp xỉ bằng nhau. Những người khác giống như hacking ngẫu nhiên ở độ dài của gỗ.
Bevan: [751, 845, 809, 750, 887, 886, 838, 868, 837, 902, 841, 812, 818, 774, 815, 857, 752, 815, 896, 872, 833, 864, 769, 894]
Gregory: [9633, 5096, 2623, 1341, 766, 243, 159, 65, 21, 19, 16, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
mjv: [895, 632, 884, 837, 799, 722, 853, 749, 915, 756, 814, 863, 842, 642, 820, 805, 659, 862, 742, 812, 768, 816, 721, 940]
peterallenwebb: [832, 833, 835, 829, 833, 832, 837, 835, 833, 827, 833, 832, 834, 833, 836, 833, 838, 834, 834, 833, 834, 832, 836, 830]
Và đây là đoạn code python: nhập khẩu ngẫu nhiên
N = 20010;
def mjv():
gaps = [ random.randrange(0, N) for i in range(0, 24) ]
gaps = gaps + [0, N]
gaps.sort()
value = [ gaps[i+1] - gaps[i] for i in range(0, 24) ]
return value
def gregory():
values = []
remainingPortion = N
for i in range(0, 23):
val = random.randrange(1, remainingPortion - (23 - i))
remainingPortion = remainingPortion - val
values.append(val)
values.append(remainingPortion)
return values
def peterallenwebb():
values = [0 for i in range(0, 24) ]
for i in range(0, N):
k = random.randrange(0, 24)
values[k] = values[k] + 1
return values
def bevan():
values = [];
sum = 0.0
for i in range(0, 24):
k = random.random()
sum = sum + k
values.append(k);
scaleFactor = N/sum
for j in range(0, 24):
values[j] = int(values[j] * scaleFactor)
return values
def averageBucketSizes(method):
totals = [0 for i in range(0, 24)]
trials = 100
for i in range(0,trials):
values = method()
for j in range(0, 24):
totals[j] = totals[j] + values[j]
for j in range(0, 24):
totals[j] = totals[j]/trials
return totals;
print 'Bevan: ', averageBucketSizes(bevan)
print 'Gregory: ', averageBucketSizes(gregory)
print 'mjv: ', averageBucketSizes(mjv)
print 'peterallenwebb: ', averageBucketSizes(peterallenwebb)
Hãy cho tôi biết nếu bạn thấy bất kỳ sai lầm. Tôi sẽ chạy lại.
Bạn có thể giải thích thêm một chút không? – BobbyShaftoe
Tôi nghĩ rằng ==> Lấy giá trị 20010 và chia ngẫu nhiên thành 24 giá trị riêng biệt, chẳng hạn như cộng chúng lại với nhau tạo thành giá trị ban đầu. – Gregory