コンピュータサイエンス

コンピュータサイエンスの学生、研究者、実務家のためのQ&A

2
再帰関係の変数の変更
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的コンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 現在、私はアルゴリズムの自己学習(CLRS)を行っており、再発関係を解決するために本で概説している特定の方法が1つあります。 この例では、次の方法を説明できます。再発があるとします T(n )= 2 T(n−−√)+ ログnT(n)=2T(n)+log⁡nT(n) = 2T(\sqrt n) + \log n 最初に、m = lg(n)の置換を行い、それを繰り返しに差し込んで取得します: T(2m)= 2 T(2m2)+ mT(2m)=2T(2m2)+mT(2^m) = 2T(2^{\frac{m}{2}}) + m ここまでは完全に理解しています。この次のステップは、私を混乱させるものです。 彼らは現在、再発を「名前変更」し、S (m )= T (2 m)とし、明らかにS(m )S(m)S(m)S(m )= T(2m)S(m)=T(2m)S(m) = T(2^m) S(m )= 2 S(m / 2 )+ mS(m)=2S(m/2)+mS(m) = 2S(m/2) + …


3
NFAのDFAが指数関数的な状態を持つことができることを証明するにはどうすればよいですか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的コンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 すべての非決定性有限オートマトンは、同等の決定性有限オートマトンに変換できます。ただし、確定的有限オートマトンでは、状態からポイントするシンボルごとに1つの矢印しか使用できません。したがって、その状態はNFAの状態のパワーセットのメンバーである必要があります。これは、DFAの状態の数がNFAの状態の数に関して指数関数的にスケーリングできることを示しているようです。しかし、私は実際にこれをどのように証明するのか疑問に思っていました。


1
マスター定理を使用する場合の仮定
マスター定理は、特定の種類の再発を解決するための美しいツールです。しかし、私たちはそれを適用するとき、しばしば不可欠な部分に光沢をつけます。たとえば、Mergesortの分析中は、 T(n)=T(⌊n2⌋)+T(⌈n2⌉)+f(n)T(n)=T(⌊n2⌋)+T(⌈n2⌉)+f(n)\qquad T(n) = T\left(\left\lfloor \frac{n}{2} \right\rfloor\right) + T\left(\left\lceil \frac{n}{2} \right\rceil\right) + f(n) に T′(n )= 2 T′(n2) +f(n )T′(n)=2T′(n2)+f(n)\qquad T'(n) = 2 T'\left(\frac{n}{2}\right) + f(n) のみを考慮します。Tは「うまく」動作するので、このステップが有効であること、つまりことを保証します。一般に、bを共通分母としてn = b kと仮定します。n = 2kn=2kn=2^kT∈ Θ (T′)T∈Θ(T′)T \in \Theta(T')TTTn=bkn=bkn=b^kbbb 悪質なを使用すると、この単純化を許可しない繰り返しを簡単に作成できfffます。たとえば、上記のTの繰り返しTTT\,/T′T′\,T'と f(n)={1n,n=2k,elsef(n)={1、n=2kn、他に\qquad f(n) = \begin{cases} 1 &, n=2^k \\ n &, \text{else} \end{cases} マスター定理を通常の方法で使用してを生成しΘ(n)Θ(n)\Theta(n)ますが、明らかにように成長するサブシーケンスがありますΘ(nlogn)Θ(nログ⁡n)\Theta(n …

1
split-ratioが
フォームの再発を解決する一般的な方法はありますか: T(n )= T(n − nc)+ T(nc)+ f(n )T(n)=T(n−nc)+T(nc)+f(n)T(n) = T(n-n^c) + T(n^c) + f(n) 以下のためのc&lt;1c&lt;1c < 1、又はより一般的に T(n)=T(n−g(n))+T(r(n))+f(n)T(n)=T(n−g(n))+T(r(n))+f(n)T(n) = T(n-g(n)) + T(r(n)) + f(n) ここで、g(n),r(n)g(n),r(n)g(n),r(n)の一部のサブ線形関数であるnnn。 更新:以下に提供されているリンクを確認し、Jeff Ericksonのメモに記載されているすべての再発関係を確認しました。この形式の再発については、どこでも説明していません。Akkra-Bazi法は、分割が分数の場合にのみ適用されます。痛烈な参照は評価されます。


3
離散対数を見つけるのはどれくらい難しいですか?
bbba c Nab=cmodNab=cmodNa^b=c \bmod NaaacccNNN これはどの複雑なグループ(例:古典的なコンピューターや量子コンピューター)で、どのタスク(アルゴリズム)がこのタスクを達成するのに最適なのでしょうか。 上記のウィキペディアのリンクは、実際に非常に具体的なランタイムを提供していません。私は、そのようなものを見つけるための最もよく知られている方法と同じようなものを望んでいます。

3
単純な有限正規言語のポンピング補題
ウィキペディアには、通常の言語のポンピング補題の次の定義があります... してみましょうLLL正規言語であること。次に、整数が存在するpppのみに依存≥1 LLLすべての文字列ようなwwwでLLL少なくとも長さのppp(pppとして「ポンピング長」と呼ばれる)を書き込むことができるwww = x yzxyzxyz(すなわち、www分割することができます3つの部分文字列に分割)、次の条件を満たす: | yyy | ≥1 | x yxyxy | ≤ ppp すべてのための私ii ≥0、x y私zxyizxy^iz ∈ LLL 単純な有限の通常の言語では、これがどのように満たされるかわかりません。{ }のアルファベットと正規表現a bがある場合、Lはaの後にb が続く1つの単語のみで構成されます。私は今、私の通常の言語がポンピング補題を満たしているかどうかを見たいです...a 、ba,ba,ba bababLLLaaabbb 私の正規表現では何も繰り返されないため、の値は空でなければならず、すべてのiに対して条件3が満たされます。しかし、もしそうなら、それはyの長さが少なくとも1でなければならないという条件1に失敗します!yyy私iiyyy 代わりに私が聞かせている場合どちらでも、BまたはB、それは条件1を満たしますが、それは実際に自分自身を繰り返したことがないので、条件3を失敗します。yyyaaabbba babab 私は明らかに気が遠くなるほど明らかな何かを見逃しています。どっち?

3
証明可能なほど高速なランダム化アルゴリズムに関するPの問題
PP\mathsf{P}kkkP T I M E(F (N ))F (N )DTIME(nk)⊊PTIME(nk)DTIME(nk)⊊PTIME(nk)\mathsf{DTIME}(n^k) \subsetneq \mathsf{PTIME}(n^k)PTIME(f(n))PTIME(f(n))\mathsf{PTIME}(f(n))f(n)f(n)f(n) ランダム性は\ mathsf {P}内で何かを購入しPP\mathsf{P}ますか? 明確にするために、単なる定数ではなく、差が漸近的である(できれば多項式ですが、多対数で解決する)ものを探しています。 最悪の場合、漸近的により良いアルゴリズムを探しています。期待される複雑さのアルゴリズムは、私が探しているものではありません。ZPPではなく、RPまたはBPPのようなランダム化アルゴリズムを意味します。

2
並列の複雑さの結果を絶えず多くのコアに縮小する方法は?
クラスNCによって与えられる「並列アルゴリズムによる効率的な解決」の複雑さの理論的見解を受け入れるのに問題がありました。 NCは、、プロセッサで時間並列アルゴリズムによって解決できる問題のクラスです。P (N )∈ O (N 、K)C 、K ∈ NO (ログcn )O(logc⁡n)O(\log^cn)p ( N )∈ O (Nk)p(n)∈O(nk)p(n) \in O(n^k)C 、K ∈ Nc,k∈Nc,k \in \mathbb{N} PRAMを想定できます。 私の問題は、これが「実際の」マシン、つまり有限量のプロセッサを備えたマシンについてあまり語っていないように見えることです。現在、プロセッサ上でプロセッサアルゴリズムを「効率的に」シミュレートできることが「わかっている」と言われています。のp ∈ NO (nk)O(nk)O(n^k)P ∈ Np∈Np \in \mathbb{N} ここで「効率的に」とはどういう意味ですか?これは民間伝承ですか、それともシミュレーションによって生じるオーバーヘッドを定量化する厳密な定理がありますか? 私が起こるのが怖いのは、シーケンシャルアルゴリズムと、プロセッサでシミュレートしたときに時間もかかる「効率的な」並列アルゴリズムを持つ問題があることです逐次アルゴリズムが漸近的に最適な場合、この粒度レベルの分析で期待できるのはすべてです)。この場合、私たちが見る限り、スピードアップはありません。実際、シミュレートされた並列アルゴリズムは、逐次アルゴリズムよりも遅い場合があります。つまり、私は境界(またはそのような結果がないことの宣言)よりも正確なステートメントを本当に探しています。p O (n k)O (nk)O(nk)O(n^k)pppO(nk)O(nk)O(n^k)OOO

4
欲張りアルゴリズムを使用して、指定されたシーケンスに最も近い非減少シーケンスを見つける方法は?
n個の整数すべてと間で与えられます。各整数下に、からまでの整数を書き込む必要がありますが非減少シーケンスを形成するという要件があります。そのようなシーケンスの偏差を定義します。実行時O(n \ sqrt [4] {l})で最小偏差を持つb_iを見つけるアルゴリズムを設計します。a1、… 、ana1,…,ana_1, \ldots, a_n000llla私aia_ib私bib_i000lllb私bib_iB I O (nは4 √最大(| a1− b1| 、…、 | an− bn| )max(|a1−b1|,…,|an−bn|)\max(|a_1-b_1|, \ldots, |a_n-b_n|)b私bib_iO (n l√4)O(nl4)O(n\sqrt[4]{l}) 正直に言って、この問題を解決する方法すら全くわかりません。動的プログラミングの質問のように見えますが、教授は貪欲なアルゴリズムを使用してこれを解決する必要があると言いました。誰かが小さなヒントを与えることで私を正しい方向に向けることができれば幸いです。

3
素数を法とする階乗を計算する最も効率的な方法は何ですか?
係数の後の階乗を効率的に計算するアルゴリズムを知っていますか? たとえば、私はプログラムしたい: for(i=0; i&lt;5; i++) sum += factorial(p-i) % p; しかし、p階乗を直接適用するための大きな数(素数)です。(p≤108)(p≤108)(p \leq 10^ 8) Pythonでは、このタスクは本当に簡単ですが、最適化の方法を知りたいのです。

2
アルゴリズムを記述し、それらを証明し、分析する方法は?
The Art of Computer Programming(TAOCP)を読む前に、これらの質問を深く考えたことはありません。擬似コードを使用してアルゴリズムを記述し、それらを理解し、成長の順序についてのみ実行時間を推定します。TAOCPは徹底的に私の心を変更します。 TAOCPは、ステップとgotoを組み合わせた英語を使用してアルゴリズムを説明し、フローチャートを使用してアルゴリズムをより簡単に描写します。低レベルのように見えますが、特にフローチャートにはいくつかの利点があることに気付きました。計算がその矢印をたどるときの現在の状態についてのアサーションで各矢印にラベルを付け、アルゴリズムの帰納的証明を行うことができます。著者は言う: 著者の主張は、図4で行われたように、すべてのアサーションが暗黙的に満たされた点に到達した場合にのみアルゴリズムが有効である理由を本当に理解しているということです。 私はそのようなことを経験していません。別の利点は、各ステップが実行される回数をカウントできることです。キルヒホッフの最初の法則で確認するのは簡単です。実行時間を正確に分析していないため、実行時間を推定するときに一部が省略された可能性があります。±1±1\pm1 成長の順序の分析は役に立たない場合があります。たとえば、クイックソートとヒープソートはすべてであるため区別できません。ここで、はランダム変数予想数です。したがって、定数を分析する必要があります。およびしたがって、と良い。また、場合によっては、分散などの他の量を比較する必要があります。実行時間の増加順序の大まかな分析だけでは十分ではありません。TAOCPとしてE(T(n))=Θ(nlogn)E(T(n))=Θ(nログ⁡n)E(T(n))=\Theta(n\log n)EXEバツEXXバツXE(T1(n))=A1nlgn+B1n+O(logn)E(T1(n))=A1nlg⁡n+B1n+O(ログ⁡n)E(T_1(n))=A_1n\lg n+B_1n+O(\log n)E(T2(n))=A2lgn+B2n+O(logn)E(T2(n))=A2lg⁡n+B2n+O(log⁡n)E(T_2(n))=A_2\lg n+B_2n+O(\log n)T1T1T_1T2T2T_2 アルゴリズムをアセンブリ言語に変換し、実行時間を計算します。私にとっては難しすぎるので、実行時間をもう少し大まかに分析するためのテクニックを知りたいと思います。これは、C、C ++または擬似コード。 そして、主に研究活動で使用されている記述スタイルと、これらの問題の処理方法を知りたいです。

1
SATローカル検索のデータ構造のサポート
WalkSATとGSATは、ブール充足可能性問題を解決するためのよく知られたシンプルなローカル検索アルゴリズムです。GSATアルゴリズムの擬似コードは、質問「GSATアルゴリズムの実装-反転するリテラルの選択方法」からコピーされています。以下に示します。 procedure GSAT(A,Max_Tries,Max_Flips) A: is a CNF formula for i:=1 to Max_Tries do S &lt;- instantiation of variables for j:=1 to Max_Iter do if A satisfiable by S then return S endif V &lt;- the variable whose flip yield the most important raise in the number of satisfied clauses; S …

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