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

アルゴリズムは、問題に対する抽象的な解決策を定義する明確に定義された一連のステップです。このタグは、問題がアルゴリズム設計に関連している場合に使用します。

12
Cのローリングメディアンアルゴリズム
私は現在、Cでローリングメジアンフィルター(ローリングミーンフィルターに類似)を実装するアルゴリズムに取り組んでいます。私の文献検索から、それを行うには2つの合理的に効率的な方法があるようです。1つ目は、値の初期ウィンドウを並べ替えてから、バイナリ検索を実行して新しい値を挿入し、反復ごとに既存の値を削除します。 2番目(Hardle and Steiger、1995、JRSS-C、アルゴリズム296から)は、両端にヒープ、もう一方に最小ヒープ、中央に中央値を持つ両頭ヒープ構造を構築します。これにより、O(n log n)の代わりに線形時間アルゴリズムが生成されます。 これが私の問題です。前者の実装は可能ですが、これを何百万もの時系列で実行する必要があるため、効率が非常に重要です。後者は実装が非常に難しいことがわかっています。RのstatsパッケージのコードのTrunmed.cファイルでコードを見つけましたが、かなり判読できません。 線形時間ローリングメディアンアルゴリズムの適切に作成されたC実装を知っている人はいますか? 編集:Trunmed.cコードへのリンクhttp://google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#mYw3h_Lb_e0/R-2.2.0/src/library/stats/src/Trunmed.c
114 c  algorithm  r  statistics  median 

30
ドルの価値を与えられたときにコインのすべての組み合わせを見つける方法
数か月前に面接準備のために書いているコードを見つけました。 私のコメントによると、それはこの問題を解決しようとしていました: セント単位のドルの値を指定して(たとえば、200 = 2ドル、1000 = 10ドル)、ドルの値を構成するコインのすべての組み合わせを見つけます。ペニー(1nie)、ニッケル(5¢)、ダイム(10¢)、およびクォーター(25¢)のみが許可されています。 たとえば、100が指定された場合、答えは次のようになります。 4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies 3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies etc. これは反復的かつ再帰的な方法で解決できると私は信じています。私の再帰的な解決策は非常にバグが多く、他の人がこの問題をどのように解決するのか疑問に思っていました。この問題の難しい部分は、それを可能な限り効率的にすることでした。



8
ハッシュテーブルは本当にO(1)になるのでしょうか?
ハッシュテーブルがO(1)を達成できることは一般的な知識のようですが、それは私には意味がありませんでした。誰かがそれを説明できますか?頭に浮かぶ2つの状況を次に示します。 A. 値は、ハッシュテーブルのサイズよりも小さいintです。したがって、値は独自のハッシュであるため、ハッシュテーブルはありません。しかし、あったとしても、それはO(1)であり、それでも非効率的です。 B. 値のハッシュを計算する必要があります。この状況では、検索されるデータのサイズの順序はO(n)です。O(n)の作業を行った後、ルックアップはO(1)になるかもしれませんが、それでも私の目にはO(n)が出てきます。 また、完全なハッシュテーブルまたは大きなハッシュテーブルがない限り、バケットごとに複数のアイテムが存在する可能性があります。したがって、いずれにしても、ある時点で小さな線形検索に発展します。 ハッシュテーブルはすばらしいと思いますが、理論的なものでない限り、O(1)の指定はありません。 ウィキペディアのハッシュテーブルに関する記事は、常に一定のルックアップ時間を参照しており、ハッシュ関数のコストを完全に無視しています。それは本当に公正な措置ですか? 編集:私が学んだことを要約するには: ハッシュ関数はキーのすべての情報を使用する必要がないため、一定の時間になる可能性があり、十分に大きいテーブルは衝突を一定の時間に近づけることができるため、技術的には正しいです。 ハッシュ関数とテーブルサイズが衝突を最小限に抑えるように選択されている限り、一定の時間のハッシュ関数を使用しないことがよくあるので、時間が経つとうまくいきます。

27
二分木がバランスしているかどうかを判断するにはどうすればよいですか?
あの学校時代から久しぶりですね。病院でITスペシャリストとして仕事を得ました。今実際のプログラミングをするために移動しようとしています。現在、バイナリツリーに取り組んでおり、ツリーが高さのバランスが取れているかどうかを判断する最良の方法は何だろうと思っていました。 私はこれに沿って何かを考えていました: public boolean isBalanced(Node root){ if(root==null){ return true; //tree is empty } else{ int lh = root.left.height(); int rh = root.right.height(); if(lh - rh > 1 || rh - lh > 1){ return false; } } return true; } これは良い実装ですか?または私は何かを逃していますか?

12
高速順列->数->順列マッピングアルゴリズム
n個の要素があります。例として、7つの要素1234567があるとします。7つあることは知っています。=これらの7つの要素で可能な5040の順列。 2つの関数で構成される高速アルゴリズムが必要です。 f(number)は、0〜5039の数値を一意の順列にマップします。 f '(順列)は、順列を生成元の数にマッピングします。 番号と順列の対応は気にしません。各順列には固有の番号があります。 したがって、たとえば、私は関数を持っているかもしれません f(0) = '1234567' f'('1234567') = 0 頭に浮かぶ最も速いアルゴリズムは、すべての順列を列挙し、両方向にルックアップテーブルを作成することです。そのため、テーブルが作成されると、f(0)はO(1)になり、f( '1234567')は文字列の検索。ただし、これは特にnが大きくなるとメモリを大量に消費します。 誰もがすぐに動作し、メモリの不利な点なしに動作する別のアルゴリズムを提案できますか?

8
ダイクストラのアルゴリズムを使用した負の重み
ダイクストラのアルゴリズムが負の重みで機能しない理由を理解しようとしています。最短パスの例を読んで、私は次のシナリオを理解しようとしています: 2 A-------B \ / 3 \ / -2 \ / C ウェブサイトから: エッジがすべて左から右に向けられていると仮定すると、Aから開始すると、ダイクストラのアルゴリズムはd(A、A)+ length(edge)を最小化するエッジ(A、x)、つまり(A、B)を選択します。次に、d(A、B)= 2を設定し、d(A、y)+ d(y、C)を最小化する別のエッジ(y、C)を選択します。唯一の選択肢は(A、C)で、d(A、C)= 3を設定します。ただし、AからCを経由してBへの最短経路は決して見つかりません。全長は1です。 ダイクストラの次の実装を使用すると、d [B]がに更新されない理由を理解できません1(アルゴリズムが頂点Cに到達すると、Bでリラックスが実行され、d [B]がに等しいこと2を確認して、更新します。その値は1)。 Dijkstra(G, w, s) { Initialize-Single-Source(G, s) S ← Ø Q ← V[G]//priority queue by d[v] while Q ≠ Ø do u ← Extract-Min(Q) S ← S U {u} for …

30
最適な方法で二分探索木のk番目に小さい要素を見つける
静的/グローバル変数を使用せずに、バイナリ検索ツリーでk番目に小さい要素を見つける必要があります。それを効率的に達成する方法は?私が心に留めている解決策は、O(n)で操作を実行することです。これは、ツリー全体を順不同に走査することを計画しているため、最悪のケースです。しかし、ここのBSTプロパティは使用していないようです。私の仮定の解決策は正しいですか、それともより良い解決策がありますか?

5
ジョンカーマックの異常な高速逆平方根(Quake III)
ジョンカーマックは(float)(1.0/sqrt(x))、奇妙な0x5f3759df定数を含め、通常の4倍の速度でフロートの逆平方根を計算する、Quake IIIソースコードに特別な機能を備えています。以下のコードを参照してください。誰かがここで何が起こっているのか、なぜこれが通常の実装よりもはるかに速く機能するのかを行ごとに説明できますか? float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> 1 ); y = * ( float * ) …

19
ゲームの1秒あたりのフレーム数を計算する
ゲームの1秒あたりのフレーム数を計算するための適切なアルゴリズムは何ですか?画面の隅に数字で表示したい。最後のフレームをレンダリングするのにかかった時間だけを見ると、数値の変化が速すぎます。 回答が各フレームを更新し、フレームレートが増加する場合と減少する場合で異なって収束しない場合のボーナスポイント。

4
MapReduceソートアルゴリズムはどのように機能しますか?
MapReduceの威力を示すために使用される主な例の1つは、Terasortベンチマークです。MapReduce環境で使用される並べ替えアルゴリズムの基本を理解できません。 私にとって、ソートは単に、他のすべての要素との関係における要素の相対位置を決定することを含みます。したがって、ソートには「すべて」と「すべて」の比較が含まれます。平均的な並べ替えアルゴリズム(クイック、バブルなど)は、これをスマートな方法で単純に実行します。 私の考えでは、データセットを多くの部分に分割するということは、1つの部分を並べ替えることができ、これらの部分を「完全な」完全に並べ替えられたデータセットに統合する必要があることを意味します。テラバイトのデータセットが数千のシステムに分散していることを考えると、これは大きな仕事になると思います。 それで、これは実際にどのように行われますか?このMapReduce並べ替えアルゴリズムはどのように機能しますか? 理解してくれてありがとう。

30
JavaScriptの複数配列のデカルト積
OverаэтотвопросестьответынаStack Overflowнарусском:Декартовопроизведениенесколькихмассивов JavaScriptで複数の配列のデカルト積をどのように実装しますか? 例として、 cartesian([1, 2], [10, 20], [100, 200, 300]) 戻るはずです [ [1, 10, 100], [1, 10, 200], [1, 10, 300], [2, 10, 100], [2, 10, 200] ... ]

14
Pythonのモジュラー乗法逆関数
一部の標準Pythonモジュールには、数値のモジュラー乗法逆数を計算する関数が含まれてy = invmod(x, p)いx*y == 1 (mod p)ますか?グーグルはこれについて良いヒントを与えていないようです。 もちろん、拡張ユークリッドアルゴリズムの自家製の10ライナーを思い付くことができますが、なぜ車輪を再発明するのでしょうか。 たとえば、JavaにBigIntegerはhas modInverseメソッドがあります。Pythonには似たようなものはありませんか?
110 python  algorithm 

27
チェスに最適なアルゴリズムはありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 昨年休業。 この質問を改善する 私は最近、チェスコンピュータの可能性について、コーディング担当以外の人と話し合っていました。私は理論に精通していませんが、十分知っていると思います。 私は、チェスで常に勝ったり、止まったりする決定論的なチューリングマシンはあり得ないと主張しました。player1 / 2の動きのすべての組み合わせのスペース全体を検索しても、コンピューターが各ステップで決定する単一の動きは、ヒューリスティックに基づいていると思います。ヒューリスティックに基づいているため、対戦相手が実行できるすべての動きに必ずしも勝るとは限りません。 逆に、私の友人は、コンピュータが「間違い」の動きを起こさなければ、常に勝つか引き分けになると思っていました(しかし、あなたはそれをどのように定義していますか?)。しかし、CSを採用したプログラマーである私は、賢明な反対者が与えられたとしても、あなたの良い選択でさえ、結局は「間違い」の動きを強いられる可能性があることを知っています。あなたがすべてを知っているとしても、あなたの次の動きはヒューリスティックを一致させることに貪欲です。 ほとんどのチェスコンピュータは、可能なエンドゲームを進行中のゲームと一致させようとします。これは、本質的に動的プログラミングトレースバックです。繰り返しになりますが、問題のエンドゲームは回避可能です。 編集:うーん...私はここでいくつかの羽毛をラッフルのように見えます。それは良い。 もう一度考えてみると、チェスのような有限のゲームを解くことには理論的な問題はないようです。チェスはチェッカーよりも少し複雑だと主張します。勝利は必ずしも駒の数の枯渇によるものではなく、仲間によるものです。私の最初の主張はおそらく間違っていますが、私はまだ(正式には)まだ十分に証明されていないものを指摘したと思います。 私の考えた実験は、ツリー内の分岐が行われるときはいつでも、アルゴリズム(または記憶されたパス)は、対戦相手の移動の可能性のある分岐について、(結合されないで)合致へのパスを見つけなければならないというものだったと思います。話し合った後、私たちが夢見るよりも多くのメモリがあれば、これらのパスをすべて見つけることができたので、それを購入します。

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