コンピュータサイエンス

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

2
ソートされた文字列の辞書式順序で文字列のリストをソートする
LETアルファベット上の文字列の集合で合計に含まれていることをのシンボル。あAA{ 0 、… 、m − 1 }{0,…,m−1}\{0,\ldots,m-1\}んnn あなたの仕事は、各文字列を内部的にソートし、結果の文字列を辞書式順序でソートすることです。(アルゴリズムはこのように動作する必要はありません。) 例: 入力:33123 15 1 0 54215 21 12 出力:0 1 12 12 12333 12455 15 時間と空間でそれを行う方法を見つけました。O (m + n )O(m+n)O(m+n)O (m n )O(mn)O(mn) サイズ配列を作成し、すべてのセルに初期値を与えるような配列を使用しているため、スペースは時間よりも大きくなっています。んnnO (1 )O(1)O(1) 各文字列(時間とスペース)をソートするためにバケットソートを使用し、コレクション自体(時間とスペース)をソートするためにワードツリーを使用しました。しかし、私の解決策は複雑すぎます。O (m + n )O(m+n)O(m+n)あAAO (m + n )O(m+n)O(m+n)O (m n )O(mn)O(mn) 時間とより少ないスペース、またはより速い、より良いソリューションがありますか?O (m + n …

1
kxk正方グリッドグラフのツリー幅
私がグーグルで見つけたいくつかのスライドによると、任意の正方形グリッドグラフのツリー幅はです。ツリー幅とツリー分解について研究を始めたばかりで、ほとんどの場合それは理にかなっています。しかし、私は特に正方グリッドグラフのケースに興味がありますが、そのような幅の狭いグラフをツリー分解することがどのように可能であるかについて苦労してきました。k×kk×kk \times k GGGtw(G)=ktw(G)=ktw(G) = kk×kk×kk \times k (幅がである分解ツリーを確実にするために)以下のグループを持つ小さな正方形グリッドの分解ツリーを描画しようとするときに遭遇する問題の1つは、グラフが "循環的"であるため、コーナーノードは、ツリーの2つの反対側の端に表示されますが、2つの間のパス上のノードには表示されません。これは明らかに、分解ツリーのコヒーレンスプロパティに違反しています。これは、Wikipedia(ほとんどの場合よりも正確な定義)によると、次のとおりです。k+1k+1k+1kkk 場合、、及び(分解ツリー内の)ノード、及びあるからパス上にあるに、次いで 。XiXiX_{i}XjXjX_{j}XkXkX_{k}XkXkX_{k}XiXiX_{i}XjXjX_{j}Xi∩Xj⊆XkXi∩Xj⊆XkX_{i}\cap X_{j}\subseteq X_{k} 以下の場合の:私は2つのノードが含まれていると考えることができ(Iが有効であると信じるもの、または少なくとも)グラフ、唯一の有効な分解ツリーここで、ノードは左上隅から始まる行でラベル付けされています。3×33×33 \times 3{{1,2,3,4,6,7,8,9},{2,4,5,6,8}}{{1,2,3,4,6,7,8,9},{2,4,5,6,8}}\{\{1, 2, 3, 4, 6, 7, 8, 9\}, \{2, 4, 5, 6, 8\}\} 1 2 31 2 31\space2\space3 4 5 64 5 64\space5\space6 7 8 97 8 97\space8\space9 これを行うには、最初のツリーノードの周囲の頂点と、隣接する頂点とともに内側の頂点()を取得して、すべてのエッジと頂点が含まれるようにします。555 結局のところ、私の質問は、正方形正方形グリッドグラフのツリー幅を実際にはどのようにしてに等しくできるのかということです。これが正しい場合、このプロパティを示す分解ツリーの簡単な例を提示/説明できますか?k×kk×kk \times kkkk

3
整数線形計画法(ILP)問題のすべての解決策を見つける
私の問題は、ILPのすべての整数解を見つけることです。例として、2つの変数を持つILPを使用していますが、3つ以上の変数がある場合があります。この問題を最後に解決するために現在使用している方法について説明しますが、この種の問題を解決するための適切で効率的なアルゴリズムまたは方法があるかどうかを知りたいです。 目的関数はありませんが、このILPの制約は 0≤−2x−y≤80≤1−x+3y≤50≤2+x−y≤2x,y∈Z0≤−2x−y≤80≤1−x+3y≤50≤2+x−y≤2x,y∈Z \begin{equation} 0 \leq -2x -y \leq 8 \\ 0 \leq 1-x+3y \leq 5 \\ 0 \leq 2+x-y \leq 2 \\ x,y \in \mathbb{Z} \end{equation} このILPには2つの変数があるため、制約によって形成される線をグラフ化することで、ソリューション領域を視覚的に検査できます。 yyyyyy≤−2x≥−2x−8≥13x−13≤13x+43≤x+2≥xy≤−2xy≥−2x−8y≥13x−13y≤13x+43y≤x+2y≥x \begin{align} y &\leq -2x \\ y &\geq -2x-8 \\ y &\geq \frac{1}{3}x - \frac{1}{3} \\ y &\leq \frac{1}{3}x + \frac{4}{3} \\ …

1
入力の長さの対数よりも少ないスペースを使用するチューリングマシンを拒否するのはなぜですか?
では、計算の複雑さ:アローラとバラクによって現代的なアプローチ、それがいることを言及しています ただし、 S(n)>lognS(n)>log⁡nS(n)> \log n ワークテープは長さがあるので nnn、そして少なくとも現在読み取っている入力テープのセルのインデックスを記憶できるようにしたいとします。 それはどういう意味ですか?ポイントがわかりません。「入力テープの先頭で現在読み取られているセルのインデックスを記憶する」とはどういう意味ですか?説明はありますか? 入力テープの動きをスペースの考慮事項にカウントしないので、ワークテープのみをカウントすることに注意してください。

1
昨日のStackOverflowの停止に続いて-正規表現のマッチングは本当に難しいですか、それとも実装は単に非効率的ですか?
昨日、StackOverflowが30分ダウンしました。その後、彼らはそれについてブログの投稿を書き、問題が正規表現マッチングの予想外に高い複雑さから生じたことを詳述しました。 つまり、正規表現a+bは、文字列aaaaaaaaaaaaaacで実行される場合、バックトラックを使用するため、時間で実行されますは文字数です。O (ん2)O(ん2)O(n^2)んんna 次のPythonコードで問題を再現できます。私のコンピューターでは、実行に4秒以上かかります。 import re, time start = time.time() re.findall(r'\s+$', ' '*20000 + 'x') print(time.time() - start) これは私にとって非常に驚きました。私が考えたのだろう必要があるだろうこれ、正規表現からDFAを構築し、それを通じて、希望の文字列を実行することにより、例えば、正規表現マッチャがより効率的に動作することを考えていると思います(DFA工事は含みません)。O (n )O(ん)O(n) (たとえば、Cormen、Leiserson、Rivestによる本のアルゴリズムの紹介は、Knuth-Morris-Prattアルゴリズムを導入する方法について同様のアルゴリズムを通過します)。 私の質問:アルゴリズムを許可しない正規表現マッチングに本質的に難しいものはありますかO (n )O(ん)O(n)、または単に非効率的な実装(Pythonで、StackOverflowが使用するものなど)について話しているだけですか?

1
機械学習:時系列データのパターンを特定する
私は再生可能エネルギーで働いています。私の会社は機器から多くのデータを収集しています。これには通常、プロセスデータ(変圧器の温度、ライン電圧、電流など)および個別のアラーム(ブレーカートリップ、インバーターアラーム値、変圧器過熱アラームなど)が含まれます。これは、データの大まかな例です(csvの行として読み取られます)。 タイムスタンプ、タグ、値 2016年5月25日14:30:01、INVERTER_1.VOLTAGE_DC、249.5 2016年5月25日14:30:06、INVERTER_1.VOLTAGE_DC、250.1 5/25/2016 14:45:02、TRANSFORMER_1.TEMP_ALARM、0 2016年5月25日14:45:15、TRANSFORMER_1.TEMP_ALARM、1 (少なくとも今のところ)リアルタイムではなく、静止しているこのデータに対して何らかのパターン分析を開始したいと思います。私が試みたいのは教師なしの特徴学習だと思いますが、完全にはわかりません。機械学習を1)明白でないパターンを特定し、2)アルゴリズムがデータ内のパターンのシグネチャを特定できるようにするとよいと思います(たとえば、ブレーカが作動すると、単一のフィーダのすべてのインバータが通信を失う)開いています)。 私の最初の質問:これは時系列データと見なされますか?これまでの私の研究では、時系列データは時間の関数であるデータを参照しているようです。ほとんどのデータについて、ドメインエキスパートとして、データの関数を定義することがこの分析に役立つとは思いません。また、私の研究では、時系列データは離散ではなく実数値を参照しているように見えます。 コメントや関連参照があれば参考になります。

2
依存型付けのメタ変数を解決するための制約を生成しますか?
依存型では、ミラーパターンの統一を使用して、高次の統一の決定可能なフラグメントを解決します。これにより、依存型付けされた言語にメタ変数または暗黙の引数を含めることができます。 パターンフラグメントに統一問題がある場合、解決策が存在する場合にそれを見つける方法を説明する多くの論文があります。例としては、(Gundry-McBride)、(Abel-Pientka)、オリジナルのMillerペーパーなどがあります。 私が不思議に思っているのは、メタ変数(または暗黙の引数)を含む依存型プログラムが与えられた場合、統一ソルバーに渡される問題をどのように生成するのでしょうか。

3
アルゴリズム:ゲーム内のダンジョンを通る最短経路を見つける
バックグラウンド 最近PCゲーム「ダーケストダンジョン」をプレイしていた。ゲームでは、下の図に示すように、部屋がつながったダンジョンを探索する必要があります。 ルールは次のとおりです。 固定の部屋(入り口)から始めます。開始する場所を選択することはできません。 目標は、すべての部屋を少なくとも1回訪問することです 隣接する部屋間の距離は、すべての部屋で同じです。 部屋や散歩道は何度でも訪れることができます 質問 少なくとも一度はすべての部屋を訪れる入り口からの最短経路は何ですか? サブ質問: この問題を解決するために使用できるアルゴリズムは何ですか? 私のような人が自由に(そしてかなり簡単に)使用できる実装はありますか? 私が試したこと 私はこれまたはこれのような他の質問を答えを見つけることなく見つけました。(基本的な)TSPに精通しており、簡単なTSPをコーディングして解決できます。ハミルトニアンパスは複数回の訪問を許可しないため、私の問題を解決しませんでした。中国の郵便配達の問題は、私はすべてのエッジを訪問する必要はありませんので、また、その基本的な形で、ここでは適用されません。 更新 コメントで述べたように、私はコンピュータサイエンティストではなく、数学的なステートメントを証明することにも興味がありません(おそらく、この質問を後でスタックオーバーフローに投稿します)。また、私はプログラマーではないため、自分でソリューションをコーディングできる可能性は非常に低くなっています。しかし、私はその性質の問題を扱う最初の人ではないと思います。 @Shreeshおよび@Dibによると、次の手順を適用できます。 すべての部屋でペアワイズ距離行列を作成し、すべての部屋の間にエッジを追加します。 標準ソルバー(例:concorde)を使用してTSPを解く 入り口から始めて、解決策に従ってすべての部屋を訪れます。隣接していない部屋の場合は、それらの部屋の間の最短距離に置き換えます。 この手順は問題の答えを提供しますか?

1
量子コンピューティングで指数時間を必要とする問題はありますか?
量子ビットが重ね合わせを持ち、回路と比較してより多くの表現力を持っているという事実を考えると、量子コンピュータでの解決を保証するために少なくとも指数関数的な時間を必要とする問題はありますか? Complexity Zooをチェックしましたが、そこに記載されている、この説明に適合する複雑度クラスは見つかりませんでした。

1
ランダムな幾何学的グラフのアルゴリズム
ランダムな幾何学的グラフ(https://en.wikipedia.org/wiki/Random_geometric_graph)は、点を分布に従ってランダムに選択し、場合にを設定することで作成されます、一部のパラメータr。幾何学的なグラフは、実際のネットワークのモデリングに使用されます。nnnRdRd\mathbb{R}^dpi∼pjpi∼pjp_i \sim p_j∥pi−pj∥&lt;r‖pi−pj‖&lt;r\|p_i - p_j\|<rrrr たとえば、[0,1] ^ 2の一様分布を使用して交通マップをモデル化でき[0,1]2[0,1]2[0,1]^2ます。 これらのグラフを処理するための優れたグラフ理論アルゴリズムがあるかどうかに興味があります。たとえば、2つの頂点間の最短パスを見つけるためのアルゴリズムはありますか?明らかに、このようなアルゴリズムはGPSメーカーにとって有用です。 このような研究はありますか?

3
プログラミングモデルとプログラミングパラダイムの違い?
プログラミングモデルとプログラミングパラダイムの関係と違いは何ですか?(特に、プログラミングモデルとプログラミング言語のプログラミングパラダイムについて話すとき。) ウィキペディア は1で私の質問に答えようとします: プログラミングパラダイムは、コンピューターシステムを抽象化したプログラミングモデルと比較することもできます。たとえば、「フォンノイマンモデル」は、従来のシーケンシャルコンピュータで使用されているプログラミングモデルです。並列計算の場合、通常、プロセッサを相互接続するさまざまな方法を反映した多くの可能なモデルがあります。最も一般的なものは、共有メモリ、メッセージパッシング付きの分散メモリ、またはこの2つのハイブリッドに基づいています。 しかし、私はそれを理解していません: フォンノイマンモデルはhttps://en.wikipedia.org/wiki/Von_Neumann_architectureの建築モデルであることを理解しているため、ウィキペディアの引用に「「フォンノイマンモデル」はプログラミングモデルである」と記載されているのは間違い ですか。 並列プログラミングモデルは「通常、プロセッサを相互接続するさまざまな方法を反映していますか」?それとも、代わりに「プロセッサを相互接続するさまざまな方法を反映した」並列アーキテクチャモデルですか? 1の質問に答えるために、プログラミングモデルとは何かを明確にできますか? プログラミング言語またはAPIライブラリによって提供/実装されたプログラミングモデルであり、そのような実装は一意ではないのは正しいですか。 Rauberの並列プログラミングの本、「プログラミング・モデル」、「アーキテクチャ・モデル」以上の順番である「計算モデル(すなわち計算モデル)」上記の抽象化です。プログラミングモデルは、並列コンピューティングで使用されるだけでなく、プログラミング言語またはAPIライブラリでも使用されていると思います。

1
ポンピングレンマ証明の何が問題になっていますか?
言語は明らかに規則的です。たとえば、正規表現と一致します。しかし、次のポンプ補題の議論は、それが規則的でないことを示しているようです。何が問題になっていますか?L={02n | n≥0}L={02n | n≥0}L = \{0^{2n} \space |\space n \ge 0 \}(00)∗(00)∗(00)^* 入力をポンピングレンマの要件を満たすとして分割する方法を見つけましたが、すべてのに対しては限り ません。それは言語が規則的ではないことを意味しませんか?sssxyzxyzxyzxyiz∈Lxyiz∈Lxy^iz\in Liii より詳細には、定期的な言語のためのポンピング補題は、言語の場合には、言う 規則的である、長さ、ポンプが存在する任意の文字列を指定するようなしてのように書くことができなどをそれ:LLLp≥1p≥1p \ge 1s∈Ls∈Ls\in L|s|&gt;p|s|&gt;p|s|> ps=xyzs=xyzs = xyz |y|≥1|y|≥1\lvert y \rvert \ge 1 |xy|≤p|xy|≤p\lvert xy \rvert \le p xyiz∈Lxyiz∈Lxy^iz\in Lのすべてのための。i≥0i≥0i \ge 0 それで、を取り、それを(つまり、、、)。これは1と2を満たしますが、場合、が得られますが、これは含まれていません。 は長さが奇妙なので。結局のところ、その言語は規則的ではないようです。s=02ps=02ps = 0^{2p}s=ϵ002p−1s=ϵ002p−1s=\epsilon\, 0 \, 0^{2p-1}x=ϵx=ϵx = \epsilony=0y=0y = 0z=02p−1z=02p−1z = …

2
N項ツリーの事前、事後、および順序付きウォークは何を意味しますか?
このWikipediaの記事で説明されているツリートラバーサルメソッドは、予約注文、注文注文、および注文注文です。これらの方法は二分木に限定されていますか?アルゴリズムは、左と右の子に関して定義されているようです。n進ツリーに使用できる場合、どのようにですか? n-aryツリーには、任意のノードに1つの親とnの子があります。ここで、nは各ノードの任意の整数です。 必要な場合は、下の図を使用してこれを説明してください。

1
分散システムのコンセンサス問題
分散システムについて初めて読むことを始めました。いくつかの組み合わせトポロジを使用した非同期モデルでは、コンセンサスが不可能であることをかなり巧妙に証明しています。一方、実際のシステムでは、PaxosやRaftなどの分散状態マシンを同期するために使用される複数の合意プロトコルがあります。この認識された矛盾の鍵は、いわゆる障害検出です。 私の質問は次のとおりです。PaxosやRaftのようなプロトコルは何をあきらめますか、つまり、定理に矛盾しないのですか?障害検出はどのようにここに収まりますか? これらの関係を検討する価値のある論文はありますか?

1
Rabin-Karpは本当にローリングハッシュにmod Q操作を適用することに注意する必要がありますか?
私はRabin Karpアルゴリズムについて読んでいて、値Qによって制限されたローリングハッシュ値を維持することの大事なことは何だろうとずっと思い続けました。 一般的なコンピューターでの整数表現は2の補数であるため、実際には、ローリングハッシュに対するすべての操作を2 ^ 31で制限するのとまったく同じであると考えました。つまり、気にしないでください。さらに、バインドまたはハッシュする値が小さいほど、衝突が増えるため、Qが大きいほどパフォーマンスが向上します。 簡単な(Java)実装をコーディングしてみました。 public static int rabinKarp(String text, String pattern) { if (text.length() &lt; pattern.length()) { return -1; } else { int patternHash = 0; int textHash = 0; int pow = 1; // preprocessing the pattern and the first characters of the text string for (int …

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