タグ付けされた質問 「binary-matrix」

バイナリマトリックスを含む課題。バイナリ行列は、ブール値(0または1)のみを含む行列です。バイナリ行列の演算はブール代数で行われます。

4
直交循環行列のカウント
行列の2つの行は、それらの内積がゼロに等しい場合、直交します。すべての行が直交対毎ので行列を呼び出し、直交行列を。巡回行列は、各行ベクトルは、前の行ベクトルに対して右に一つの要素を回転させるものです。我々は唯一のエントリはどちらかである行列に興味があるだろう-1か1。 仕事 直交する循環行列n/2によってn2分間で(可能な限り)できるだけ多くの異なる数をカウントするコードを記述しますn。 入力 コードには入力がありません。n好きな値を試してみることができます。たとえば、コードは最小値からのn乗算のすべてを試行して、を試行することもできます。 4n = 2 出力 あなたが見つけた直交循環行列の数。また、コード自体にマトリックスを出力できるようにするための簡単なスイッチがコード内にあるはずです。 スコア あなたが見つけた循環行列の数。 ヒント 循環行列n/2による直交は、がの倍数または未満のn場合にのみ存在します。n4n4 直交循環行列の例は次のとおりです。 -1 1 -1 -1 -1 -1 1 -1 素朴なアプローチのヒント 最も単純なアプローチは、考えられるすべての行列を反復することです。これは、次の2つの観察を使用して高速化できます。 循環行列の直交性をテストするには、各行を最初の行と比較するだけです。これはサンプルコードに実装されています。 リンドンの単語を反復処理し、直交行列が見つかれば、可能な回転数を掛けることができます。これはまだテストされていないアイデアなので、バグがあるかもしれません。 サンプルコード これは非常にシンプルで素朴なpythonの答えです。を使用して実行しましたtimeout 120。 import itertools def check_orthogonal(row): for i in xrange(1,int(n/2)): if (sum(row[j]*row[(j+i) % n] for j in xrange(n)) != 0): return False …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.