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

数学とコンピュータサイエンスでは、アルゴリズムは、関数を計算するための明確に定義された命令の有限リストとして表現される効果的な方法です。アルゴリズムは、計算、データ処理、および自動推論に使用されます。

2
動的プログラミング手法を使用して、「ピザピッキングの問題‍」をどのように解決しますか?
ウィンクラーのピザピッキング問題: nスライスの円形ピザパイ。スライスにiは面積があります。S_iつまり、面積はパイのピースごとに異なります。 食べる人のアリスとボブは交互にスライスを選んでいますが、パイに複数のギャップを作るのは失礼です(許可されていません)。 したがって、各イーターは、オープン領域に隣接する2つのスライスの1つを取得するように制限されています。アリスが最初に行き、両方の食べる人はできるだけ多くのパイを探します。 ピザの消費を最大化するためにアリスとボブの両方が完璧にプレーした場合、動的プログラミングアルゴリズムはアリスが食べるパイの量をどのように決定しますか? 私の理解: 一般的なDP問題では、再帰ツリーを使用して、またはより厳密にはDAGを使用して視覚化できるサブ問題を見つけます。ここで、私はここで副問題を見つけるためのリードを見つけていません。 ここで、S_iの特定のセットについて、Aliceが食べるスライスの領域を最大化する必要があります。これは、(n-1)個の順列からPizzaスライスの順列を選択することに依存します。アリスが取得するn \ 2ターンごとに使用可能な2つのオプションから最大面積スライスを選択すると、順列のスライスの総面積が得られます。そのようなすべての順列についてスライスの領域を見つける必要があります。そして、これらのうち最大のもの。 誰かが私を前進させる方法を手伝ってくれる?

6
クイックソートで気になりませんか?
特に「標準」(非HPC)アプリケーションを作成する場合、どのソートアルゴリズムを選択するか、またはクイックソート(ほとんどのライブラリが単にソートと呼ぶもの)で解決するかを検討しますか?特定の状況ではある程度利益を生む可能性がありますが、一方で適切な最適化には、問題を分析してベンチマークを作成するためにある程度の時間が必要です。


2
ネストされたループは常にO(n ^ k)ですか?
別のループ内にループがあっても、内側のループが1回しか実行されないことがわかっている場合、このアルゴリズムはO(n ^ 2)のままですか? For i = 1 to n do For j = 1 to i do If (i==j) do For k = 1 to n {Do stuff} 2番目のループの反復ごとに1回iだけになるため、非常に内側のループは最大で1回実行されjます。これはまだn ^ 3ですか?

7
プログラミング中のリファクタリング
問題が発生した場合、特に性質が複雑な場合は、時間をかけて問題を解決するためのアプローチについて考えます。これにもかかわらず、よくあることは、ソリューションをプログラミングしているときに、見逃した問題の詳細について考え始め、それに応じてコードを調整することです。 結果は、リファクタリングする必要があるコードの混乱です。 私は「リファクタリング」をしたいのですが、簡単に聞こえますが、それを実行するのは本当に大変です。見逃した細部が小さい場合、すでに書いた内容を消去して本来の方法で書くのではなく、デザインに小さな更新を加えたくなります。 それは明白な答えのある質問のように聞こえますが、「あなたが行くにつれてリファクタリング」をよりよくするために使用するテクニックはありますか?これは良い原則であることは知っていますが、何度も何度も失敗します。

4
教科書が実際の言語ではなく疑似コードを使用するのはなぜですか?
大学やアルゴリズムの教科書では、教師と著者が疑似コードで制御フローを説明することは非常に一般的です。PythonやHaskellなどのより表現力のある言語の出現により、大学がこれらの言語のいずれかを介してアルゴリズムを説明するように切り替えることは合理的ですか? 私が考えることができる疑似コードの唯一の利点は、それがおそらく言語に依存しないということです。そうではありません。一部の疑似コードは命令型アプローチを使用し、他の疑似コードは機能的に見えます。著者は、使いやすいプログラミング言語からセマンティクスを借用するか、またはさらに悪いことに、セマンティクスを自然言語で記述します。では、疑似コードが実際に言語に依存しない場合、それを使用する利点は何ですか?既存の言語をそのまま使用した方がよいのではないでしょうか。

3
ポリゴンに同じサイズのエリアを生成する
n与えられたポリゴンで同じサイズのエリアを見つける疑似コードロジックを探しています。一致した領域の間または領域の外側にスペースがあってはなりません。エリアの最初の有効な一致が返されます。 [2,2, 3,1, 5,1, 5,4, 4,5, 2,3]入力として次のポリゴンを想定: ...そして3パラメータとして有効な出力は次のようになります[ [2,2, 3,2, 3,3, 4,3, 4,5, 2,3], [2,2, 3,1, 5,1, 4,2, 4,3, 3,3, 3,2], [4,5, 4,2, 5,1, 5,4] ]: パラメータ付きの別の有効な出力3は[ [3,4, 3,3, 4,3, 4,2, 3,2, 3,1, 2,2, 2,3], [4,3, 4,2, 3,2, 3,1, 5,1, 5,3], [3,4, 3,3, 5,3, 5,4, 4,5] ]次のとおりです。 エリアは同じ中心点を共有する必要がないことに注意してください。1つ以上の領域が、ポリゴン内の他の領域の間にちょうど入る場合があります。 次に、サンプル入出力の別の例を示します。 [1,3, …

1
グループ化アルゴリズム
一部の労働者とその居住地のチェックイン時間に応じて、それらをいくつかの車両にグループ化する方法と、車両を職場まで運ぶために車両が従わなければならないルートを計算するアルゴリズムを開発しました。これは、TSP(Travelling Salesman Problem)アルゴリズムとその他のカスタマイズを使用して実現されています。 私たちはそれを超えて改善したいと考えています。とりあえず、車両の定員は4人(5か所ですが、1人は運転席)に固定されており、この量を「可変」にしたいと考えています。言い換えれば、メインアルゴリズムを実行する前に、必要になる可能性のある車両の組み合わせ(およびそのフリーシート)を決定する必要があります。私が車両について話すとき、私は車両の種類について話します。たとえば、車両Aは4席、車両Bは7席などです。つまり、5席のAudi A8を1つ、5席の座席Ibiza、20席のバスを1つ持つことについて話しているのではありません。 これまでのところ、私が考えたのは次のとおりです。 労働者のグループを決定します。 必要な車両の数とその(無料)座席を決定します。それがその質問で私が尋ねているものです[a]。 ユーザーは優先する組み合わせを選択して続行します。 車両の組み合わせを使用してすでに開発されているアルゴリズムを適用し、それが実現可能なソリューションに到達するかどうかを確認します。 私の質問は、[a]アルゴリズムを開発する方法です。次の例は、[a]の実行結果を示しています。 次の人々が4、7、10シートの車両にグループ化するとします。 [a]の実行後、結果は次のようになります。 G3(2人の労働者):4席の空き車両1台(空席の多い車両は破棄されます)。 G2(2人の労働者):4席の空き車両1台(空席の多い車両は破棄されます)。 G1(9人の労働者): オプションA:4座席の3台の車両。 オプションB:4人乗りの車両1台と7台の車両1台。 オプションC:7台の2台の車両。 オプションD:10席の車両1台。 私は近似を考えました: 車両のタイプを作成し、それらをソートされたリストに追加します(ソート基準は座席でなければなりません)。 労働者のグループごとに、以下を実行します。 組み合わせを計算します[b]。 画面に結果を印刷します。 したがって、主な問題は、[b]の開発方法です。 助言がありますか?私が自分自身をひどく説明した場合は申し訳ありません。

1
一方向ストリーミングオーディオデバイスにはどのような種類のバッファを実装する必要がありますか?
オーディオデータがデバイスにストリーミングされるプロジェクトに取り組んでいます。オーディオデータはオーパス経由でエンコードされ、一度に20 msのペイロードでストリーミングされます。パケット損失を完全に回避するために、ストリーミングはTCP経由で行われます。ストリーミングの目的は、オーディオの損失やジッターを発生させずに、ライブオーディオストリーミングにできる限り近づけることです。 現在、遅いインターネット接続で何が起こるか、オーディオが少しジッターすることがあります。私は現在バッファを使用していませんが、目標はできるだけ「ライブストリーミング」に近づけることができると同時にジッターを排除することです。 私はジッターバッファーを調べましたが、ジッターバッファーも両端で遅延を処理して、両端が可能な限り同期するようになっているようです。静的なバッファサイズを作成した場合、必要がなければ、ライブストリーミングの側面からそれを取り除くことになると思います。 だから、これはいくつかの質問を私に残します、それらはすべて何らかの形で関連しています。 バッファー長を検出するための適切な方法またはアルゴリズムは何ですか? 受信側のデコーダーにデータを送り始めるための最良の方法は何ですか?バッファが一定のミリ秒に達すると、20ミリ秒のペイロードでデータの供給を開始しますか? バッファーがいっぱいになった場合、再生を遅らせますか? バッファはバイトまたは時間の長さになりますか? 本当にありがとう!

2
パーソナルアシスタントは通常どのように文を生成しますか?
これは、言語学分野におけるNLG研究の方向性に関するこの質問のフォローアップのようなものです。 Siri、Google Now、Cortanaなどのパーソナルアシスタントツールはどのように自然言語生成(NLG)を実行しますか?具体的には、文章テキスト生成部。私は、テキストを音声に変換する部分ではなく、テキスト生成部分だけに関心があります。 その情報がおそらく入手できないので、私はそれぞれがそれをどのように行うか正確に探していません。 その品質の文生成を実装するにはどのような設定が必要なのでしょうか。 データベースにはどのようなデータが必要ですか(高レベル)? 可能なすべての単語とその意味の辞書に加えて、注釈が付けられ、統計的に分析された多くの本/コーパスに辞書を追加する必要がありますか? それは実際に人々が自然な方法で話した(テレビ番組やポッドキャストなどから)録音をしてテキストに変換し、それを何らかの形で "システム"に追加することを必要としますか?(本当に「人間」のような文章を得るために) あるいは、彼らが使用している単純な構文ベースの文パターンだけがあり、巨大な意味論的「意味」データベースがないのですか?誰かが正規表現タイプのものをたくさん書いたところ。 そのような自然に書かれた人間のような文章に使用されるアルゴリズムは何ですか? 質問する理由の1つは、NLG分野がSiriやGoogle Nowなどが成し遂げていることを実行することは非常に遠いようだということです。では、彼らはどんなことをしているのでしょうか?(ちょうど文のテキスト生成部分)。

2
単一のforループランタイム説明問題
さまざまなforループの実行時間を分析しています。知識が増えてきているので、この問題を理解したいと思っています。この問題は、まだ解明されていません。「エクササイズされる星の数」というこのエクササイズがあります。 for (int i = N; i > 1; i = i/2) System.out.println("*"); 選ぶべき答えは A: ~log N B: ~N C: ~N log N D: ~0.5N^2 答えはAであるべきと私はそれに同意するが、他の側に..ましょうと言うが、それでN = 500何を考えLog N、その後も?2.7になります。では、N=500上記の演習でそれを言うとどうなるでしょうか。それは間違いなく2.7以上の星を印刷するでしょうか?それはどのように関連していますか? forループが次のようになっていると言うのは理にかなっているからです。 for (int i = 0; i < N; i++) N星を印刷します。 私はここでこれについての説明を見つけたいと思っています。多分私はこれらすべてのことを間違って解釈し、それについて悪い方法で考えています。前もって感謝します。

1
最短経路情報からグラフを再構築するためのアルゴリズム?
グラフの最短経路データがあります。このデータからグラフ自体を再構築できますか? より正確には、グラフ(V、E)の各頂点vに対してブール(0/1)行列があります。行列要素[s、d]は1に等しい。ただし、vがソース頂点sから宛先頂点dへの最短経路にある場合。グラフのすべてのエッジは同じ長さです。 たとえば、グラフの場合 (V1) -- (V2) -- (V3) 3つの行列は次のようになります。 V1: 1 1 1 1 0 0 1 0 0 V2: 0 1 1 1 1 1 1 1 0 V3: 0 0 1 0 0 1 1 1 1 私の質問: 1)これらの行列からエッジのセットEを再構築するアルゴリズムはありますか? 2)ソリューションは常に一意ですか?(これは実際の要件よりも個人的な好奇心です) 3)アルゴリズムを不均一なエッジ長に一般化できますか?

4
TDDを使用した複雑なアルゴリズムの構築
私は毎日のプログラミングの練習でTDDを採用しようとしています。私は仕事でそれを非常に効果的に使用していますが、いくつかの複雑なアルゴリズムを使用している私の個人的なプロジェクトで問題を抱えています。 この質問をさせる特定のアルゴリズムは、拡張カルマンフィルターです。私が書いたコードに自信が持てないほど複雑ですが、分割するのが難しいほど単純です。 入力と予想される出力を使用してアルゴリズムのテストを作成することもできますが、中間のステップには自信がないため、途中でスラッシングとショットガンコーディングをたくさん行います。 合理的で複雑なアルゴリズムを使用してTDDを使用したことがある場合、アプローチは何ですか。
8 algorithms  tdd 


3
混合テキストでイタリックを反転させる正しいアルゴリズムは何ですか?
質問の動機は、以下のセクションに描かれています。テキストをイタリックにする方法はたくさんあるので、おそらく、「イタリックスワップアルゴリズム」は複数あるでしょう。この問題は、XHTMLコードの追加の難しさ、および<i>タグの使用を明らかにします。例: <!-- original text: --> <p id="p1"><i>Several more</i> Homo sapiens <i>fossils were discovered</i>.</p> <!-- same text, swapping italics: --> <p id="p2">Several more <i>Homo sapiens</i> fossils were discovered.</p> このように見えます さらにいくつかのヒトの化石が発見されました。 さらにいくつかのヒトの化石が発見されました。 アルゴリズムの紹介と議論 「レイアウトソリューション」の場合、最も簡単なアルゴリズムはfont-style、すべてのテキストブロックのCSSプロパティをチェックし、jQueryで反転します。 $('#myFragment *').each(function(){ if ($(this).css('font-style')=='italic') $(this).css('font-style','normal') else $(this).css('font-style','italic') }); しかし、このアルゴリズムはもう少し複雑なテストには耐えられません。 <p id="p3"><b><i>F</i>RAGMENT <big><i>with italics</i> and </big> withOUT.</b></p> 2番目に単純なアルゴリズムは具体的なソリューションであり、「例」セクションで使用されました。2つのステップがあります。 XHTMLフラグメントをイタリック体で囲みます。 …

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