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

3
配列をインターリーブするためのインプレースアルゴリズム
要素の配列が与えられます2n2n2n a1,a2,…,an,b1,b2,…bna1,a2,…,an,b1,b2,…bna_1, a_2, \dots, a_n, b_1, b_2, \dots b_n タスクは、結果の配列が次のようになるようにインプレースアルゴリズムを使用して配列をインターリーブすることです b1,a1,b2,a2,…,bn,anb1,a1,b2,a2,…,bn,anb_1, a_1, b_2, a_2, \dots , b_n, a_n インプレース要件がなければ、新しい配列を簡単に作成し、要素をコピーして時間アルゴリズムを提供できます。O(n)O(n)\mathcal{O}(n) インプレース要件では、分割統治アルゴリズムはアルゴリズムを上げ。θ(nlogn)θ(nlog⁡n)\theta(n \log n) 質問は次のとおりです。 あるその場でもあり、時間アルゴリズムは、?O(n)O(n)\mathcal{O}(n) (注:均一コストのWORD RAMモデルを想定できるため、インプレースはスペース制限に変換されます)。O(1)O(1)\mathcal{O}(1)

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

2
難しいこと:並べ替えられたデッキをシャッフルするか、シャッフルされたデッキを並べ替えるのですか?
異なる要素の配列があります。あなたは(ブラックボックス関数は、2つの要素取るコンパレータへのアクセス権を持つとし、trueを返す)とビット真にランダムソース(ブラックボックス関数は、引数を取ることなく、独立して、均一にランダムビットを返します)。次の2つのタスクを検討してください。nnnaaabbba&lt;ba&lt;ba < b 配列は現在ソートされています。一様に(またはほぼ一様に)ランダムに選択された順列を生成します。 配列は、本質的にランダムに均一に選択されたいくつかの順列で構成されています。ソートされた配列を作成します。 私の質問は どのタスクが漸近的により多くのエネルギーを必要としますか? 情報理論、熱力学、またはこの質問に答えるために必要な他のものとの関係について十分に知らないため、質問をより正確に定義することはできません。しかし、質問は明確に定義できると思います(そして、誰かがこれで私を助けてくれることを願っています!)。 今、アルゴリズム的に、私の直感は、それらが等しいということです。すべての並べ替えは逆のシャッフルであり、逆もまた同様です。ソートにはが必要からランダムな順列を選択するため、シャッフル中の比較選択、が必要ランダムビット。シャッフルとソートの両方に、約スワップが必要です。logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nn!n!n!logn!≈nlognlog⁡n!≈nlog⁡n\log n! \approx n \log nnnn しかし、ランダウアーの原理を応用した答えが必要だと感じています。それは、少し「消す」ためにエネルギーが必要だと言っています。直感的に、これは配列のソートがより困難であることを意味すると思います。なぜなら、低エネルギー、高エントロピーの基底状態の乱れから高度に秩序化された状態への情報の「消去」ビットが必要だからです しかし一方で、任意の計算では、並べ替えは1つの順列を別の順列に変換するだけです。私はここでは完全な非専門家なので、物理学とのつながりを知っている人がこれを「分類」するのを手伝ってくれることを望んでいました!nlognnlog⁡nn \log n (質問はmath.seで回答を得られなかったので、ここに再投稿しています。それでいいのです。)

1
ソートに関する興味深い問題
番号付きのボール(ランダム)が付いたチューブを考えます。チューブにはボールを取り除くための穴があります。1つの操作について次の手順を検討してください。 穴から1つまたは複数のボールを選択し、ボールを選択した順序を覚えておくことができます。 パイプを左側に傾けて、パイプ内の残りのボールが左側に移動し、ボールを取り除いてできた空のスペースを占有する必要があります。 番号の付いたボールをパイプから選んだ順序を変更することは想定されていません。ここで、ボールの動きによって作成された空いているスペースを使用して、再びパイプに戻します。 手順1〜3は1つの操作と見なされます。 番号の付いたボールを昇順に並べ替えるのに必要な最小限の操作を見つけます。 例:チューブに次が含まれる場合:[1 4 2 3 5 6][1 4 2 3 5 6][1\ 4\ 2\ 3\ 5\ 6] 次にととを取り出し、パイプを左に傾けるとを取得し、パイプの最後にをこの順序で挿入して取得します。444555666[1 2 3][1 2 3][1\ 2\ 3](4 5 6)(4 5 6)(4\ 5\ 6)[1 2 3 4 5 6][1 2 3 4 5 6][1\ 2\ 3\ 4\ 5\ 6] …

2
要素が正確にインデックス±Mでない順列のカウント
私は最近、アルゴリズムのインタビューでこの問題を尋ねられ、解決できませんでした。 NとMの2つの値が与えられた場合、長さNの順列の数を数えなければなりません(1からNまでの数を使用)。順列の任意の数と順列のその位置の絶対差がMと等しくないようにします。 例-N = 3かつM = 1の場合、1 2 3および3 2 1は有効な順列ですが、数字3は位置2にあり、それらの差は= Mであるため、1 3 2は無効です。 NxM Dynamicプログラミングを試しましたが、繰り返しをカウントしない繰り返しを作成できませんでした。

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
パターンデータベースへのインデックス作成-Korfの最適ルービックキューブソリューション
楽しいプロジェクトとして、Richard KorfのC#実装-パターンデータベースを使用したルービックキューブの最適解の検索に取り組んでいます。 https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf 私は実際にそれを働いています、私は私のソリューションを改善しようとしています。 Korfが彼の論文で注目していることの1つは、パターンデータベースに格納してインデックスを付ける方法です。理想的には、ルービックキューブのインスタンスを使用して配列へのインデックスを生成したいと思います。 私の質問は、このインデックスを生成する最良の方法についてです。 私の解決策は、最小限の完全なハッシュを生成することです。これには、パターンデータベース全体が見つかるまですべてのキューブをメモリに保持し、それに基づいて最小限の完全なハッシュを生成することが含まれます。MPHの実行には、パターンデータベースのサイズに応じて数時間かかりますが、ディスクに保存するので、一度だけ実行する必要があります。結局、MPHだけを格納しているキューブ自体を捨てることができます。このようにして、ランダム化されたルービックキューブを取得し、パターンを適用してから、MPHで配列のインデックスを調べて、解の長さの見積もりを取得します。 KorfとShultzは、「Large Scale Breadth-First Search」と呼ばれる2005年の論文でキューブのインデックスを決定するためのより良い方法を説明していると思います。 https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf このペーパーでは、順列の辞書式順序に基づいてインデックスを生成するアルゴリズムについて説明します。基本的に、順列{1、2、3}を取得し、それがインデックス0で最小であることを計算できます。{1、3、2}は、次のインデックス1などです。 このアルゴリズムをルービックキューブに適用してパターンデータベース内のインデックスを取得できるように思えますが、実際にどのように機能するかを理解するのに苦労しています。 たとえば、コーナーのみのパターンデータベースには、エッジステッカーが外されたすべてのルービックキューブが含まれています。このセットには正確に88,179,840のキューブがあります。ルービックキューブのコーナーキューブは、24の異なる状態のいずれかになります。8番目のコーナーキューブの状態は他の7つに基づいて計算できるため、コーナーのみのパターンデータベースのキューブはそれぞれ0〜23の7つの値を持っています。 たとえば、{0、3、6、9、9、12、15、18、21}は、すべてのエッジステッカーが削除された「解決済み」キューブを定義します。 前面を90度回転すると、順列は{0、3、11、23、12、15、8、20}になります。 これらの種類の順列からインデックスを取得する方法はありますか?

2
最適な順序を見つける
私はこの問題に遭遇し、それに取り組む方法を見つけるのに苦労しています。どんな考えでも大歓迎です! たとえば、行列 -1、0、1が与えられているとします。{−1,0,1}n × k{−1,0,1}n × k\{-1, 0, 1\}^{n\ \times\ k} ⎡⎣⎢⎢⎢⎢⎢⎢1−10−11001−101010000010−11−11− 1⎤⎦⎥⎥⎥⎥⎥⎥[1010−1−100010110−1−1−10111000−1]\begin{bmatrix} 1 & 0 & 1 & 0 & -1 \\ -1 & 0 & 0 & 0 & 1 \\ 0 & 1 & 1 & 0 & -1 \\ -1 & -1 & 0 & 1 …

2
コインフリップコンパレーターを使用するときにランダムな順列を返す「並べ替え」アルゴリズムはありますか?
標準の検索アルゴリズムで使用されるコンパレーターが公平なコインフリップで置き換えられたときに実行時間が変更されるかどうかを質問者が知りたいというこの質問と、Microsoftの均一な順列ジェネレーターの書き込みの顕著な失敗に触発されて、私の質問はこうです: コンパレータの実装に応じて、比較に基づく並べ替えアルゴリズムはありますか? 真のコンパレータを使用する場合、要素を並べ替えられた順序で返します(つまり、比較は、標準の並べ替えアルゴリズムで期待されることを行います) コンパレーターが公正なコインフリップで置き換えられたときに、要素の一様にランダムな順列を返します(つまりx &lt; y = true、xとyの値に関係なく、確率1/2で返します)。 並べ替えアルゴリズムのコードは同じでなければなりません。変更が許可されるのは、比較「ブラックボックス」内のコードのみです。

3
配列内の各要素のより小さな要素の数を効率的に見つける
私はこの問題に行き詰まっています: 最初の自然数の配列がランダムに並べ替えられると、配列が構築され、 はよりも小さいからまでの要素数になります。。 n B B (k )A (1 )A (k − 1 )A (k )AAAnnnBBBB(k)B(k)B(k)A(1)A(1)A(1)A(k−1)A(k−1)A(k-1)A(k)A(k)A(k) i)が与えられれば、時間でを見つけることができますか? ii)が与えられた場合、を時間で見つけることができますか?B O (n )B A O (n )AAABBBO(n)O(n)O(n)BBBAAAO(n)O(n)O(n) ここで、です。具体的な例: | A 8 4 3 1 7 2 9 6 5 B 0 0 0 0 3 1 6 4 4 |B(1)=0B(1)=0B(1) = 0∣∣∣AB804030107321966454∣∣∣|A843172965B000031644|\begin{vmatrix} …

1
現代の正規表現の表現力
私は最近、主に単語のグループを特別なプロパティと照合する正規表現の課題を提案するWebサイトについて友人と話し合いました。彼は||||||||、数|が素数であるような文字列に一致する正規表現を探していました。そのような言語は、通常であれば、補題をポンプの翻訳が素数のためにあるという事実与えますので、私はすぐにそれが今まで動作しません彼に言われた十分な大きさ、それが存在するのk ≤ pがあるようP + N kは、すべての主要ですN ≥ - 1、よく、これは全くケースしにくい(素数の配分、そのような未知の自明とプロパティを破砕、...)pppk≤pk≤pk \leq pp+nkp+nkp + nkn≥−1n≥−1n \geq -1 しかし、誰かが解決策に付属している:一致しない(||+?)\1+ キャプチャグループに一致するように、この表現しようとする(つまりすることができ||、|||、||||などの上の出現箇所)のn ≥ 2回。一致する場合、文字列で表される数はkで割り切れるので、素数ではありません。それ以外の場合です。k≥2k≥2k \geq 2|n≥2n≥2n \geq 2kkk そして、グループ化と後方参照により、正規表現が理論的な意味で...正規表現よりも実際にはるかに表現力豊かになることが明らかになったので、私は愚かに感じました。今では、実際の正規表現を実行するときに私が知らなかったルックアラウンドやその他の演算子も追加されました。 ウィキペディアによると、文脈自由文法によって生成された言語よりもさらに表現力があります。だからここに私の質問があります: 現代の正規表現エンジンを使用して、(文脈自由文法から生成された)代数言語を表現できますか より一般的な説明、または現代の正規表現で説明できる言語の種類の複雑さの少なくとも上限はありますか? より実用的には、その背後に深刻な理論がありますか、それとも有限オートマトンに基づく実際の正規表現の最初のブロックに実装可能と思われるたびに新しい機能を追加するだけですか? 「モダンな正規表現」は質問が具体的ではないことを知っていますが、少なくとも後方参照を使用することを意味します。もちろん、この「現代の正規表現」言語に対する特定の制限を想定している部分的な回答者がいる場合は、遠慮なく投稿してください。

1
順列の空間を探す
n個のオブジェクトと、これらのn個のオブジェクトのn個の順列のセット(合計n個の順列のうち)が与えられます。本当の根本的な順列があり、それはn個の順列のセットの1つであると私は知っていますが、どの順列かはわかりません。しかし、神託者は真の順列を知っています。真の順列を見つけるために、2つのオブジェクト間のペアワイズ比較のためにオラクルをクエリすることができます(真の順列ではbの前にaがありますか?)。 素朴な戦略は、バイナリ検索(すべての段階で順列の半分を排除する「正しい」ペアワイズ比較の質問をする)を行い、log nステップで真の順列を見つけることです。私の質問は、これはいつでもできるのですか?または、O(log n)クエリでは不十分なような、順列の敵対的なセットを見つけることができますか? 編集: 例:オブジェクトが1、2、3、4であるとします。順列のセットは{1243、2341、1342、3412}です。私は本当の順列を知りません。「本当の順列では2は4の前ですか?」と尋ねます。神託はイエスを返します。だから私は最初の2つの順列の間でそれを知っています。次に、「真の順列では1は3の前ですか?」と尋ねます。真の順列を見つけるために。

2
順列のハミング距離の代替
私は2つの文字列を持っていますが、一方は他方の順列です。必要な置換の最小数を見つける代わりに、文字列aから文字列bに移動するのに必要な最小数の転座を見つけるハミング距離の代替案があるかどうか疑問に思いました。 私の文字列は常に同じサイズで、エラーや置換がないことを知っています。 例: 1 2 3 4 5 3 2 5 4 1 これは私に2つを与えるでしょう: 3 2 5 4 1 (start) -&gt; 3 2 1 4 5 -&gt; -&gt; 1 2 3 4 5 これがすでにRに実装されている場合は、さらに良いでしょう。

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