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

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


8
整数のストリームから実行中の中央値を見つける
重複の可能性: Cのローリングメディアンアルゴリズム 整数がデータストリームから読み取られると仮定します。これまでに読み込まれた要素の中央値を効率的な方法で見つけます。 私が読んだソリューション:左側の最大ヒープを使用して有効中央値よりも小さい要素を表し、右側の最小ヒープを使用して有効中央値よりも大きい要素を表すことができます。 着信要素を処理した後、ヒープ内の要素の数は最大で1要素だけ異なります。両方のヒープに同じ数の要素が含まれている場合、ヒープのルートデータの平均が有効な中央値であることがわかります。ヒープのバランスが取れていない場合は、より多くの要素を含むヒープのルートから有効な中央値を選択します。 しかし、最大ヒープと最小ヒープをどのように構築するのでしょうか。つまり、ここで有効な中央値をどのようにして知るのでしょうか。max-heapに1つの要素を挿入してから、min-heapに次の1つの要素を挿入する、というように、すべての要素について考えます。私がここで間違っているなら、私を訂正してください。
223 algorithm  heap  median 



5
SSL証明書はどのように検証されますか?
SSL証明書を安全に検証するために必要な一連の手順は何ですか?私の(非常に限られた)理解では、httpsサイトにアクセスすると、サーバーが証明書をクライアント(ブラウザー)に送信し、ブラウザーはその証明書から証明書の発行者情報を取得し、それを使用して発行者に連絡し、何らかの形で比較します。有効性の証明書。 これはどのように正確に行われますか? プロセスは、中間者攻撃の影響を受けないようにしますか? ランダムな人物が中間者攻撃で使用するために独自の検証サービスをセットアップして、すべてが「安全」に見えるようにするのを妨げているのは何ですか?


9
log(n!)=Θ(n・log(n))ですか?
私はそれを示すために午前ログを(N!)=Θ(nは・ログ(N)) 。 上限をn nで示し、下限を(n / 2)(n / 2)で示すべきであるというヒントが与えられました。これは私にはそれほど直感的に思えません。なぜそうなのでしょうか?n nをn・log(n)に変換する方法(つまり、方程式の両辺をログに記録する方法)は確実にわかりますが、それは一種の逆の作業です。 この問題に取り組むための正しいアプローチは何でしょうか?再帰ツリーを描画する必要がありますか?これについて再帰的なことは何もないので、それはありそうなアプローチとは思えません。


30
爆弾投下アルゴリズム
n x m非負の整数で構成される行列があります。例えば: 2 3 4 7 1 1 5 2 6 2 4 3 4 2 1 2 1 2 4 1 3 1 3 4 1 2 1 4 3 2 6 9 1 6 4 「爆弾の投下」は、ターゲットセルの数とその隣接セルの8つすべての数を1つ減らし、最低ゼロにします。 x x x x X x x x x すべてのセルをゼロに減らすために必要な爆弾の最小数を決定するアルゴリズムは何ですか? Bオプション(注意深い読者ではないため) …

10
10個の数値を並べ替える最速の方法は?(数値は32ビットです)
私は問題を解決しており、10個の数値(int32)を非常に迅速にソートする必要があります。私のアプリケーションでは、10の数値を可能な限り数百万回並べ替える必要があります。私は数十億の要素のデータセットをサンプリングしていて、その中から10個の数値を選択(簡略化)してソートする必要があるたびに(ソートされた10個のエレメントリストから結論を出します)。 現在、挿入ソートを使用していますが、挿入ソートに勝る10個の数値という特定の問題に対して、非常に高速なカスタムソートアルゴリズムを実装できると思います。 この問題にどのように取り組むかについて誰かが何か考えを持っていますか?

29
C ++プログラムでのプログラムによるエンディアンの検出
ビッグエンディアンまたはリトルエンディアンのアーキテクチャを使用しているかどうかをプログラムで検出する方法はありますか?IntelまたはPPCシステムで実行され、まったく同じコードを使用できる(つまり、条件付きコンパイルがない)コードを記述できる必要があります。


12
ポリゴンの膨張/収縮(オフセット、バッファリング)のアルゴリズム
ポリゴンを「膨らませる」にはどうすればよいですか?つまり、私はこれに似た何かをしたいです: 要件は、新しい(インフレートされた)ポリゴンのエッジ/ポイントが古い(元の)ポリゴンからすべて同じ一定の距離にあることです(例の画像ではそうではありません。それから、膨らんだ頂点にアークを使用する必要があるためですが、今はそのことを忘れてください;))。 私が探している数学的用語は、実際には内側/外側のポリゴンオフセットです。これを指摘するためのbalintへの+1。別の名前は、ポリゴンバッファリングです。 私の検索の結果: ここにいくつかのリンクがあります: ポリゴンオフセット戦略の調査 ポリゴンオフセット、問題 ポリゴンデータのバッファリング

12
過負荷の飛行機から太っている人々を捨てる。
飛行機があり、燃料が少ないとしましょう。飛行機が乗客の体重の3000ポンドを落とさない限り、次の空港に到着することはできません。最大の命を救うために、一番重い人を飛行機から降ろしたいと思います。 そして、そうそう、飛行機には何百万人もの人がいるので、リスト全体をソートする必要はなく、最も重い乗客を見つけるための最適なアルゴリズムが欲しいのです。 これは、C ++でコーディングしようとしているもののプロキシの問題です。乗客のマニフェストで「partial_sort」を重量で実行したいのですが、必要な要素の数がわかりません。独自の "partial_sort"アルゴリズム( "partial_sort_accumulate_until")を実装することもできますが、標準のSTLを使用してこれを行う簡単な方法があるかどうか疑問に思っています。
200 c++  algorithm  sorting  stl 

14
インプレース基数ソート
これは長いテキストです。我慢してください。要約すると、問題は、実行可能なインプレース基数ソートアルゴリズムがあるかどうかです。 予備的 「A」、「C」、「G」、および「T」の文字のみを使用する小さな固定長の文字列が大量にあります(そうです、ご想像のとおり、DNAです)。 現時点では、STLのすべての一般的な実装でintrosortを使用std::sortします。これはかなりうまくいきます。しかし、基数ソートは私の問題セットに完全に適合し、実際にははるかにうまく機能するはずだと確信しています。 細部 私はこの仮定を非常に単純な実装でテストしました。比較的小さな入力(10,000程度)の場合、これは真実でした(少なくとも、2倍以上の速さ)。ただし、問題のサイズが大きくなると(N > 5,000,000)、ランタイムは少し低下します。 その理由は明らかです。基数ソートでは、データ全体をコピーする必要があります(実際には、私の単純な実装では2回以上)。これは、メインメモリに最大4 GiBを入れたことを意味します。問題のサイズが実際にはさらに大きくなるため、そうでなかったとしても、これだけのメモリを使用する余裕はありません。 ユースケース 理想的には、このアルゴリズムは、DNAおよびDNA5(追加のワイルドカード文字「N」を許可)、またはIUPAC 曖昧コード(結果として16個の異なる値)を持つDNAの場合でも、2〜100の任意の文字列長で機能する必要があります。しかし、これらすべてのケースをカバーすることはできないので、速度の向上に満足しています。コードは、どのアルゴリズムにディスパッチするかを動的に決定できます。 研究 残念ながら、基数ソートに関するウィキペディアの記事は役に立たない。インプレースバリアントに関するセクションは完全にゴミです。基数ソートのNIST-DADSセクションは、存在しないものの隣にあります。アルゴリズム「MSL」について説明しているEfficient Adaptive In-Place Radix Sortingと呼ばれる有望な論文があります。残念ながら、この論文も残念です。 特に、以下のことがございます。 まず、アルゴリズムにはいくつかの間違いがあり、説明がつかないままです。特に、再帰呼び出しの詳細については説明していません(現在のシフト値とマスク値を計算するためにポインターをインクリメントまたは削減すると単純に想定しています)。また、関数dest_groupを使用し、dest_address定義を行いません。これらを効率的に実装する方法がわかりません(つまり、O(1)で、少なくともdest_address簡単ではありません)。 最後に重要なことですが、アルゴリズムは、配列インデックスを入力配列内の要素と交換することにより、インプレースネスを実現します。これは明らかに数値配列でのみ機能します。文字列に使用する必要があります。もちろん、強い型付けをねじ込むだけで、メモリが属していないインデックスの格納をメモリが許容すると想定して先に進むことができます。しかし、これは、文字列を32ビットのメモリ(32ビット整数と仮定)に押し込める場合にのみ機能します。これはわずか16文字です(現時点では、16> log(5,000,000)であるため無視します)。 著者の1人による別の論文では、正確な説明はまったくありませんが、MSLの実行時間がサブリニアであり、これは完全に間違っています。 要約すると:機能するリファレンス実装、または少なくともDNA文字列で機能する機能するインプレース基数ソートの優れた疑似コード/説明を見つける可能性はありますか?

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