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

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

5
LINQメソッドの実行時の複雑さ(Big-O)にはどのような保証がありますか?
私は最近LINQをかなり使い始めましたが、どのLINQメソッドの実行時の複雑さについてもまったく触れていません。明らかに、ここには多くの要素が関係しているので、議論をプレーンなIEnumerableLINQ-to-Objectsプロバイダーに限定しましょう。さらに、Funcセレクター/ミューテーター/などとして渡されたものはすべて安価なO(1)操作であると想定しましょう。 これは、すべてのシングルパス動作することを明らかに思える(Select、Where、Count、Take/Skip、Any/All、など)彼らは一度だけシーケンスを歩く必要があるので、O(n)となります。でもこれは怠惰の対象です。 より複雑な操作では物事は危険です。セットのような演算子(Union、Distinct、Except、など)を使用して作業GetHashCodeデフォルトでは(私の知る限り)、彼らが、一般的には、だけでなく、これらの操作のO(n)を作り、内部ハッシュ・テーブルを使用していると仮定するのが妥当と思われるので。を使用するバージョンはIEqualityComparerどうですか? OrderByソートが必要になるので、おそらくO(n log n)を調べています。すでに並べ替えられている場合はどうなりますか?私が言っOrderBy().ThenBy()て両方に同じキーを提供したらどうですか? 並べ替えまたはハッシュのいずれかを使用してGroupBy(およびJoin)を表示できました。どっち? ContainsはO(n)ですが、A ListはO(1)ですHashSet-LINQは基礎となるコンテナーをチェックしてスピードアップできるかどうかを確認しますか? そして本当の質問-これまでのところ、私は操作が高性能であることを信じてそれを取っています。しかし、それを利用することはできますか?たとえば、STLコンテナは、すべての操作の複雑さを明確に指定します。.NETライブラリ仕様のLINQパフォーマンスについて同様の保証はありますか? その他の質問(コメントへの回答): オーバーヘッドについてはあまり考えていませんでしたが、単純なLinq-to-Objectsについてはそれほど多くあるとは思いませんでした。CodingHorrorの投稿はLinq-to-SQLについて話しており、クエリを解析してSQLを作成するとコストが追加されることを理解できます。オブジェクトプロバイダーにも同様のコストがありますか?もしそうなら、宣言構文または関数構文を使用している場合とは異なりますか?

16
複数の列で配列をどのように並べ替えますか?
多次元配列があります。プライマリアレイは、 [publicationID][publication_name][ownderID][owner_name] 私がしようとしていることは、配列owner_nameを次に並べ替えることpublication_nameです。私はJavaScriptであなたが持っていることを知っています、あなたはArray.sort()カスタム関数を置くことができます、私の場合、私は持っています: function mysortfunction(a, b) { var x = a[3].toLowerCase(); var y = b[3].toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)); } これは、ただ一つの列に並べ替えるため、すなわちOWNER_NAME罰金ですが、どのように私は上の並べ替えにそれを修正するかowner_name、その後、publication_name?

30
リストのすべての可能な順列を生成するアルゴリズム?
n個の要素のリストがあるとします。n個あることを知っています。これらの要素を順序付けるための可能な方法。このリストのすべての可能な順序を生成するアルゴリズムとは何ですか?例、リスト[a、b、c]があります。アルゴリズムは[[a、b、c]、[a、c、b、]、[b、a、c]、[b、c、a]、[c、a、b]、[c、b 、a]]。 私はここでこれを読んでいます http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations しかし、ウィキペディアは説明が得意ではありませんでした。よくわかりません。

27
Cで整数の最上位セットビット(msb)を見つけるための最速/最も効率的な方法は何ですか?
整数nがあり、最上位ビットの位置を知りたい場合(つまり、最下位ビットが右側にある場合、1である左端のビットの位置を知りたい)、見つけるための最も速く/最も効率的な方法は何ですか? 私はPOSIX ffs()が最初のセットビットを見つけるためにstrings.hのメソッドをサポートしていることを知っていますが、対応するものがないようですfls()メソッド。 これを行うための本当に明らかな方法はありますか? 移植性のためにPOSIX関数を使用できない場合はどうですか? 編集:32ビットと64ビットの両方のアーキテクチャで機能するソリューションについてはどうですか(多くのコードリストは32ビットの整数でしか機能しないように見えます)。


6
緯度/経度とkmの距離を処理するための簡単な計算?
kmを緯度または経度の浮動小数点に追加して検索用の境界ボックスを計算できる値に変換する簡単な計算はありますか?完全に正確である必要はありません。 例:イギリスのロンドンの緯度/経度(51.5001524、-0.1262362)が与えられ、その地点から東西25 kmの緯度と、その南北25 kmの緯度を計算する場合ポイント、上記の値に追加するために25kmを小数に変換するにはどうすればよいですか? 私は一般的な経験則を探しています。つまり、1km == +/- 0.XXX 編集: 「lat lon」での最初の検索では、この結果は返されませんでした。 特定の緯度/経度の場所の境界ボックスを計算する方法は? 受け入れられた答えは私の要件には適切であるようです。

30
getMinimum()がO(1)になるようにスタックを設計する
これはインタビューの質問の1つです。getMinimum()関数がスタック内の最小要素を返すように、整数値を保持するスタックを設計する必要があります。 例:以下の例を検討してください ケース#1 5->トップ 1 4 6 2 getMinimum()が呼び出されると、最小要素である1を返す必要があります スタック。 ケース#2 stack.pop() stack.pop() 注:5と1の両方がスタックからポップされます。この後、スタック のように見えます 4->トップ 6 2 getMinimum()が呼び出されたときは、2を返す必要があります。これは、 スタック。 Constriants: getMinimumはO(1)の最小値を返す必要があります スペースの制約も設計時に考慮する必要があり、余分なスペースを使用する場合は一定のスペースにする必要があります。

6
最適なユダヤ人の足の爪の切断アルゴリズムは何ですか?
私は、足の爪を自動的にトリミングするマシンのソフトウェアに取り組んでいます。そのため、ユーザーは自分の足をその中に入れて実行するだけで、手動でかむことや爪切りを使用する必要はありません。 潜在的なユーザーベースのかなりの割合がユダヤ人である可能性が高く、明らかに、足指の爪(または指の爪)を順番どおりにトリミングしないという伝統があります。 この伝統の正確な適用については反対意見があるようですが、次のルールは、宗教的な慣習により爪を順番に切ることを禁止している人々に対応するのに十分だと思います。 隣接する2つの足指の爪を連続して切断しないでください 左足の切断順序は右足の順序と一致してはなりません 2つの連続したランの切断順序は同じであってはなりません。シーケンスは簡単には予測できないため、交互のシーケンスをハードコーディングしても機能しません。 これは、つま先に番号を付けることを決定した方法です。 5 4 3 2 1 1 2 3 4 5 Left foot Right foot 問題を解決するためのコードを作成しましたが、使用されているアルゴリズムは最適ではありません。実際、最悪の場合のパフォーマンスはO(∞)です。動作方法はbogosortに匹敵します。以下は、使用される実際のコードの疑似コードの簡略化です。 function GenerateRandomSequence sequence = Array[5] foreach (item in sequence) item = RandomNumberBetween(1,5) return sequence function GetToenailCuttingOrder while (true) sequence = GenerateRandomSequence() if (!AllItemsAreUnique(sequence)) continue if (NoTwoAdjacentItemsHaveConsecutiveNumbers(sequence)) return sequence …

9
キャッシュの無効化—一般的な解決策はありますか?
「コンピューターサイエンスには、キャッシュの無効化と名前の付け方という2つの難しい問題しかありません。」 フィル・カールトン キャッシュを無効にする一般的な解決策または方法はありますか?エントリが古くなったことを知るために、常に最新のデータを取得することが保証されていますか? たとえばgetData()、ファイルからデータを取得する関数について考えます。ファイルが最後に変更された時刻に基づいてキャッシュされ、呼び出されるたびにチェックされます。 次にtransformData()、データを変換する2番目の関数を追加し、その関数が次に呼び出されるときにその結果をキャッシュします。それはファイルの知識を持っていません-ファイルが変更された場合、このキャッシュが無効になるという依存関係をどのように追加しますか? が呼び出さgetData()れるたびに呼び出しtransformData()、それをキャッシュの構築に使用された値と比較できますが、結果として非常にコストがかかる可能性があります。

15
これは技術的には「Hello World」のO(1)アルゴリズムですか?
これは「Hello、World!」のO(1)アルゴリズムとして分類されますか??? public class Hello1 { public static void Main() { DateTime TwentyYearsLater = new DateTime(2035,01,01); while ( DateTime.Now < TwentyYearsLater ) { System.Console.WriteLine("It's still not time to print the hello ..."); } System.Console.WriteLine("Hello, World!"); } } 私は使用することを考えています DateTime TwentyYearsLater = new DateTime(2035,01,01); while ( DateTime.Now < TwentyYearsLater ) { // …
117 c#  .net  algorithm  big-o 

16
2つの任意の頂点間のすべての接続を見つけるグラフアルゴリズム
以下で説明するタスクを実行するための最適な時間効率の良いアルゴリズムを決定しようとしています。 一連のレコードがあります。このレコードのセットには、このセットのレコードのペアが相互に接続する方法を示す接続データがあります。これは基本的に無向グラフを表し、レコードは頂点であり、接続データはエッジです。 セット内のすべてのレコードには接続情報があります(つまり、孤立したレコードはありません。セット内の各レコードは、セット内の他の1つ以上のレコードに接続しています)。 セットから任意の2つのレコードを選択し、選択したレコード間のすべての単純なパスを表示できるようにしたいと思います。「単純なパス」とは、パスに繰り返しレコードがないパス(つまり、有限パスのみ)を意味します。 注:選択した2つのレコードは常に異なります(つまり、開始頂点と終了頂点が同じになることはなく、サイクルはありません)。 例えば: 次の記録がある場合: A、B、C、D、E 以下は接続を表しています。 (A、B)、(A、C)、(B、A)、(B、D)、(B、E)、(B、F)、(C、A)、(C、E)、 (C、F)、(D、B)、(E、C)、(E、F)、(F、B)、(F、C)、(F、E) [(A、B)は、レコードAがレコードBに接続することを意味します] 開始レコードとしてBを選択し、終了レコードとしてEを選択した場合、レコードBをレコードEに接続するレコード接続を通るすべての単純なパスを見つけたいと思います。 BをEに接続するすべてのパス: B-> E B-> F-> E B-> F-> C-> E B-> A-> C-> E B-> A-> C-> F-> E これは一例です。実際には、何十万ものレコードを含むセットがある場合があります。

16
上位10の検索用語を見つけるアルゴリズム
私は現在インタビューの準備をしていますが、前回のインタビューで一度尋ねられた質問を思い出しました。 「Googleで上位10の検索語を継続的に表示するソフトウェアを設計するように求められました。Googleで現在検索されている検索語の無限のリアルタイムストリームを提供するフィードへのアクセス権が与えられます。どのアルゴリズムとデータ構造を説明してくださいこれを実装するには、次の2つのバリエーションを設計します。 (i)すべての時間(つまり、フィードの読み取りを開始してから)の上位10の検索語を表示します。 (ii)毎月更新された、過去1か月の上位10の検索用語のみを表示します。 概算を使用して上位10のリストを取得できますが、選択を正当化する必要があります。」 私はこのインタビューで爆破しましたが、これを実装する方法はまだまったくわかりません。 最初の部分では、無限リストの継続的に成長するサブシーケンスで最も頻繁に使用される10個のアイテムを要求します。選択アルゴリズムを調べましたが、この問題を解決するためのオンラインバージョンが見つかりませんでした。 2番目の部分では有限のリストを使用しますが、大量のデータが処理されるため、1か月分の検索語をメモリに格納して1時間ごとにヒストグラムを計算することはできません。 トップ10リストが継続的に更新されているため、問題はさらに困難になっているため、スライディングウィンドウでトップ10を計算する必要があります。 何か案は?

1
「アルゴリズム設計マニュアル」の解決策はどこにありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? Stack Overflowのトピックとなるように質問を更新します。 7年前休業。 この質問を改善する この本には興味深い質問がたくさんありますが、私は自分で学んでいるので、少なくともいくつかの質問に対する解決策を見つけることができれば、非常に役立ちます。 誰もがこれについて何か知っていますか?
115 algorithm 

5
スペルチェッカーで提案されるアルゴリズムはどれですか。
単語の候補を伴うスペルチェッカーを実装する場合、通常どのようなアルゴリズムが使用されますか? 最初に、入力した新しい単語(辞書に見つからない場合)を、辞書の他のすべての単語からのレーベンシュタイン距離と比較して上位の結果を返すことを確認することは理にかなっていると思いました。ただし、これは非常に効率が悪く、辞書全体を繰り返し評価する必要があるようです。 これは通常どのように行われますか?

12
絞首刑難易度の単語を「簡単」、「中」、または「難しい」に分類するアルゴリズム
指定された難易度に一致する単語をゲームが選択できるように、絞首刑執行人ゲームの単語の「難易度」を決定するための適切なアルゴリズムは何ですか? 難易度は、必要な推測の数、文字の相対的な使用頻度(たとえば、珍しい文字が多い単語は推測が難しい場合がある)、および場合によっては単語の長さに関連しているように思われます。 単語がプレーヤーの語彙に含まれている可能性や、単語の頻度だけに基づく推測戦略から、既知の一致する単語。 私の今の試みはルビーの下にあります。分類を改善する方法について何か提案はありますか? def classify_word(w) n = w.chars.to_a.uniq.length # Num. unique chars in w if n < 5 and w.length > 4 return WordDifficulty::Easy end if n > w.length / 2 return WordDifficulty::Hard else return WordDifficulty::Medium end end 私は子供たちに遊んでもらいたい絞首刑執行人ゲームを書いています。私はかなり古すぎて「宿題」をしようとしないので、質問が非常に多くの反対票を受け取っているのかもしれません...単語は、多数のあいまいな単語を含む大きな単語データベースからランダムに抽出され、難易度によってフィルタリングされています言葉のために決定した。
114 algorithm 

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