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

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

30
2つのポインタのみを使用して、単一リンクリストを逆にする方法は?
2つのポインタのみを使用して、単一リンクリストを逆にするロジックが存在するのだろうか。 以下は、すなわち3つのポインタを使用して、単一リンクリストを反転させるために使用されp、q、r: struct node { int data; struct node *link; }; void reverse() { struct node *p = first, *q = NULL, *r; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } first = q; } リンクされたリストを逆にする他の代替はありますか?時間の複雑さの観点から、単一にリンクされたリストを逆にするための最良のロジックは何でしょうか?

13
クイックソート:ピボットの選択
Quicksortを実装する場合、ピボットを選択する必要があります。しかし、以下のような疑似コードを見ると、ピボットをどのように選択すればよいかわかりません。リストの最初の要素?他に何か? function quicksort(array) var list less, greater if length(array) ≤ 1 return array select and remove a pivot value pivot from array for each x in array if x ≤ pivot then append x to less else append x to greater return concatenate(quicksort(less), pivot, quicksort(greater)) ピボットを選択する概念と、異なるシナリオが異なる戦略を必要とするかどうかを誰かが私に理解するのを助けることができますか?

10
再帰と反復
再帰が使用されるすべての場所でforループを使用できると言うのは正しいですか?そして、再帰が通常遅い場合、forループ反復でこれを使用する技術的な理由は何ですか? そして、再帰をforループに変換することが常に可能な場合、それを行うための経験則はありますか?

4
幅優先検索(BFS)が同じことをより速く実行できるのに、なぜダイクストラのアルゴリズムを使用するのですか?
どちらも、単一のソースからの最短経路を見つけるために使用できます。BFSはで実行されO(E+V)、ダイクストラはで実行されO((V+E)*log(V))ます。 また、ダイクストラがルーティングプロトコルでよく使用されるのを見ました。 したがって、BFSが同じことをより速く実行できるのに、なぜダイクストラのアルゴリズムを使用するのでしょうか。

20
挿入ソートと選択ソート
挿入ソートと選択ソートの違いを理解しようとしています。 どちらも、ソートされていないリストとソートされたリストの2つのコンポーネントを持っているようです。どちらも、ソートされていないリストから1つの要素を取得し、適切な場所のソートされたリストに配置するようです。選択ソートは一度に1つずつ交換することでこれを実行し、挿入ソートは適切な場所を見つけて挿入するだけだと言っているサイト/本を見たことがあります。しかし、挿入ソートも入れ替わると言って、他の記事が何かを言うのを見ました。その結果、私は混乱しています。正規のソースはありますか?

30
配列の反転をカウントする
指定された配列:私は、次の手順を実行するアルゴリズムを設計していますA[1... n]、すべてのためにi < j、そのすべての反転ペアは、このような見つけますA[i] > A[j]。マージソートを使用して配列Aを配列Bにコピーしてから2つの配列を比較していますが、これを使用して反転の数を見つける方法を確認するのに苦労しています。ヒントやヘルプをいただければ幸いです。
108 algorithm 


5
ブルームフィルターを使用する利点は何ですか?
私はブルームフィルターについて読んでいますが、ばかげているように見えます。ブルームフィルターで達成できることは何でも、複数のスペースではなく1つのハッシュ関数を使用して、より少ないスペースで、より効率的に達成することができます。なぜブルームフィルターを使用するのですか?


14
重なり合う円の合計面積
最近、4つの円(中点と半径)があり、これらの円の和集合の面積を計算する必要があるという問題に遭遇しました。 画像の例: 2つの円は非常に簡単です。 三角形内にない各円の面積の割合を計算してから、三角形の面積を計算できます。 しかし、2つ以上の円があるときに使用できる賢いアルゴリズムはありますか?
107 algorithm  geometry  area 

2
平均シフトを使用した画像セグメンテーションの説明
誰かがMean Shiftセグメンテーションが実際にどのように機能するかを理解するのを手伝ってくれませんか? ここに私がちょうど作った8x8の行列があります 103 103 103 103 103 103 106 104 103 147 147 153 147 156 153 104 107 153 153 153 153 153 153 107 103 153 147 96 98 153 153 104 107 156 153 97 96 147 153 107 103 153 153 147 156 153 153 …

15
(x == 0 || x == 1)を単一の操作に簡略化することは可能ですか?
だから私はフィボナッチ数列のn番目の数をできるだけコンパクトな関数で書こうとしました: public uint fibn ( uint N ) { return (N == 0 || N == 1) ? 1 : fibn(N-1) + fibn(N-2); } しかし、これを変更することでこれをさらにコンパクトで効率的なものにできるかどうか疑問に思っています (N == 0 || N == 1) 単一の比較に。これを行うことができるいくつかの派手なビットシフト操作はありますか?


14
キーストロークA、Ctrl + A、Ctrl + C、Ctrl + Vを使用した最大文字数
これはグーグルからのインタビューの質問です。一人で解決することはできません。誰かが光を当てることはできますか? 文字「A」の最大数を生成するように、キーストロークのシーケンスを出力するプログラムを作成します。あなたが唯一の4つのキーを使用することが許可されていますA、Ctrl+ A、Ctrl+ CとCtrl+ V。Nキーストロークのみが許可されます。すべてのCtrl+文字は1つのキーストロークと見なされるため、Ctrl+ Aは1つのキーストロークです。 たとえば、シーケンスA、Ctrl+ A、Ctrl+ C、Ctrl+ Vは、4つのキーストロークで2つのAを生成します。 Ctrl + Aはすべて選択 Ctrl + Cはコピーです Ctrl + Vは貼り付け 数学をしました。任意のNに対して、Aのx数、1 Ctrl+ A、1 Ctrl+ Cおよびy Ctrl+を使用してV、max((N-1)/ 2)2のA を生成できます。いくつかN> Mの場合、多くのように使用することをお勧めしますCtrl+ As「は、Ctrl+ CとCtrl+ VシーケンスそれはAさんの数が2倍として。 シーケンスCtrl+ A、Ctrl+ V、Ctrl+ Cは既存の選択を上書きしません。選択したものにコピーした選択を追加します。
106 algorithm 

6
アルゴリズムがO(log n)の複雑さを持つ原因は何ですか?
big-Oについての私の知識は限られています。対数項が方程式に現れると、私はさらに驚かされます。 誰かがO(log n)アルゴリズムについて簡単に説明してもらえますか?対数はどこから来たのですか? これは特に、この中期的な練習問題を解決しようとしたときに発生しました。 X(1..n)とY(1..n)に整数の2つのリストが含まれ、それぞれが降順にソートされているとします。O(log n)時間アルゴリズムを使用して、2n個のすべての組み合わせ要素の中央値(またはn番目に小さい整数)を見つけます。exの場合、X =(4、5、7、8、9)およびY =(3、5、8、9、10)の場合、7は結合されたリストの中央値(3、4、5、5、7 、8、8、9、9、10)。[ヒント:バイナリ検索の概念を使用する]

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