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

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


9
モジュラス演算子の代わりにビットごと
たとえば、2のべき乗のモジュロは次のように表現できることがわかります。 x % 2 inpower n == x & (2 inpower n - 1). 例: x % 2 == x & 1 x % 4 == x & 3 x % 8 == x & 7 2つの数値の一般的な非べき乗についてはどうですか? まあ言ってみれば: x%7 ==?
89 algorithm 

26
主キーはどうですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 私のチームでのかなり活発な議論で、私はほとんどの人が主キーとして好きなものを考えるようにさせられました。次のグループがありました Int / BigIntは、自動インクリメントで十分な主キーです。 主キーを構成する列が少なくとも3つ必要です。 Id、GUID、および人間が読める行識別子は、すべて異なる方法で処理する必要があります。 PKの最善のアプローチは何ですか?あなたがあなたの意見を正当化できればそれは素晴らしいでしょう。上記より良いアプローチはありますか? 編集:誰でも簡単にサンプル/アルゴリズムを使用して、適切にスケーリングできる行の人間が読める識別子を生成できますか?

8
要素を効率的に検索する方法
最近私はインタビューをしていて、彼らは私に「検索」の質問をしました。 問題は: (正の)整数の配列があり、各要素が隣接要素と比較されるか、+1または-1比較されると仮定します。 例: array = [4,5,6,5,4,3,2,3,4,5,6,7,8]; 次に7、その位置を検索して返します。 私はこの答えを出しました: 値を一時配列に格納し、並べ替えてから、バイナリ検索を適用します。 要素が見つかった場合は、一時配列内のその位置を返します。 (数値が2回発生している場合、最初の発生を返します) しかし、彼らはこの答えに満足していないようでした。 正しい答えは何ですか?

14
実装するボロノイ図の最も簡単なアルゴリズム?[閉まっている]
閉まっている。この質問は、StackOverflowのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、StackOverflowのトピックになります。 昨年休業。 この質問を改善する ボロノイ図を実装するための簡単なアルゴリズムは何ですか? 疑似形式のアルゴリズムは特に見つかりませんでした。ボロノイ図アルゴリズム、チュートリアルなどのリンクをいくつか共有してください。

4
反復文字列追加の時間計算量は実際にはO(n ^ 2)ですか、それともO(n)ですか?
私はCTCIの問題に取り組んでいます。 第1章の3番目の問題は、次のような文字列を取ることです。 'Mr John Smith ' 中間スペースを%20次のように置き換えるように求められます: 'Mr%20John%20Smith' 著者はこのソリューションをPythonで提供し、O(n)と呼んでいます。 def urlify(string, length): '''function replaces single spaces with %20 and removes trailing spaces''' counter = 0 output = '' for char in string: counter += 1 if counter > length: return output elif char == ' ': output = output + …

13
円内の点の位置を計算する
現時点では、これについて少し頭がおかしいです。すべての点が中心から、そして互いに等距離にあると仮定して、中心点の周りの点の位置を計算する必要があるという問題があります。 ポイントの数は可変なのでDrawCirclePoints(int x) 、簡単な解決策があると確信していますが、私の人生では、それを見ることができません:)

16
基数システムに基づくアルゴリズム?[閉まっている]
現在のところ、この質問は私たちのQ&A形式には適していません。回答は事実、参考資料、または専門知識によって裏付けられることを期待していますが、この質問は、討論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善して再開できると思われる場合は、ヘルプセンターにアクセスしてガイダンスを入手してください。 8年前に閉鎖されました。 私は最近、創造的な基盤での数字の巧妙な使用に部分的または全体的に基づいた非常に多くのアルゴリズムがあることに気づきました。例えば: 二項ヒープは2進数に基づいており、より複雑なスキュー二項ヒープはスキュー2進数に基づいています。 辞書式順序の順列を生成するためのいくつかのアルゴリズムは、階乗進法に基づいています。 試行は、適切なベースについて、一度に1桁の文字列を見るツリーと考えることができます。 ハフマン符号化ツリーは、ツリーの各エッジが何らかのバイナリ表現で0または1を符号化するように設計されています。 フィボナッチ符号化は、フィボナッチ検索で使用され、特定のタイプの対数を反転します。 私の質問は、直感や証明の重要なステップとして巧妙な記数法を使用する他のアルゴリズムはありますか?。私はこのテーマについて話をまとめることを考えているので、私が引き出さなければならない例が多ければ多いほど良いです。

12
隣接する等しい要素なしでリストのすべての順列を生成します
リストを並べ替えるとき a = [1,2,3,3,2,2,1] sorted(a) => [1, 1, 2, 2, 2, 3, 3] 結果のリストでは、等しい要素が常に隣接しています。 どうすれば反対のタスクを実行できますか?リストをシャッフルして、等しい要素が決して(またはできるだけまれに)隣接しないようにしますか? たとえば、上記のリストの場合、考えられる解決策の1つは次のとおりです。 p = [1,3,2,3,2,1,2] より正式には、リストが与えられると、ペアの数を最小化するリストaの順列pを生成しp[i]==p[i+1]ます。 リストは大きいため、すべての順列を生成してフィルタリングすることはできません。 ボーナス質問:そのようなすべての順列を効率的に生成する方法は? これは私がソリューションをテストするために使用しているコードです:https://gist.github.com/gebrkn/9f550094b3d24a35aebd UPD:多くの人が優れた回答を投稿したため、ここで勝者を選ぶのは難しい選択でした。@VincentvanderWeele、@デビッドEisenstat、@Coady、@ enrico.bacisと@srgerg完璧に可能な限り最高の順列を生成する機能を提供します。@tobias_kとDavidもボーナスの質問に答えました(すべての順列を生成します)。正しさの証明のためのDavidへの追加のポイント。 @VincentvanderWeeleのコードが最速のようです。

28
リストにない最小の整数を見つける
私の同僚が使用する興味深いインタビューの質問: 符号なし64ビット整数の非常に長いソートされていないリストが与えられたとします。リストにない最小の非負の整数をどのように見つけますか? フォローアップ:ソートによる明らかな解決策が提案されたので、O(n log n)よりも速く実行できますか? フォローアップ:アルゴリズムは、たとえば1GBのメモリを搭載したコンピュータで実行する必要があります 明確化:リストはRAMにありますが、大量に消費する可能性があります。リストのサイズ、たとえばNが事前に与えられます。
87 arrays  algorithm 

12
コンピュータサイエンスでの並べ替えと「現実の」世界での並べ替え
私はソフトウェアのソートアルゴリズムと、O(nlogn)障害を乗り越えるための可能な方法について考えていました。実用的な意味での高速ソートは不可能だと思いますので、そうは思わないでください。 そうは言っても、ほとんどすべてのソートアルゴリズムでは、ソフトウェアは各要素の位置を知っている必要があるようです。それ以外の場合、いくつかの並べ替え基準に従って各要素をどこに配置するかをどのように知ることができますか? しかし、私がこの考えを現実の世界と交差させたとき、遠心分離機は、密度によって分子を「分類」するときに、各分子がどの位置にあるのかわかりません。実際、各分子の位置は関係ありません。しかし、各分子が密度と重力の法則に従っているという事実のために、比較的短期間で何兆ものアイテムを何兆もの分類することができます-それは私に考えさせられました。 各ノードにいくらかのオーバーヘッド(各ノードに追加された値またはメソッド)を使用して、リストの順序を「強制」することは可能でしょうか?遠心分離機のようなもので、各要素のみが(他のノードとの関係で)空間内の相対位置を気にします。または、これは計算のルールに違反していますか? ここで取り上げられた大きなポイントの1つは、自然の量子力学的効果と、それらがすべての粒子に同時に並行して適用される方法だと思います。 おそらく、古典的なコンピューターは本質的にソートをのドメインに制限しますがO(nlogn)、量子コンピューターはそのしきい値を超えてO(logn)並列に動作するアルゴリズムにできる可能性があります。 基本的に並列バブルソートである遠心分離機は正しいように思われるという点は、時間計算量がO(n)です。 次の考えは、自然が分類O(n)できるのなら、なぜコンピューターができないのかということだと思います。

5
順列を怠惰に生成する
Clojureでそれらの遅延リストを作成できるような方法でセットの順列を生成するアルゴリズムを探しています。つまり、各順列は要求するまで計算されず、すべての順列を一度にメモリに保存する必要がない順列のリストを繰り返し処理したいと思います。 あるいは、特定のセットが与えられると、そのセットの「次の」順列を返すアルゴリズムを探しています。これにより、独自の出力で関数を繰り返し呼び出すと、元のセットのすべての順列が循環します。いくつかの順序(順序は関係ありません)。 そのようなアルゴリズムはありますか?私が見た順列生成アルゴリズムのほとんどは、それらをすべて一度に(通常は再帰的に)生成する傾向があり、非常に大きなセットに拡張することはできません。Clojure(または別の関数型言語)での実装は役に立ちますが、擬似コードから理解できます。

3
クラスにスワップ関数を提供する方法は?
swapSTLアルゴリズムで自分を有効にする適切な方法は何ですか? 1)メンバーswap。std::swapSFINAEトリックを使用してメンバーを使用しますかswap。 2)swap同じ名前空間に自立している。 3)の部分的な特殊化std::swap。 4)上記のすべて。 ありがとうございました。 編集:私は私の質問を明確に表現しなかったようです。基本的に、私はテンプレートクラスを持っており、そのクラス用に作成した(効率的な)スワップメソッドを使用するにはSTLアルゴリズムが必要です。
87 c++  algorithm  stl  swap 


11
挿入ソートとバブルソートアルゴリズム
いくつかのソートアルゴリズムを理解しようとしていますが、バブルソートと挿入ソートのアルゴリズムの違いを理解するのに苦労しています。 両方ともO(n 2)であることは知っていますが、バブルソートでは、パスごとに配列の最大値が一番上にバブルされ、挿入ソートでは、パスごとに最小値が一番下に沈むように見えます。彼らはまったく同じことをしているのではありませんが、異なる方向に向かっていますか? 挿入ソートの場合、比較/潜在的なスワップの数はゼロから始まり、毎回増加します(つまり、0、1、2、3、4、...、n)が、バブルソートの場合、これと同じ動作が発生しますが、バブルソートは、ソート時に最後の要素と比較する必要がなくなったため、ソート(つまり、n、n-1、n-2、... 0)。 しかし、これらすべてについて、一般的に挿入ソートの方が優れているというコンセンサスのようです。誰か教えてもらえますか? 編集:私は主に、アルゴリズムの効率や漸近的な複雑さではなく、アルゴリズムの動作の違いに関心があります。

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