バックグラウンド
これを書いている時点で、NPの問題対Pは、まだ未解決のですが、聞いたことがあるかもしれませんノルベルト・ブルム社の新しい紙、すでにされてP!= NP、その主張を証明誤っていると疑われる(しかし、我々が表示されます)。
この論文で議論する問題はクリーク問題です。少なくとも新聞記事でそれを読んでいるので、間違っている場合は修正してください。しかし、いずれにしても、次のバリエーションを解決するプログラムを書いてほしいです。
タスク
たくさんの生徒がいる大きな学校があると仮定します。これらの各生徒には、この学校に何人かの友人がいます。生徒のクリークは、お互いのメンバーと友達である生徒だけから成るグループです。
あなたのプログラムは、入力として友人である学生のペアを受け取ります。この情報から、プログラムは最大のクリークのサイズを見つけなければなりません。学生は整数IDで識別されます。
数学用語を好む場合、これは、それぞれが2つのノードで識別される無向グラフのエッジを与えられることを意味します。
入力
入力は、正の整数ペアの空でないリストになります(例:)[[1,2],[2,5],[1,5]]
。この入力は、たとえば、配列の配列、それぞれ2つの数値を含むテキスト行など、適切な形式で入力できます。
出力
予想される出力はn >= 2
、最大のクリークのサイズである単一の数値です。上記の入力例で3
は、すべての生徒(1
、2
および5
)が互いに友達であるため、結果はになります。
テストケース
[[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])
他のテストケースの結果を確認するために、この(愚かな)参照実装(-d
フラグ付きの追加出力を出力)を使用できます。
ルール
- プログラムは、無効な入力に対して定義された結果を必要としません。だから、あなたはそれを仮定することができます:
- 常に少なくとも1組のIDを取得します
- 各ペアは2つの異なるIDで構成されます
- ペアは2回表示されません(IDの場所を入れ替えても同じペアになります)
- アルゴリズムでは、入力サイズの上限を設定できません。純粋に技術的な制限と言語/環境によって設定された制限(スタックサイズ、計算時間など)は、もちろん避けられません。
- 標準的な抜け穴は禁止されています。
- これはcode-golfであるため、バイト単位で測定された最短のコードが優先されます。
- アルゴリズムが多項式時間の複雑さを持って
-1
いる場合、コードサイズに関係なくすぐにスコアリングしますが、その場合は、ソリューションを別の場所に送信することができます。;)