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

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

2
複数のアレイにわたる2つの数値間の最大平均距離
あなたが持っていると言うkサイズの配列Nから一意の値それぞれ含有1するがN。 平均してお互いに最も離れている2つの数値をどのように見つけますか? たとえば、次の配列があるとします。 [1,4,2,3] [4,2,3,1] [2,3,4,1] 最初の2つの配列では距離が2離れており、最後の配列では3つの数値が離れているため、答えはitem 1と2になります。 私はO(kN ^ 2)解を知っています(各k配列の数値の各ペア間の距離を測定することによって)が、より良い解決策はありますか? このようなアルゴリズムをC ++で実装したいのですが、ソリューションの説明があれば役に立ちます。

7
中心の周りの円の点を取得するための効率的なアルゴリズム
問題 特定のポイントについて、特定の半径の円内にあるすべてのピクセルを取得したいのですが、ポイントは整数座標しか持てません。つまり、キャンバス内のピクセルです。 だから私は、与えられた黄色の領域内のすべてのポイントを取得したい(x, y)とr。 アプローチ 私が考えることができる最も効率的な方法は、正方形をループして各ポイントのユークリッド距離を(x, y)確認することです。 for (int px = x - r; px <= x + r; px++) { for (int py = y - r; py <= y + r; py++) { int dx = x - px, dy = y - py; if (dx * dx …

3
整数の組み合わせを効率的に選択
0で満たされた5x5の行列があるとしましょう。 myMatrix <- matrix(rep(0, 25), ncol = 5) それでは、1から5までの整数のトリプレットを選びましょう。 triplet <- c(1,2,3) このトリプレットのすべての組み合わせについて、次の関数を使用して、マトリックスに1を追加します。 addCombinationsToMatrix <- function(.matrix, .triplet){ indexesToChange <- as.matrix(expand.grid(.triplet, .triplet)) .matrix[indexesToChange] <- .matrix[indexesToChange] + 1 .matrix } 関数を使用して、 myMatrix [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 0 0 [2,] 0 0 0 0 0 [3,] 0 0 …

4
スクロールアルゴリズム—データのフェッチと表示の改善
理論的な問題について少し述べたいと思います。 私が無限のスクロールを持っていて、ここで説明されているようなものを実装したとします:https : //medium.com/frontend-journeys/how-virtual-infinite-scrolling-works-239f7ee5aa58。特別なことは何もありません。それは、データのテーブル、たとえばNxNであると言えば十分です。ユーザーは、スプレッドシートのように、右下にスクロールでき、現在のビューとマイナスのデータのみを表示します。扱う。 ここで、次のような関数を使用して、そのビューでデータを「フェッチして表示」するのに約10ミリ秒かかるとしましょう。 get_data(start_col, end_col, start_row, end_row); これは、スクロールバーのどこかをクリックするか、必要なデータをレンダリングするために「わずかにスクロール」するときに即座に読み込まれます。ただし、すべての「未完了のフェッチイベント」について、必要なビューデータのレンダリングに2倍の時間がかかると仮定します(メモリ、GC、その他いくつかの理由により)。したがって、ゆっくりと意図的に左から右にスクロールすると、データのロードをトリガーする100以上のスクロールイベントが生成される可能性があります-最初は著しく遅延はありません。フェッチは10ミリ秒未満で発生しますが、すぐに20ミリ秒、次に40ミリ秒かかり、必要なデータをロードするために1秒以上かかるまで、かなりの遅延が発生します。さらに、デバウンス/遅延のようなものは使用できません。 どのような考慮事項を考慮に入れる必要があり、これを実現するためのサンプルアルゴリズムはどのように見えますか?これは、10000 x 10000のスプレッドシート(​​Excelはすべてのデータを一度に読み込むことができます)を想定した、データに対するユーザー操作の例です-https://gyazo.com/0772f941f43f9d14f884b7afeac9f414。

3
ソートされたベクトルに、特定の値に加算されるペアがあるかどうかを線形時間で調べます
std::vector昇順で並べ替えられた個別の要素を考慮して、合計が特定の値であるコレクションに2つの要素があるかどうかを判断するアルゴリズムを開発したいと思いますsum。 私はそれぞれのトレードオフで2つの異なるアプローチを試しました: ベクトル全体をスキャンし、ベクトルの各要素std::lower_boundに対してsum、現在の要素との差に対応する要素を検索するために、ベクトルにバイナリ検索()を適用できます。これは、追加のスペースを必要としないO(n log n)時間ソリューションです。 ベクトル全体をトラバースしてにデータを入力できstd::unordered_setます。次に、ベクトルをスキャンし、各要素std::unordered_setについて、とsum現在の要素の違いを調べます。ハッシュテーブルの検索は平均して一定の時間で実行されるため、このソリューションは線形時間で実行されます。ただし、このソリューションでは、std::unordered_setデータ構造のために追加の線形スペースが必要です。 それにもかかわらず、線形時間で実行され、追加の線形スペースを必要としないソリューションを探しています。何か案は?スピードとスペースのトレードオフを強いられているようです。
8 c++  algorithm  c++11  search  stl 

1
最長K順次増加サブシーケンス
重複したスレッドを作成した理由 Kの例外が許可された最長の増加するサブシーケンスを読んだ後、このスレッドを作成しました。質問をしている人は、「1つの変更を許可して最長のサブアレイを増やす」問題を解決するリンクを参照していたため、問題を本当に理解していないことに気付きました。したがって、彼が得た答えは実際にはLIS問題とは無関係でした。 問題の説明 配列Aが長さNで与えられていると仮定します。K例外を許可して、最も長く増加するサブシーケンスを見つけます。 例 1)N = 9、K = 1 A = [3,9,4,5,8,6,1,3,7] 正解:7 説明: 最も長いサブシーケンスの増加は、3、4、5、8(または6)、1(例外)、3、7->合計= 7です。 2)N = 11、K = 2 A = [5,6,4,7,3,9,2,5,1,8,7] 答え:8 これまでに行ったこと... K = 1の場合、許可される例外は1つだけです。O(NlogN)の最長増加サブシーケンスを計算するための既知のアルゴリズムを使用する場合(ここをクリックしてこのアルゴリズムを表示)、配列の各要素に対してA [0]からA [N-1]までのLISを計算できます。 A.結果をサイズNの新しい配列Lに保存します。例n.1を見ると、L配列は L = [1,2,2,3,4,4,4,4,5]になります。 逆のロジックを使用して、配列Rを計算します。各要素には、N-1から0までの現在の最長減少シーケンスが含まれています。 1つの例外を除き、LISはsol = max(sol、L [i] + R [i + 1])です。 ここで、solはsol = L [N-1]として初期化されます。したがって、LISを0からインデックスi(例外)まで計算し、次にN-1まで新しいLISを停止および開始します。 …


2
C ++で負の数と正の数の両方を含む文字列の配列を並べ替える方法は?
String str[]={"-123","89","-10","456"}; str文字列の配列であり、各文字列は整数の形式であり、この配列に対してO(n log n)時間内にソートを実行する必要があります。 の文字列はstr、正と負の両方の整数を表すことができます。これらの文字列の最大長は1024文字です。 この問題の1つの解決策は、文字列を数値に変換し、これとは別に比較することです。この問題の他の解決策はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.