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

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

17
反復可能オブジェクトを一定サイズのチャンクに分割する方法
重複の可能性: Pythonでリストを均等なサイズのチャンクに分割するにはどうすればよいですか? iterableを入力として受け取り、iterableのiterableを返す「バッチ」関数が見つからなかったことに驚いています。 例えば: for i in batch(range(0,10), 1): print i [0] [1] ... [9] または: for i in batch(range(0,10), 3): print i [0,1,2] [3,4,5] [6,7,8] [9] さて、私は非常に単純なジェネレーターだと思ったものを書きました。 def batch(iterable, n = 1): current_batch = [] for item in iterable: current_batch.append(item) if len(current_batch) == n: yield current_batch current_batch = [] …

7
文字列を比較するJavascriptは%of Likelyを返します
2つの文字列を比較して、それらが類似している可能性を返すことができるJavaScript関数を探しています。私はsoundexを見てきましたが、それは複数の単語の文字列や名前以外の場合にはあまり適していません。私は次のような関数を探しています: function compare(strA,strB){ } compare("Apples","apple") = Some X Percentage. この関数は、数値、複数単語の値、名前など、すべてのタイプの文字列で機能します。おそらく、私が使用できる簡単なアルゴリズムがありますか? Ultimately none of these served my purpose so I used this: function compare(c, u) { var incept = false; var ca = c.split(","); u = clean(u); //ca = correct answer array (Collection of all correct answer) //caa = a single …

26
Javaでセットのべき集合を取得する
のべき集合{1, 2, 3}は次のとおりです。 {{}, {2}, {3}, {2, 3}, {1, 2}, {1, 3}, {1, 2, 3}, {1}} 私がSetJavaを持っているとしましょう: Set<Integer> mySet = new HashSet<Integer>(); mySet.add(1); mySet.add(2); mySet.add(3); Set<Set<Integer>> powerSet = getPowerset(mySet); 関数getPowersetを、可能な限り複雑な順序で作成するにはどうすればよいですか?(O(2 ^ n)かもしれないと思います。)
86 java  algorithm  set  powerset 

13
統計的中央値、最頻値、歪度、尖度を推定するための「オンライン」(イテレーター)アルゴリズム?
値のセットの中央値、最頻値、歪度、および/または尖度を推定するアルゴリズムはありますが、すべての値を一度にメモリに保存する必要はありませんか? 基本的な統計を計算したいのですが: 平均:算術平均 分散:平均からの偏差の2乗の平均 標準偏差:分散の平方根 中央値:数値の大きい方の半分を小さい方の半分から分離する値 モード:セットで見つかった最も頻繁な値 歪度:tl; 博士 尖度:tl; 博士 これらのいずれかを計算するための基本的な式は、小学校の算数であり、私はそれらを知っています。それらを実装する多くの統計ライブラリもあります。 私の問題は、処理しているセット内の値の数が多い(数十億)ことです。Pythonで作業していると、数十億の要素でリストやハッシュを作成することはできません。これをCで書いたとしても、10億要素の配列はあまり実用的ではありません。 データはソートされていません。他のプロセスによって、オンザフライでランダムに生成されます。各セットのサイズは非常に可変であり、サイズは事前にわかりません。 セット内の各値を任意の順序で反復して、平均と分散をかなりうまく処理する方法をすでに理解しました。(実際、私の場合は、生成された順序でそれらを取得します。)これが私が使用しているアルゴリズムです。礼儀http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#On-line_algorithm: count、sum、sum_of_squaresの3つの変数を初期化します 各値について: インクリメントカウント。 合計に値を追加します。 値の2乗をsum_of_squaresに追加します。 合計をカウントで除算し、変数の平均として保存します。 sum_of_squaresをカウントで除算し、変数mean_of_squaresとして格納します。 二乗平均、square_of_meanとして保存。 mean_of_squaresからsquare_of_meanを減算し、分散として保存します。 出力の平均と分散。 この「オンライン」アルゴリズムには弱点があります(たとえば、sum_of_squaresが整数範囲または浮動小数点精度よりも急速に大きくなるための精度の問題)が、基本的に、各セットにすべての値を格納する必要がなく、必要なものが得られます。 しかし、追加の統計(中央値、最頻値、歪度、尖度)を推定するための同様の手法が存在するかどうかはわかりません。N値を処理するために必要なメモリがO(N)よりも大幅に少ない限り、偏りのある推定量、またはある程度精度を損なう方法でさえ生きることができます。 ライブラリにこれらの操作の1つ以上を「オンライン」で計算する関数がある場合は、既存の統計ライブラリを指すことも役立ちます。

10
4x4行列の反転
4x4行列を反転する方法のサンプルコード実装を探しています。ガウス分布、LU分解などがあることは知っていますが、それらを詳細に調べる代わりに、これを行うためのコードを探しています。 言語は理想的にはC ++であり、データは列優先順に16個のfloatの配列で利用できます。

11
特定の緯度経度の場所から特定の距離内にあるすべての緯度経度の場所を見つけるアルゴリズム
40.8120390、-73.4889650など、緯度と経度の場所のデータベースがある場合、特定の場所から特定の距離内にあるすべての場所を見つけるにはどうすればよいですか? DBからすべての場所を選択し、それらを1つずつ調べて、開始場所からの距離を取得し、指定された距離内にあるかどうかを確認するのは、あまり効率的ではないようです。DBから最初に選択した場所を絞り込む良い方法はありますか?絞り込んだ場所のセットを取得した後も(または取得しなかった場合)、距離を確認するためにそれらを1つずつ確認しますか、それとももっと良い方法がありますか? 私がこれを行う言語は実際には重要ではありません。ありがとう!

19
ビッグワードシーケンスで上位K個の頻繁な単語を見つける最も効率的な方法
入力:正の整数Kと大きなテキスト。テキストは実際には単語シーケンスとして表示できます。したがって、単語シーケンスに分解する方法について心配する必要はありません。 出力:テキスト内で最も頻繁に使用されるK語。 私の考えはこんな感じです。 ハッシュテーブルを使用して、単語シーケンス全体をトラバースしながら、すべての単語の頻度を記録します。このフェーズでは、キーは「単語」であり、値は「単語頻度」です。これにはO(n)時間がかかります。 (単語、単語-頻度)ペアを並べ替えます。そして鍵は「単語の頻度」です。これには、通常のソートアルゴリズムではO(n * lg(n))時間がかかります。 ソート後、最初のK語を取得します。これにはO(K)時間がかかります。 要約すると、合計時間はO(n + n lg(n)+ K)です。Kは確かにNよりも小さいため、実際にはO(n lg(n))になります。 これを改善することができます。実際には、上位K語だけが必要です。言い換えれば、頻度は私たちにとって重要ではありません。したがって、「部分ヒープソート」を使用できます。ステップ2)と3)については、ソートを行うだけではありません。代わりに、次のように変更します 2 ')「word-frequency」をキーとして(word、word-frequency)ペアのヒープを構築します。ヒープを構築するにはO(n)時間がかかります。 3 ')ヒープから上位K語を抽出します。各抽出はO(lg(n))です。したがって、合計時間はO(k * lg(n))です。 要約すると、このソリューションのコストは時間O(n + k * lg(n))です。 これは私の考えです。ステップ1)を改善する方法がわかりません。 一部の情報検索の専門家がこの質問にもっと光を当てることができることを願っています。

11
IDを難読化する
整数IDを別の整数に暗号化/難読化する方法を探しています。もっと正確に言えば、私は関数が必要なint F(int x)ので、 x <-> F(x)は1対1の対応です(x!= yの場合、F(x)!= F(y)) F(x)が与えられると、xを見つけるのは簡単です-したがって、Fはハッシュ関数ではありません xとF(x)が与えられると、F(y)を見つけるのは困難/不可能であり、次のようなものx ^ 0x1234は機能しません 明確にするために、私は強力な暗号化ソリューションを探していません。それは難読化だけです。以下のようなURLを使用したWebアプリケーションを想像しexample.com/profile/1、example.com/profile/2自身が秘密でないなどのプロファイルを、私は、私のようなものの後ろにそれらを隠すというと思いますので、すべてのプロファイルを次々にフェッチ/ビューにカジュアル覗きを防ぐしたいexample.com/profile/23423、example.com/profile/80980234などが、データベースに保存されたトークンは非常に簡単に仕事をすることができます、これに利用できるいくつかの簡単な数学があるかどうか私は興味があります。 私が明確にしなかった重要な要件の1つは、結果が「ランダム」に見える必要があることです。つまり、シーケンスが与えられた場合x,x+1,...,x+n、F(x),F(x+1)...F(x+n)いかなる種類の進行も形成しないようにする必要があります。


7
アルゴリズムの償却分析とは何ですか?[閉まっている]
クローズ。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。 5年前に閉鎖されました。 この質問を改善する 漸近解析とどう違うのですか?いつ使用しますか、またその理由は何ですか? 私はこれらのようによく書かれているように見えるいくつかの記事を読みました: http://www.ugrad.cs.ubc.ca/~cs320/2010W2/handouts/aa-nutshell.pdf http://www.cs.princeton.edu/~fiebrink/423/AmortizedAnalysisExplained_Fiebrink.pdf しかし、私はまだこれらの概念を完全には理解していません。 だから、誰かが私のためにそれを単純化してくれますか?

25
素数を生成する最もエレガントな方法[クローズ]
クローズ。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前に閉鎖されました。 この質問を改善する この関数を実装するための最もエレガントな方法は何ですか? ArrayList generatePrimes(int n) この関数は最初のn素数を生成するため(編集:where n>1)、withgeneratePrimes(5)を返します。(私はこれをC#で行っていますが、Javaの実装、またはその他の同様の言語(Haskellではない)に満足しています)。ArrayList{2, 3, 5, 7, 11} この関数の書き方は知っていますが、昨夜やったときは思ったほどうまくいきませんでした。これが私が思いついたものです: ArrayList generatePrimes(int toGenerate) { ArrayList primes = new ArrayList(); primes.Add(2); primes.Add(3); while (primes.Count < toGenerate) { int nextPrime = (int)(primes[primes.Count - 1]) + 2; while (true) { bool isPrime = true; foreach (int n in …
84 c#  java  algorithm  primes 

13
グラフのY軸に魅力的な線形目盛を選択する
ソフトウェアで棒(または折れ線)グラフを表示するためのコードを少し書いています。すべてが順調に進んでいます。私が困惑しているのは、Y軸にラベルを付けることです。 発信者は、Yスケールにどれだけ細かくラベルを付けたいかを教えてくれますが、私は「魅力的な」種類の方法でラベルを付ける方法に固執しているようです。私は「魅力的」とは言えませんし、おそらくあなたもそうは言えませんが、それを見るとわかりますよね? したがって、データポイントが次の場合: 15, 234, 140, 65, 90 そして、ユーザーはY軸に10個のラベルを要求します。紙と鉛筆を少しいじると、次のようになります。 0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250 したがって、そこには10(0を含まない)があり、最後の1つは最大値(234 <250)をわずかに超えて拡張され、それぞれ25の「適切な」増分です。彼らが8つのラベルを要求した場合、30の増分は見栄えがよいでしょう。 0, 30, 60, 90, 120, 150, 180, 210, 240 ナインはトリッキーだっただろう。たぶん、8か10のどちらかを使用して、それを十分に近いと呼んでも大丈夫でしょう。そして、いくつかのポイントが否定的である場合はどうすればよいですか? Excelがこの問題にうまく取り組んでいることがわかります。 これを解決するための汎用アルゴリズム(ブルートフォースでも大丈夫です)を知っている人はいますか?すぐにやる必要はありませんが、見栄えがするはずです。
84 algorithm  math  graph 

4
すべての島を結ぶための最低費用はいくらですか?
サイズのグリッドがあるN X Mは。一部のセルは「0」で示される島であり、他のセルは水です。各ウォーターセルには、そのセルに作成された橋のコストを示す番号が付いています。すべての島を接続できる最小コストを見つける必要があります。セルがエッジまたは頂点を共有している場合、そのセルは別のセルに接続されます。 この問題を解決するためにどのアルゴリズムを使用できますか?N、Mの値が非常に小さい場合、たとえばNxM <= 100の場合、ブルートフォースアプローチとして何を使用できますか? 例:指定された画像で、緑色のセルは島を示し、青色のセルは水を示し、水色のセルはブリッジを作成する必要があるセルを示します。したがって、次の画像の場合、答えは17になります。 最初は、すべての島をノードとしてマークし、島のすべてのペアを最短のブリッジで接続することを考えました。次に、問題を最小スパニングツリーに減らすことができますが、このアプローチでは、エッジがオーバーラップしている場合を見逃しました。たとえば、次の画像では、任意の2つの島の間の最短距離は7(黄色でマーク)であるため、最小スパニングツリーを使用すると答えは14になりますが、答えは11(水色でマーク)になります。

6
Viola-Jonesの顔検出は180kの機能を主張します
私はViola-Jonesの顔検出アルゴリズムの適応を実装してきました。この手法は、画像内に24x24ピクセルのサブフレームを配置し、その後、可能な限りすべてのサイズですべての位置に長方形のフィーチャを配置することに依存しています。 これらの機能は、2つ、3つ、または4つの長方形で構成できます。次の例を示します。 彼らは、網羅的なセットが180kを超えると主張しています(セクション2)。 検出器の基本解像度が24x24であることを考えると、長方形の特徴の網羅的なセットは非常に大きく、180,000を超えます。Haarベースとは異なり、長方形フィーチャのセットは不完全であることに注意してください。 以下の記述は本書に明示的に記載されていないため、私の側の仮定です。 2つの長方形のフィーチャが2つ、3つの長方形のフィーチャが2つ、4つの長方形のフィーチャが1つだけあります。この背後にある論理は、強調表示された長方形間の違いを観察しているということです。色や輝度などを明示的に観察しているわけではありません。 フィーチャタイプAを1x1ピクセルブロックとして定義することはできません。少なくとも1x2ピクセルである必要があります。また、タイプDは少なくとも2x2ピクセルである必要があり、このルールは他の機能にも適用されます。 中央のピクセルは分割できないため、フィーチャタイプAを1x3ピクセルブロックとして定義することはできません。それ自体からそれを差し引くことは、1x2ピクセルブロックと同じです。このフィーチャタイプは、偶数の幅に対してのみ定義されます。また、フィーチャタイプCの幅は3で割り切れる必要があり、このルールは他のフィーチャにも適用されます。 幅や高さが0のフィーチャを定義することはできません。したがって、xとyを24からフィーチャのサイズを引いた値まで繰り返します。 これらの仮定に基づいて、私は網羅的なセットを数えました: const int frameSize = 24; const int features = 5; // All five feature types: const int feature[features][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}}; int count = 0; // Each feature: for (int i = 0; i < features; i++) …

3
コード補完はどのように機能しますか?
多くのエディターとIDEにはコード補完があります。それらのいくつかは非常に「インテリジェント」であり、他は実際にはそうではありません。よりインテリジェントなタイプに興味があります。たとえば、a)現在のスコープで使用可能であるb)戻り値が有効である場合にのみ関数を提供するIDEを見てきました。(たとえば、「5 + foo [tab]」の後では、正しいタイプの整数または変数名に追加できるものを返す関数のみが提供されます。)また、より頻繁に使用されるオプションまたは最長のオプションが優先されることも確認しました。リストの。 コードを解析する必要があることを理解しています。ただし、通常、現在のコードの編集は無効ですが、構文エラーがあります。不完全でエラーが含まれているものをどのように解析しますか? 時間の制約もあります。リストを作成するのに数秒かかる場合、完了は役に立ちません。完了アルゴリズムが数千のクラスを処理する場合があります。 これに適したアルゴリズムとデータ構造は何ですか?

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