タグ付けされた質問 「combinatorics」

組み合わせ論と離散数学構造に関する質問

3
通常言語の単語数
ウィキペディアによると、任意の正規言語のためにLLLが存在定数λ1,…,λkλ1,…,λk\lambda_1,\ldots,\lambda_k及び多項式p1(x),…,pk(x)p1(x),…,pk(x)p_1(x),\ldots,p_k(x)ようにすべてのための数長さのワードの満たす方程式nnnsL(n)sL(n)s_L(n)nnnLLL sL(n)=p1(n)λn1+⋯+pk(n)λnksL(n)=p1(n)λ1n+⋯+pk(n)λkn\qquad \displaystyle s_L(n)=p_1(n)\lambda_1^n+\dots+p_k(n)\lambda_k^n。 言語は正規です(一致します)。 IFF Nも、そしてあるそれ以外の場合。L={02n∣n∈N}L={02n∣n∈N}L =\{ 0^{2n} \mid n \in\mathbb{N} \}(00)∗(00)∗(00)^*sL(n)=1sL(n)=1s_L(n) = 1sL(n)=0sL(n)=0s_L(n) = 0 しかし、私はと見つけることができません(これらは存在する必要があります)。以下のよう微分可能である必要がありかつ一定ではないが、それは何らかの形で波のように動作する必要があります、と私はあなたがおそらくのように加数の無限の数で終わることなく、多項式、指数関数であることを行うことができますどのように見ることができませんテイラー展開。誰でも私を啓発できますか?λiλi\lambda_ipipip_isL(n)sL(n)s_L(n)

1
数独パズルの効率的なエンコード
任意の9x9グリッドを指定するには、各正方形の位置と値を指定する必要があります。この単純なエンコーディングでは、81(x、y、value)トリプレットが得られ、x、y、および値ごとに4ビット(1-9 = 9値= 4ビット)が必要で、合計81x4x3 = 972ビットです。各正方形に番号を付けることにより、位置情報を7ビットに減らし、各正方形のビットと合計891ビットをドロップできます。所定の順序を指定することにより、合計324ビットの各値に対して、これを大幅に4ビットに減らすことができます。ただし、数独には数字が欠けている場合があります。これにより、指定する必要のある数字の数を減らすことができますが、位置を示すために追加のビットが必要になる場合があります。(位置、値)の11ビットエンコードを使用して、手がかりを持つパズルを指定できます。nnn11n11n11nビット、例えば最小(17)パズルには187ビットが必要です。私がこれまで考えた中で最良のエンコードは、各スペースに1ビットを使用して、それが満たされているかどうかを示し、そうであれば、次の4ビットが数値をエンコードすることです。これにはビットが必要で、最小パズルの場合は149()です。できれば有効な各数独セットアップのデータベースなしで、より効率的なエンコードがありますか?(パズルから一般的なに対処するためのボーナスポイント)81+4n81+4n81+4nn=17n=17n=17nnnN×NN×NN \times N 多くのパズルは別のパズルを回転させたり、数字の単純な並べ替えをしたりするということを思いつきました。おそらくそれは必要なビットを減らすのに役立つ可能性があります。 ウィキペディアによると、 古典的な9×9数独ソリューショングリッドの数は6,670,903,752,021,072,936,960(OEISのシーケンスA107739)、または約です。6.67×10216.67×10216.67×10^{21} 計算を正しく行った場合()、ルックアップテーブルの情報は73(72.498)ビットになります。ln(6,670,903,752,021,072,936,960)ln(2)ln(6,670,903,752,021,072,936,960)ln(2)\frac{ln{(6,670,903,752,021,072,936,960)}}{ln{(2)}} だが: 回転、反射、順列、再ラベル付けなどの対称性を考慮すると、本質的に異なるソリューションの数は、5,472,730,538 [15](OEISのシーケンスA109741)であることが示されました。 これにより33(32.35)ビットが得られるため、使用する順列を示す巧妙な方法で73ビット全体を下回る可能性があります。

3
文字列の切断に関する動的プログラミング演習
私はこの本から次の問題に取り組んできました。 特定の文字列処理言語は、文字列を2つの部分に分割する基本的な操作を提供します。この操作には元の文字列のコピーが含まれるため、カットの位置に関係なく、長さnの文字列に対してn単位の時間がかかります。今、文字列を多くの部分に分割したいとします。休憩が行われる順序は、合計実行時間に影響を与える可能性があります。あなたがた位置に20文字の文字列をカットしたい場合たとえば、と、その後の位置に最初のカットを作り、負うの総コスト位置10をしている間、最初のより良いコスト持ち。3333 20 + 17 = 37 20 + 10 = 3010101033320 + 17 = 3720+17=3720 + 17 = 3720 + 10 = 3020+10=3020 + 10 = 30 カットが与えられ、ストリングを個にカットする最小コストを見つける動的プログラミングアルゴリズムが必要です。m + 1mmmm + 1m+1m +1

8
アルゴリズムセットのカーディナリティ
議論の誰かが、特定の問題に取り組むための少なくとも連続した数の戦略が存在する可能性があると考えています。特定の問題は取引戦略(アルゴリズムではなく戦略)でしたが、それは私の質問の要点の横にあると思います。 これにより、一連のアルゴリズムの基数について考えるようになりました。私は少し探していましたが、何も思いつきませんでした。チューリングマシンは有限のアルファベットセットで動作し、テープはインデックス付け可能でなければならず、したがってカウント可能でなければならないため、数え切れないほどの数のアルゴリズムを持つことは不可能だと考えてきました。私の集合論は確かに錆びているので、私の推論が有効であるかどうかは確かではなく、おそらくそれを証明することはできないでしょうが、それは興味深い考えです。 アルゴリズムのセットの基数は何ですか?

1
不等価なバイナリ行列の構築
要素0または1を使用して、すべての非等価行列(または必要に応じて)を構築しようとしています。等価行列を与える操作は、iおよびj行とiおよびj列の同時交換です。 。例えば。for8×88×88\times 8n×nn×nn\times n1↔21↔21\leftrightarrow2 ⎛⎝⎜001010010⎞⎠⎟〜⎛⎝⎜100001100⎞⎠⎟(000011100)〜(101000010)\begin{equation} \left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \end{array} \right) \sim \left( \begin{array}{ccc} 1 & 0 & 1 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{array} \right) \end{equation} 最終的には、各クラス内に等価なマトリックスがいくつあるかをカウントする必要がありますが、Polyaのカウント定理はそれを行うことができると思います。今のところ、各非等価クラスに1つのマトリックスを構築するアルゴリズム的な方法が必要です。何か案は?

1
Knuth、de Bruijn、Riceの「植えられた平面の木の平均高さ」(1972)
私はタイトルの古典的な論文を基本的な手段(生成関数、複雑な解析、フーリエ解析なし)だけで導き出そうとしていますが、精度はずっと低くなっています。要するに、私は、「のみ」を証明したいと平均高さhnhnh_nを有するツリーのnnnのノード(すなわち、葉へのルートからノードの最大数)を満たすのhn∼πn−−−√hn∼πnh_n \sim \sqrt{\pi n}。 AnhAnhA_{nh}hhhAnh=AnnAnh=AnnA_{nh} = A_{nn}B N H N H + 1件のB N H = A N N - A nは、H、H 、N = S N / A N N S N S N = Σ H ⩾ 1 H (A N H - A N 、H - 1)= Σ …

6
間隔内の2つの数値の最大XORを見つける:二次式よりも良いことはできますか?
lllrrr L ≤ I 、最大(I ⊕ J )最大(私⊕j)\max{(i\oplus j)}L ≤ I 、J ≤ Rl≤私、j≤rl\le i,\,j\le r ナイーブアルゴリズムは、考えられるすべてのペアを単純にチェックします。たとえば、ルビーでは次のようになります。 def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j > max) max = i ^ j end end end max end 私感私たちはより良い次より行うことができます。この問題のためのより良いアルゴリズムはありますか?

1
異なる通常言語の数
アルファベット与えΣ = { a 、b }Σ={a,b}\Sigma = \{ a,b \}られた場合、nnn非決定的有限オートマトンで受け入れられる正規言語はいくつありますか? 例として、考えてみましょうn = 3n=3n=3。次に、2182182^{18}異なる遷移構成と23232^3異なる開始状態および終了状態の構成があるため、2242242^{24}異なる言語の上限があります。 ただし、これらの多くは同等であり、そのテストはPSPACE-Completeであるため、各設定をテストすることはおそらく実行不可能です。 特定のリソースで受け入れられるさまざまな言語の数を制限する他の手段または組み合わせの引数はありますか?

2
通常のエキスパンダーグラフを実際に構築する方法は?
n個の頂点のいくつかの小さな固定d(3または4など)のd正規展開グラフを作成する必要があります。 これを実際に行う最も簡単な方法は何ですか?エキスパンダーとして証明されているランダムなd-regularグラフの作成? また、拡張子であるマルグリス構造とラマヌジャングラフ、およびジグザグ製品を使用した構造についても読みました。ウィキペディアでは、わかりやすいが非常に短い概要を示しています。http://en.wikipedia.org/wiki/Expander_graph#cite_note-10 しかし、実際にはどの方法を選択しますか 私にとって、これらの方法はすべて実装が非常に複雑で、特に理解が難しく、非常に具体的であると思われます。d-regularエキスパンダーグラフのシーケンスを実際に生成するための、おそらく置換などに基づいた簡単な方法はありませんか? d-regular二部展開エキスパンダーグラフを作成する方が簡単でしょうか? 別の質問もあります:不良なd-regularエキスパンダーのファミリーはどうですか?そのような概念は理にかなっていますか?エクスパンダの意味で可能な限り悪いd-regularグラフ(もちろん接続されている)のファミリを構築できますか? 前もって感謝します。

2
2つの最長パスごとに少なくとも1つの頂点が共通であることを証明する
グラフが接続されており、長さが超えるパスがない場合、長さの2つのパスごとに少なくとも1つの頂点が共通であることを証明します。 k G kGGGkkkGGGkkk その共通の頂点は両方のパスの中間にあるべきだと思います。これが当てはまらない場合、長さパスを持つことができるためです。私は正しいですか?> k>k>k

2
バイナリツリーの証明には、最大で葉があります
ノードを持つ二分木が最大で葉を持っていることを証明しようとしています。誘導でこれを行うにはどうすればよいですか?nnn⌈ n個2⌉⌈n2⌉\left\lceil \frac{n}{2} \right\rceil ヒープに関する最初の質問でフォローしていた人々のために、それはここに移動されました。

2
ランダムにマルチセットの2つの拡散した混乱した順列を生成する効率的なアルゴリズム
バックグラウンド \newcommand\ms[1]{\mathsf #1}\def\msD{\ms D}\def\msS{\ms S}\def\mfS{\mathfrak S}\newcommand\mfm[1]{#1}\def\po{\color{#f63}{\mfm{1}}}\def\pc{\color{#6c0}{\mfm{c}}}\def\pt{\color{#08d}{\mfm{2}}}\def\pth{\color{#6c0}{\mfm{3}}}\def\pf{4}\def\pv{\color{#999}5}\def\gr{\color{#ccc}}\let\ss\grnnnビー玉の同一のバッチが2つあるとします。各大理石はccc色のいずれかです(c≤nc≤nc≤n。してみましょうninin_i色のビー玉の数表すiii各バッチでを。 ましょうSS\msSマルチセットである{1,…,1n1,2,…,2n2,…,1c,…,cnc}{1,…,1⏞n1,2,…,2⏞n2,…,1c,…,c⏞nc}\small\{\overbrace{\po,…,\po}^{n_1},\;\overbrace{\pt,…,\pt}^{n_2},\;…,\;\overbrace{\vphantom 1\pc,…,\pc}^{n_c}\}は1つのバッチを表します。で周波数表現、SS\msSまた、のように書くことができる(1n12n2…cnc)(1n12n2…cnc)(\po^{n_1} \;\pt^{n_2}\; … \;\pc^{n_c})。 \ msSの異なる順列の数はSS\msS、多項式によって与えられます: |SS|=(nn1,n2,…,nc)=n!n1!n2!⋯nc!=n!∏i=1c1ni!.|SS|=(nn1,n2,…,nc)=n!n1!n2!⋯nc!=n!∏i=1c1ni!.\left|\mfS_{\msS}\right|=\binom{n}{n_1,n_2,\dots,n_c}=\frac{n!}{n_1!\,n_2!\cdots n_c!}=n! \prod_{i=1}^c \frac1{n_i!}. 質問 ランダムに\ msSの 2つの拡散した混乱した順列PPPおよびQを生成する効率的なアルゴリズムはありますか?(分布は均一でなければなりません。)QQQSS\msS 順列PPPある拡散すべての異なる要素の場合iiiのPPPのインスタンスiiiで略均等に離間されているPPP。 たとえば、\ msS =(\ po ^ 4 \; \ pt ^ 4)= \ {\ po、\ po、\ po、\ po、\ pt、\ pt、\ pt、\ pt \}と仮定しますS=(1424)={1,1,1,1,2,2,2,2}S=(1424)={1,1,1,1,2,2,2,2}\msS=(\po^4\;\pt^4)=\{\po,\po,\po,\po,\pt,\pt,\pt,\pt\}。 {1,1,1,2,2,2,2,1}{1,1,1,2,2,2,2,1}\{\po, \po, \po, \pt, \pt, \pt, …

1
ボールのペアでビンを埋める
少なくともボールが含まれるビンは、fullと呼ばれます。私たちの目標は、できるだけ多くのビンをいっぱいにすることです。kkk 最も単純なシナリオでは、ボールが与えられ、それらを任意に配置できます。その場合、明らかにできることは、 binを任意に選択し、それぞれにボールを入れることです。nnn⌊n/k⌋⌊n/k⌋\lfloor n/k \rfloorkkk 次のシナリオに興味があります組のボールが与えられます。各ペアの2つのボールを2つの異なるビンに入れる必要があります。その後、敵が来て、各ペアから1つのボールを削除します。削除後に最大数のフルビンを確保するにはどうすればよいですか?nnn 簡単な戦略は、ビンのペアを選択することです。各ビンのペアをボールペアで満たします(各ビンにはボールがあり、各ペアから1つのボールがあります)。次に、敵が何を削除したかに関係なく、各ビンペアに少なくとも1つのフルビンがあります。⌊n/(2k−1)⌋⌊n/(2k−1)⌋\lfloor n/(2k-1) \rfloor2k−12k−12k-12k−12k−12k-1 より多くのフルビン()を達成する戦略はありますか?⌊n/(2k−1)⌋⌊n/(2k−1)⌋\lfloor n/(2k-1) \rfloor

2
BSTでの検索時に可能な検索パスの数
次の質問がありますが、答えはありません。私の方法が正しいかどうか私は感謝します: Q.バイナリサーチツリーでキー値60を検索すると、キー値10、20、40、50、70、80、90を含むノードが、必ずしも指定された順序で移動されるわけではありません。これらのキー値が、値60を含むルートノードからの検索パスで発生する可能性のある順序はいくつありますか? (A)35(B)64(C)128(D)5040 質問から、与えられたすべてのノードをトラバーサルに含める必要があり、最終的にキー60に到達する必要があることを理解しています。たとえば、そのような組み合わせの1つは次のようになります。 10、20、40、50、90、80、70、60。 上記のすべてのノードをトラバースする必要があるため、10または90から開始する必要があります。20から開始すると、10に到達しません(60> 20であり、20の右サブツリーをトラバースするため)。 同様に、80から始めることはできません。90に到達できないためです。80> 60なので、80の左のサブツリーをトラバースし、90に到達しません。 残りのノードは20、40、50、70、80、90です。次のノードは20または90のいずれかです。前述の同じ理由で他のノードを取得することはできません。 同様に考えると、各レベルで2つの選択肢があります。ノードは7つあるため、最初の6つには2つの選択肢があり、最後の1つには選択肢がありません。だから完全にあります 2∗2∗2∗2∗2∗2∗12∗2∗2∗2∗2∗2∗12*2*2*2*2*2*1順列= = 6426262^6646464 これは正解ですか? そうでない場合、より良いアプローチは何ですか? 一般化したいと思います。場合ノードが次に与えられる合計の可能な検索パスは次のようになり2 n − 1nnn2n−12n−12^{n-1}

3
5カードのポーカーハンドを表す
カードのデッキは52です。手札は52枚の5枚のカードです(重複はできません)。 5カードのハンドを表すための最小ビット数はどれくらいですか? ハンドは順序に依存しません(KQ = QK)。64329 = 96432 はい、52ビットを使用できます。それは任意の数のカードの手札を表すことができます。 ハンドがちょうど5枚のカードであるとすると、52ビット未満でそれを表す方法があります。 1枚のカードは6ビット= 64で表すことができます。したがって、6ビット* 5カード= 30ビットを使用できます。しかし、それは順序に依存します。私は単にソートすることができ、これはうまくいくはずです。うまくいかない場合はお知らせください。 32ビット以下のキーを取得し、5カードのタプルをソートする必要がない方法はありますか? これはポーカーシミュレーション用であり、ソーティングはハンドを生成するだけの場合に比べてオーバーヘッドが大きくなります。両手の相対値を持つ辞書がある場合、それは2つの単純な検索と2つの手の値を比較する比較です。最初にハンドをソートする必要がある場合、2つのルックアップと比較と比較すると、それは大きいです。シミュレーションでは数百万を比較します。シミュレーションからソートされた手を取得しません。52 51 50 49 48の前の52 51 50 49 48のように並べ替えは単純ではありません。 2598960の可能な5カードの手があります。それが行数です。キーは5枚のカードです。カードを最初にソートする必要がない32ビット以下のキーを取得したいと考えています。 多くの人が結ぶほどリストを注文することはできません。スーツはスペード、クラブ、ダイヤ、ハートです。7c 8c 2d 3d 4s = 7s 8s 2c 3c 4h。多くの絆があります。 次のステップは64ビットで、キーのサイズを2倍にするのではなく、ソートのヒットになります。 私はテストしSortedSet<int> quickSort = new SortedSet<int>() { i, j, k, m, n };て操作の時間を2倍にしましたが、それでも実行できます。 より複雑になります。ボートを5対2で表すことができる必要があります(22255)。そのため、それらを並べ替えると壊れます。あなたが言うつもりですが、それは速いです。はい、それは速くてささいなことですが、私はできるだけ速くする必要があります。 受け入れられた回答のC#: …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.