Yerel squash kulübümde aşağıdaki şekilde çalışan bir merdiven var.
- Sezonun başında, kulübün her üyesinin adını ayrı bir satırda bir masa inşa ediyoruz.
- Daha sonra kazanılan oyunların sayısını ve her ismin yanında oynanan oyunların sayısını yazıyoruz (forma: oyuncu kazanır / oyun).
Böylece sezonun başında masa şöyle görünür:
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
Her iki oyuncuda bir oyuncu kazanabilir, bir oyuncu kazanır. Masanın altına en yakın olan oyuncu kazanırsa, oyuncuların konumu değiştirilir. Daha sonra her bir oyuncunun yanındaki galibiyet ve oyun sayısını güncelleyerek 2. adımı tekrar ediyoruz. Örneğin, Alice Billy'i yenerse,
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
Bu maçlar sezon boyunca devam eder ve sonunda oyuncuların yaklaşık güç sırasına göre listelenmesine neden olur.
Ne yazık ki, güncelleme oldukça tehlikeli bir şekilde gerçekleşir, bu nedenle hatalar yapılır. Aşağıda geçersiz tabloların bazı örnekleri verilmiştir, yani bazı başlangıç sırası (sezonun başında kullandığımız sırayı unuttuk) ve eşleşme ve sonuçların sırası için yukarıdaki adımları izleyerek doğru şekilde üretilemeyen tablolar:
Alice 0/1
Billy 1/1
Carol 0/1
Daffyd 0/0
Alice 2/3
Billy 0/1
Carol 0/0
Daffyd 0/0
Alice 1/1
Billy 0/2
Carol 2/2
Daffyd 0/1
Bir tablo verildiğinde, geçerli olup olmadığını nasıl etkili bir şekilde belirleyebiliriz? Aşağıdakileri not ederek başlayabiliriz:
Orijinal başlangıç sırasını unuttuğumuz için isimlerin sırası önemli değil.
Toplam kazanma sayısı, oynanan oyun sayısının toplamının yarısı kadar olmalıdır. (Bu, yukarıdaki ilk örneğin geçersiz olduğunu gösterir.)
- Tablonun geçerli olduğunu varsayalım. Sonra bir çoklu grafik var - birden fazla kenarı kabul eden, ancak hiçbir döngüyü kabul etmeyen bir grafik - her köşe bir oyuncuya karşılık gelir ve her kenar bir maç için oynanır. Daha sonra, her bir oyuncunun oynadığı toplam oyun sayısı, oyuncunun köşe karesinde derecesine karşılık gelir. Bu nedenle, uygun köşe derecelerine sahip bir çoklama yoksa, tablo geçersiz olmalıdır. Örneğin, bir derece derece birinci ve bir derece derece dereceli bir çoklu belge yoktur, bu nedenle ikinci örnek geçersizdir. [Böyle bir çoklu belgenin varlığını verimli bir şekilde kontrol edebiliriz.]
Bu nedenle, başlamak için uygulayabileceğimiz iki kontrol var, ancak bu yine de üçüncü örnek gibi geçersiz tablolara izin veriyor. Bu tablonun geçersiz olduğunu görmek için geriye doğru çalışabiliriz ve tablonun ortaya çıkması muhtemel tüm yollarını tüketiriz.
Bu karar problemini çözen birinin polinom zamanı (oyuncu sayısı ve oyun sayısı) algoritmasını düşünüp düşünmediğini merak ediyordum.