Arka fon
Bunu yazarken, P'ye karşı NP sorunu hala çözülmedi, ancak Norbert Blum'un P! = NP'nin zaten hatalı olduğundan şüphelenilen kanıtı olduğunu iddia eden yeni makalesini duymuş olabilirsiniz (ama göreceğiz).
Bu yazıda tartışılan sorun klik sorunudur . En azından bir gazete makalesinde okuduğum şey buydu, bu yüzden yanılıyorsam düzeltin, ancak her durumda, aşağıdaki değişkeni çözen bir program yazmanızı istiyorum:
Görev
Bir sürü öğrencimizle büyük bir okulumuz olduğunu varsayalım. Bu öğrencilerin her birinin bu okulda bazı arkadaşları var. Bir klik öğrencilerin sadece arkadaşsınız öğrencilerinden oluşan bir grup birbirlerine üyesi .
Programınıza girdi olarak arkadaş olan öğrenci çiftleri verilecektir. Bu bilgiden, programın en büyük kliğin boyutunu bulması gerekir . Öğrenciler tamsayı kimlikleri ile tanımlanır .
Matematiksel terimleri tercih ederseniz, bu, her biri iki düğüm tarafından tanımlanan, yönlendirilmemiş bir grafiğin kenarlarını beslediğiniz anlamına gelir.
Giriş
Girişiniz, boş bir pozitif tamsayı çifti listesi olacaktır, örn [[1,2],[2,5],[1,5]]
. Bu girişi herhangi bir mantıklı biçimde, örneğin bir dizi dizisi, her biri iki sayı içeren metin satırları vb.
Çıktı
Beklenen çıktı tek bir sayıdır n >= 2
: en büyük kliğin boyutu. Yukarıdaki örnek girdiyle, sonuç 3
tüm öğrenciler ( 1
, 2
ve 5
) birbirleriyle arkadaş oldukları için olur.
Test durumları
[[1,2]]
=> 2
[[1,2],[3,1],[3,4]]
=> 2
[[1,2],[2,5],[1,5]]
=> 3
[[2,5],[2,3],[4,17],[1,3],[7,13],[5,3],[4,3],[4,1],[1,5],[5,4]]
=> 4 (the largest clique is [1,3,4,5])
[[15,1073],[23,764],[23,1073],[12,47],[47,15],[1073,764]]
=> 3 (the largest clique is [23,764,1073])
[[1296,316],[1650,316],[1296,1650],[1296,52],[1650,711],[711,316],[1650,52],
[52,711],[1296,711],[52,316],[52,1565],[1565,1296],[1565,316],[1650,1565],
[1296,138],[1565,138],[1565,711],[138,1650],[711,138],[138,144],[144,1860],
[1296,1860],[1860,52],[711,1639]]
=> 6 (the largest clique is [52,316,711,1296,1565,1650])
Diğer sınama durumlarının sonuçlarını doğrulamak için bu (aptal) referans uygulamasını ( -d
bayrakla ek çıktılar basar ) kullanabilirsiniz .
Kurallar
- Programınız geçersiz girdilerde tanımlanmış bir sonuç gerektirmiyor. Yani bunu varsayabilirsin:
- her zaman en az bir çift kimlik alacaksınız
- her çift iki farklı kimlikten oluşur.
- hiçbir çift iki kez görünmüyor (ID yerlerinin değiştirilmesi yine aynı çift olacaktı)
- Algoritmanızın giriş boyutuna bir üst sınır koymasına izin verilmez. Tamamen teknik sınırlamalar ve dil / ortamınız tarafından belirlenen sınırlamalar (yığın boyutu, hesaplama süresi vb.) Elbette kaçınılmazdır.
- Standart boşluklar yasaktır.
- Bu kod golf , yani bayt cinsinden ölçülen en kısa kod kazanır.
- Algoritmanız polinom zaman karmaşıklığına sahipse
-1
, kod boyutunuzdan bağımsız olarak hemen puan alırsınız , ancak bu durumda çözümünüzü başka bir yere göndermek isteyebilirsiniz. ;)
-1
, iyi hak kazanmıştır ;)