İşte algoritmaları sıralamak için oldukça yaygın bir model:
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]
Bu algoritmalar iyi çalışır çünkü indeksler i
ve j
listenin durumuna göre dikkatlice seçilir l
.
Ancak, göremedik l
ve körü körüne seçmek zorunda kalsaydık? Listeyi ne kadar hızlı sıralayabiliriz?
Zorluğunuz, sadece uzunluğu göz önüne alındığında, rastgele bir indeks çifti veren bir fonksiyon yazmaktır l
. Özellikle, çıkış iki endeksleri, zorunluluk i, j
ile 0 <= i < j < len(l)
. İşleviniz herhangi bir liste uzunluğu üzerinde çalışmalıdır, ancak 100 uzunluk listesinde puanlanacaktır.
Skorunuz, indekslerin fonksiyonunuza göre seçildiği, yukarıdaki desene göre, rastgele rastgele karıştırılmış bir listeyi sıralamak için gerekli ortalama indeks seçenekleri sayısıdır.
Başvuruları puanlayacağım, tekrarlanan girişler olmadan 100 rastgele bir şekilde karıştırılmış 100 uzunluklu bir listede 1000 denemenin ortalama endeks seçeneği sayısını alacağım.
Gönderi açıkça rekabetçi değilse veya feshedilmezse daha az deneme yapma hakkımı saklıyorum ve en iyi rakipleri tek bir kazanan bulmak için farklılaştırmak için daha fazla deneme yapacağım. Hesaplama kaynaklarımın sınırında birden fazla en üst bildirim hata payı içinde kalırsa, daha fazla hesaplama kaynağı getirilinceye kadar kazananı daha önce bildireceğim.
İşte Python'da bir örnek puanlama programı:
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
İşleviniz, etkileşim küresel değişkenler, herhangi değişken durumunu korumak listesini etkilemeyebilir l
, vb Kişisel işlevin sadece giriş listesinin uzunlukta olmalıdır l
ve çıkış aralığında tamsayılar bir sipariş çifti gerekir [0, len(l)-1]
(veya dil yıllardan için mülk liste indeksleme). Yorumlarda bir şeye izin verilip verilmediğini sormaktan çekinmeyin.
Başvurular herhangi bir ücretsiz dilde olabilir. Eğer diliniz için henüz bir tane yayınlanmamışsa lütfen bir puanlama koşum takımı ekleyin Geçici bir puan gönderebilirsiniz, ancak resmi puanla bir yorum bırakacağım.
Puanlama, eşit olarak rastgele karıştırılmış uzunluk 100 listesinde sıralanmış bir listeye yapılan ortalama adım sayısıdır. İyi şanslar.