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

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

2
フィギュアの回転を効率的に計算する方法は?
バイトの行列(ビットマップのような行列)で表されるFigureがあります。例の図はに示されていPicture 1ます。 目標は、特定の図の最適な回転角度を見つけることです。Figureが最適な角度だけ回転すると、X軸とY軸に平行でFigureに内接する長方形の面積が最小になります。 図に内接する長方形は、写真上で薄い灰色で示されています。ではPicture 2、あなたは図の理想的な回転が時計回りに約30度であることがわかります。 今、私はこの角度を見つける方法をアルゴリズムを知っていますが、それは非常に効率が悪いようです。こんなふうになります: 0から45までの角度でループします。 現在の角度について、すべての図形ポイントについて、新しい、回転した、位置を計算します 数字(最小および最大x、y)を含む長方形の境界を見つけ、これまでで最良の一致である場合は登録します 次の角度 これは一種のブルートフォース方式であり、小さな人物に対してはうまく機能し、適度に高速です。ただし、最大1,000万ポイントを含む数値を使用する必要があり、アルゴリズムが遅くなります。 この問題に適したアルゴリズムは何でしょうか?

2
データ構造とアルゴリズムの関係は何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 データ構造の優れたオンラインコースを探していましたが、Googleはアルゴリズムコースの結果も返すことがわかりました。 このコースでは、分割統治法、グラフアルゴリズム、実用的なデータ構造(ヒープ、ハッシュテーブル、検索ツリー)、ランダム化アルゴリズムなど、アルゴリズム設計のいくつかの基本原則を学び ます。[ソース] そして このクラスの終わりまでに、グラフやその他の重要なデータ構造用の新しいアルゴリズムを考案し 、これらのアルゴリズムの効率を評価するために必要な重要な概念を理解できます。[ソース] そして このコースでは、計算問題の数学的モデリングについて紹介します。これらの問題を解決するために使用される一般的なアルゴリズム、アルゴリズムパラダイム、およびデータ構造をカバーしています。[ソース] 私の質問は次のとおりです。アルゴリズムとデータ構造は密接にリンクしているので、一緒に理解しなければならないのですか、それとも他のトピックよりも基礎的なトピックですか? 編集:この質問を終了する投票者のために、この質問を改善する理由と方法を教えてください。適切な質問をすることを学ぶことは、教育プロセスの一部です。

3
ガベージコレクションでハッシュテーブルを使用すると、マークアンドスイープの世界的な問題を解決できますか?
mark-sweep-compactガベージコレクションアルゴリズムでは、参照グラフの一貫性が失われ、オブジェクトを指すすべての参照の値を置き換える必要があるため、オブジェクトを再配置する際に世界を停止する必要があります。 しかし、オブジェクトIDがキー、ポインターが値のハッシュテーブルがあり、参照がオブジェクトアドレスの代わりに上記のIDを指す場合、参照の修正には1つの値の変更のみが必要で、一時停止はオブジェクトの場合にのみ必要ですコピー中に書き込みが試行されます... 私の考え方に間違いはありますか?

6
欠席の可能性を考慮して、誰の番がクロワッサンを購入するのかを調べます
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 あるチームは、毎朝誰かがクロワッサンを持参することを決めました。毎回同じ人物であってはならないので、次の順番を決定するシステムが必要です。この質問の目的は、明日クロワッサンを持ち込む順番を決定するアルゴリズムを決定することです。 制約、仮定、目的: クロワッサンを持参する順番は、前日の午後に決定されます。 ある日、欠席している人もいます。アルゴリズムは、その日に出席する人を選択する必要があります。欠席はすべて1日前にわかっているため、クロワッサンの買い手は前日の午後に決定できると仮定します。 全体として、ほとんどの人はほとんどの日に出席しています。 公平を期すため、誰もがクロワッサンを他の人と同じ回数購入する必要があります。(基本的に、すべてのチームメンバーがクロワッサンに費やす金額が同じであると仮定します。) 名簿の退屈を軽減するために、ランダム性の要素、または少なくとも知覚されたランダム性を持つことが望ましいでしょう。これは厳しい制約ではありません。それは審美的な判断です。ただし、同じ人を連続して2回選ぶことはできません。 クロワッサンを持ってくる人は事前に知っておくべきです。したがって、人PがD日にクロワッサンを持参する場合、この事実は人Pがいる前日に決定する必要があります。たとえば、クロワッサンの持ち主が常に前日に決定される場合、前日にいる人の1人である必要があります。 チームメンバーの数は十分に少なく、ストレージとコンピューティングリソースは事実上無制限です。たとえば、アルゴリズムは、過去に誰がクロワッサンを持ってきたかの完全な履歴に依存できます。毎日高速のPCで最大数分間の計算で問題ありません。 これは現実世界の問題のモデルであるため、シナリオをより適切にモデル化していると思われる場合は、自由に仮定に挑戦したり洗練したりできます。 起源1:Florian Margaineによるクロワッサンの購入者を確認します。 起源2:誰がジルによってクロワッサンを買うつもりかを調べます。 この質問は、Gillesと同じバージョンであり、さまざまなコミュニティがプログラミングの課題にどのように対処するかを確認するための実験として、プログラマーに再投稿されました。

6
プログラミングの問題はすべてアルゴリズムの問​​題ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 Cormenらによる「アルゴリズムの紹介」が好きです。知識を伝えます。1つの理由は、すべてがプログラミングの問題に関係しており、本が特定のプログラミング言語で実装されていないことです。この言語の独立性は、一般的なアイデアに焦点を当てています。 ですから、私の質問は、タイトルにあるとおりです。このアルゴリズム的な方法で考えることで、すべての解決可能なプログラミング問題を解決できます。どの言語、分野などに関係なく?はいの場合、引数を指定し、そうでない場合、引数を指定します! GUI、AI、グラフィックスなどを使用して、多くの複雑なプログラムを実装していません。しかし、これらのタイプの問題は、優れたアルゴリズムを考えることの問題でもありますか?
13 algorithms 

3
償却された一定時間で配列を初期化します—このトリックは何と呼ばれますか?
配列アクセスのパフォーマンスと、それをクリアするときに反復処理する必要性とを引き換えにするこのデータ構造があります。エントリごとに生成カウンターを保持し、グローバル生成カウンターも保持します。「クリア」操作は、生成カウンターを増やします。各アクセスで、ローカル生成カウンターとグローバル生成カウンターを比較します。それらが異なる場合、値は「クリーン」として扱われます。 これは最近Stack Overflowでのこの回答で出てきましたが、このトリックに正式な名前があるかどうかは覚えていません。そうですか? 1つのユースケースは、ノードのごく一部のみを緩和する必要がある場合、およびこれを繰り返し行う必要がある場合のダイクストラのアルゴリズムです。

3
補間検索とバイナリ検索
バイナリ検索の代わりに補間検索を使用する必要があるのはいつですか? たとえば、ソートされたデータセットがあります。どのような状況でバイナリ検索を使用してこのデータセット内のアイテムを検索しますか、またはどの状況で補間検索を使用する必要がありますか? データセットのどのプロパティが決定要因になりますか?
13 algorithms 

4
データベースのファジー検索の概念
私はこれについて考え、たとえばユーザーがスペルミスを入力した場合など、データベースをファジー検索する方法に関する解決策を考え出そうとしています。この背後にあるロジックに大きな問題はありますか?それは機能し、以前に行われましたか? 検索するテーブル: **tblArticles** Body - Soundex_Body - CharacterCoded_Body したがって、物理的な表示のために生のテキスト本文を保存します。他の2列は、次の方法で事前計算される検索に使用されます。 Soundex 本文は言葉に分割され、soundexバージョンに変換されます。IE、結果の本文は次のようになります。 H252 B54 C23 E33... etc したがって、誰かが「恐竜」と入力すると、記事本文には「恐竜」と表示され、これらは両方ともB26と評価されます。次に、検索語のsoundex値に対してLIKEを実行します。 文字コード IEで文字を素数にマップする文字マッピングを考えると: h = 2 e = 3 l = 5 o = 7 p = 11 c = 13 help = 2*3*5*11 = 330 hello = 2*3*5*5*7 = 1050 hell = 2*3*5*5 …

2
どのk-best最短パスアルゴリズムを考慮する必要がありますか?
グラフ検索の最適化問題を解決しています。有向グラフを介して、k個の最適な非循環最短経路を見つける必要があります。 正確で近似的なk-bestアルゴリズムが多数あることは知っていますが、最近の研究のほとんどは、非常に大きく、非常にまばらに接続されたグラフ(道路のルーティングや方向など)を対象としているようです。 私の問題の側面を区別する: グラフは約160の頂点で構成されています。 グラフはほぼ完全に接続されています(双方向であるため、〜160 ^ 2〜= 25kエッジ) kは非常に小さい(おそらく10未満) 最大パス長はおそらく制限され、同様に非常に小さくなります(例:3-5エッジ) 上記で「非周期的」と言いましたが、繰り返しますが、ソリューションにはサイクルを含めることはできません。これは1-best最短パスの問題ではありませんが、k-bestの問題になります-たとえば、道路のルーティングを検討すると-AからBへの2番目の最短パスは1-bestと同じで、どこかのブロックの周りの簡単な旅行。それは数学的に最適かもしれませんが、あまり有用な解決策ではありません。;-) 計算ごとに、エッジをその場で再重み付けする必要がある場合があります。エッジコストはいくつかの要因の加重合計で構成され、最終要件(取得する場合はいつでも)により、ユーザーはそれらの加重要因の独自の優先順位を指定して、エッジの重みを変更できます。これは比較的小さなグラフであるため(数百KBで表すことができるはずです)、メモリ内でグラフを複製し、再重み付けを適用してから、複製されたグラフで検索を実行するのが妥当です。しかし、その場で重みを計算しながら検索を実行するより効果的な方法があれば、興味があります。 Santos(K最短パスアルゴリズム)、Eppstein 1997(k最短パスの検索)などで説明されているアルゴリズムを探しています。Yenのアルゴリズムは、主に既存のJava 実装のために興味深いものです。私は研究論文を読むことを恐れていませんが、私の問題の詳細を捨てて、読書時間を節約するための指針を求めることは価値があると思いました。 また、Java実装へのポインターがある場合は、さらに良いでしょう。
13 java  algorithms 

5
円に最も近い最適なものを見つける
以下は、真ん中に白い点のポイントがあり、すべての赤い円がすでに存在する場合に青い円(明らかにそれを配置した場所にある)に最も近い場所を見つけたい場合の画像例です。 。その場所を見つけるにはどうすればよいですか? 私にとってパフォーマンスは、このアプリケーションにとって大きな関心事ではありません。

1
キャプテンケイジャンのフェリーにZoombinisを配置するためのアルゴリズム?
私は最近、ZoombinisのLogical Journeyの再リリースをプレイしており、さまざまなパズルを解決できるコンピューターアルゴリズムを実装しようとしています。キャプテンケイジャンのフェリーボートパズルにアプローチする方法に固執しています。 なじみのない人にとっては、Zoombiniは髪、目、鼻、足の4つの属性を持つクリーチャーです。これらの属性にはそれぞれ5つの可能な値があります。たとえば、Zoombiniの足は、車輪、ローラースケート、スニーカー、バネ、またはプロペラです。乱雑な髪、メガネ、緑の鼻、スニーカーを備えたZoombiniの例を次に示します。 フェリーボートパズルのタスクは、フェリーボートの16席に16個のZoombinisのコレクションを配置することです。配置は、直交する隣接する2つの座席は、少なくとも1つの機能を共有するZoombinisが占有する必要があるという規則に従う必要があります。2 Zoombinisが異なるの髪、異なる目、鼻異なる、持っている場合と、互いに異なる足を、彼らは隣同士に座ってないかもしれません。 座席の配置はレベルによって異なります。具体的には、「非常に難しい」レベルに注目しましょう。このレベルでは、16席が4行4列のグリッドに配置されます。15個のZoombinisが合法的に着席しているが、右のZoombiniと機能を共有しないため、ドックに立つ最後のZoombiniを最後の空いている座席に配置することはできません。 16個あります!およそ21兆のZoombinisの座席への割り当てが可能です。したがって、すべての可能な割り当てを実行して、それが合法かどうかを確認するだけでは実用的ではありません。この問題に賢明にアプローチするために使用する可能性のあるヒューリスティックは何ですか?
12 algorithms 

1
柔軟なDIFF実装のための発見的アプローチ
作業中のドキュメントリビジョンを比較するために、DIFF実装を作成しました。O(ND)差分アルゴリズムとそのバリエーションに基づいています。 重要になった1つのことは、変更のリストを取得し、それらを人間が読めるテキストに変換することです。現在のアルゴリズムは非常に効率的ですが、拡張するのが難しいほど非常に効率的です。 短い質問 私はA *と「ターン」にペナルティを追加するヒューリスティックを使用しようと考えていました。アイデアはしている滑らか人間が読むことができる何かに解析することが容易であるように「削除、追加、追加、削除、追加、削除」不要に。基本的に、私の最短経路問題を最も単純な経路問題に変えてください。 そしてもちろん、常に出力作成「削除しないすべてのものを、追加のすべてを」 これは理にかなっていますか? DIFF実装でヒューリスティックを使用するための優先順位はありますか?ヒューリスティックとは何ですか? 問題: 長い文が削除され、別の長い文が削除されたが、少なくとも1つの単語を共有している場合、「with」と言います。一般的な単語を単独で(追加と削除の両方ではなく)残すと、最短パスが作成されます。ただし、これは実際に、変更から印刷物を読み取ろうとする人間に対する変更のコンテキストを難読化するだけです。 現在のDIFFの例: 古いテキスト: クリーン:ショップエアでパワーウォッシュとブロードライ。 新しいテキスト: クリーニング:アセトンと糸くずの出ない布で拭きます。 メモリストの変更: 「Powerwash and blow dry」を「アセトンで拭く」に変更します 「ショップエア」を「アセトンと糸くずの出ない布」に変更します 注:「「ショップエア」の削除、「アセトン」の追加」の代わりに「変更」が使用されます。 ご覧のとおり、2番目のノートはすべてのコンテキストを失い、テキストの完全な古いテキストセットと新しいテキストセットを見ることなく、その意味を理解できません。 句読点に関する注意: 句読点を別の「単語」として区切り、次のようにします 追加 "(" の代わりに 「修復」を「(修復)」に変更します これは不快だったからです。ただし、これは、両方のテキストにコンマさえある場合(前の例の "with"という単語とは対照的に)、同じことが起こることを意味します。 可能な解決策: 代わりに、異なるパス検索アルゴリズムを使用して、人にとってより意味のある異なる変更「パス」に重みを追加する柔軟性を与えることができると思います。たぶん、句読点を含むノードへの移動にほとんど重みを付けないようにすることもできます(これが他のものにどのように影響するかはわかりません)。 次に、前の例を取得して以下をリストできます。 メモリストの変更: 「パワーウォッシュとショップエアでブロードライ」を「アセトンと糸くずの出ない布で拭いてください」に変更します。 見る!より明確に! パフォーマンスに打撃を与えることはわかっているので、プログラムの大幅なオーバーホールを行う必要があるかもしれませんが、最終結果を得ることがより重要です。 ボトムライン: 繰り返しますが、DIFF実装でヒューリスティックを使用するための優先順位はありますか? 他の考え?合理的な時間投資ですか?他のアイデア?他のアルゴリズム? 前もって感謝します! 編集: A *を使用するのではなく、質問を明確化/固化し、質問をアルゴリズムにヒューリスティックを追加するように一般化しようとしました。この例では基本的に同じことですが、今でもより正確だと思います。 この投稿は洞察に富んでいました。

2
関数型プログラミングとステートフルアルゴリズム
Haskellで関数型プログラミングを学んでいます。それまでの間、私はオートマタ理論を研究しており、この2つがうまく調和しているように思えるので、オートマタで遊ぶための小さなライブラリを書いています。 これが私に質問をさせた問題です。状態の到達可能性を評価する方法を研究しているときに、いくつかのパスがいくつかの状態を共有する可能性があり、それらを複数回評価する可能性があるため、単純な再帰アルゴリズムは非常に非効率であるという考えを得ました。 たとえば、ここで、aからgの到達可能性を評価する場合、dとcを通るパスをチェックする際にfの両方を除外する必要があります。 だから私の考えは、多くのパスで並行して動作し、除外された状態の共有レコードを更新するアルゴリズムは素晴らしいかもしれないということですが、それは私にとってはやり過ぎです。 いくつかの単純な再帰の場合、引数として状態を渡すことができることがわかりました。ループを回避するために通過した状態のリストを転送するため、ここで行う必要があります。しかし、リストを逆方向に渡す方法はありcanReachますか?たとえば、関数のブール結果と一緒にタプルで返すのですか?(これは少し強制的に感じますが) 例題の妥当性に加えて、この種の問題を解決するために利用できる他のテクニックは何ですか?これらはと何が起こるかのようなソリューションがあるように持っていることを一般的に十分でなければならないような気がしますfold*かmap。 これまでのところ、learnyouahaskell.comを読んで何も見つかりませんでしたが、まだモナドに触れていないことを考慮してください。 (興味があれば、コードレビューにコードを投稿しました)

1
機能的リアクティブ/リレーショナルプログラミング–違いはありますか?
私が使用してきた反応ココア(GitHubによる)、機能性反応性今しばらくの間、ココアライブラリで使用するためのプログラミングAPIを、ちょうど読みました「タールピットのアウト」、おそらくその背後にある概念を提示することを紙、私は少し混乱しています。 この論文は(私が理解しているように)関数関係プログラミングを提示します。データ間の関係は、必要な「偶発的な」ロジックと状態の量を減らすためにFRPシステムによって強制される条件で作成されます。 私の質問は、これらの2つの概念-FR(eactive)PとFR(elational)Pは本質的に同じものですか(前者は後者の実装にすぎません)、または2つのコアの違いはありますか?残念ながら、現時点では、この分野に関する私の知識は、それらを十分に差別化するのに十分ではありません。 違いがある場合は、名前が示すように、データの変更に反応しているように見えます。確かに、Reactive Cocoa(およびC#のRx)には、データの変更でトリガーされるシグナルを作成するという概念があり、時間をかけて継続的に値を変更するために使用できます。 これは違いですか?そうでない場合、何ですか? (不適切なタグ付けはご容赦ください。関連するタグが見つからず、まだ作成できません。可能な場合は、タグをより適切なものに更新してください。)

1
最短共通スーパーストリング:指定されたすべてのストリングフラグメントを含む最短ストリングを検索
いくつかの文字列フラグメントを考えて、すべてのフラグメントを含む最短の単一文字列(「出力文字列」)を見つけたいと思います。フラグメントは、出力文字列で互いにオーバーラップできます。 例: 文字列フラグメントの場合: BCDA AGF ABC 次の出力文字列にはすべてのフラグメントが含まれており、単純な追加によって作成されています。 BCDAAGFABC ただし、この出力文字列はオーバーラップを使用するため、より優れています(短い)。 ABCDAGF ^ ABC ^ BCDA ^ AGF この問題のアルゴリズムを探しています。厳密に最短の出力文字列を見つけることは絶対に重要ではありませんが、短いほど良いです。入力フラグメントのすべての順列を追加し、オーバーラップ(NP完全と思われる)を削除しようとする明白な単純なアルゴリズムよりも優れたアルゴリズムを探しています。 私は解決策に取り組み始めましたが、それは非常に興味深いことを証明しています。他の人が何を思い付くのか見てみたいです。しばらくして、進行中の作業をこの質問に追加します。

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