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

4
MapReduceの目新しさは何ですか?
数年前、MapReduceは分散プログラミングの革命として歓迎されました。批評家もいましたが、概して熱狂的な誇大宣伝がありました。それも特許を取得しました![1] 名前が連想させるmapとreduce関数型プログラミングでは、私が読んだとき(ウィキペディア) マップステップ:マスターノードは入力を受け取り、それをより小さなサブ問題に分割し、ワーカーノードに配布します。ワーカーノードがこれを順番に繰り返して、マルチレベルツリー構造になります。ワーカーノードは小さな問題を処理し、その応答をマスターノードに返します。 削減ステップ:マスターノードはすべてのサブ問題への回答を収集し、それらを何らかの方法で組み合わせて出力を形成します。これは元々解決しようとしていた問題への回答です。 または[2] MAPの内部: [...] MAPは入力値を単語に分割します。[...] MAPは、入力の指定された各キー/値ペアを潜在的に多くの中間キー/値ペアに関連付けることを目的としています。 REDUCEの内部: [...] [REDUCE]は、命令集約(たとえば、削減)を実行します。多くの値を取得し、それらを単一の値に削減します。 私は仕方がありません。これは、Mergesortの意味での分割と征服であり、単純で単純です!それで、MapReduceに(概念的な)目新しさはどこかにありますか、それとも特定のシナリオで役立つ古いアイデアの新しい実装ですか? 米国特許7,650,331:「効率的な大規模データ処理のためのシステムおよび方法」(2010) GoogleのMapReduceプログラミングモデル— R.Lämmelによる再訪(2007)

4
動的プログラミングとは何ですか?
この質問が愚かに聞こえる場合は、事前に申し訳ありません... 私の知る限り、動的プログラミングを使用したアルゴリズムの構築は次のように機能します。 問題を再帰関係として表現します。 メモ化またはボトムアップアプローチのいずれかを使用して、再帰関係を実装します。 私の知る限り、動的プログラミングに関するすべてを述べてきました。つまり、動的プログラミングでは、再帰関係を表現したり、コードに変換したりするためのツール/ルール/メソッド/定理は提供されません。 それでは、動的プログラミングの特別な点は何ですか?ある種の問題に取り組むための漠然とした方法以外に、それはあなたに何を与えますか?

1
左右の中央値と要素を効率的に選択する
コーダーののセットがあるとします。NS={a1,a2,a3,…,aN}S={a1,a2,a3,…,aN}S = \{ a_1,a_2,a_3,\ldots , a_N \}NNN 各コーダーの評価はで、金メダルの数はです。E iRiRiR_iEiEiE_i ソフトウェア会社は、アプリケーションを開発するために正確に3人のコーダーを雇いたいと考えています。 3人のコーダーを雇用するために、彼らは次の戦略を開発しました。 彼らはまず、評価者の昇順および金メダルの降順でコーダーを配置します。 この整理されたリストから、3人の中間コーダーを選択します。たとえば、配置されたリストが場合、コーダーを選択します。(a 2、a 3、a 1)(a5、2、3、1、4)(a5,a2,a3,a1,a4)(a_5,a_2,a_3,a_1,a_4)(a2、3、1)(a2,a3,a1)(a_2,a_3,a_1) ここで、このタスクのためのプログラムを作成して、会社を支援する必要があります。 入力: 最初の行には、つまりコーダーの数が含まれます。NNN 次に、2行目に番目のコーダーの評価が含まれます。 iR私RiR_i私ii 3行目には、番目のコーダーによってバギングされた金メダルの数が含まれています。私ii 出力: 会社が選択する3人のコーダーが獲得した金メダルの合計を含む1行のみを表示します。

2
要素が正確にインデックス±Mでない順列のカウント
私は最近、アルゴリズムのインタビューでこの問題を尋ねられ、解決できませんでした。 NとMの2つの値が与えられた場合、長さNの順列の数を数えなければなりません(1からNまでの数を使用)。順列の任意の数と順列のその位置の絶対差がMと等しくないようにします。 例-N = 3かつM = 1の場合、1 2 3および3 2 1は有効な順列ですが、数字3は位置2にあり、それらの差は= Mであるため、1 3 2は無効です。 NxM Dynamicプログラミングを試しましたが、繰り返しをカウントしない繰り返しを作成できませんでした。

2
動的プログラミングを使用して再帰アルゴリズムの時間の複雑さを軽減できるのはいつですか?
動的プログラミングは、再帰アルゴリズムの実行に必要な時間を短縮できます。動的プログラミングは、アルゴリズムの時間の複雑さを軽減するのに役立つことを知っています。再帰的アルゴリズムで満たされた場合、動的計画法を使用するとアルゴリズムの時間の複雑さが軽減されるという一般的な条件はありますか?動的プログラミングはいつ使用する必要がありますか?

1
スライス内の要素をカウントするための配列の前処理(RMQへの削減?)
配列を指定して、1、... 、nは自然数の≤ K、kは定数であるが、私は答えにしたいO (1 )の形式のクエリは:「何回んmはインデックス間の配列に現れIとj "?a1,…,ana1,…,ana_1,\ldots,a_n≤k≤k\leq kkkkO(1)O(1)O(1)mmmiiijjj アレイは線形時間で前処理する必要があります。特に、範囲の最小クエリに減少があるかどうかを知りたいです。 これは、で、間隔内の1の数を照会する場合のRMQと同等です。だから私たちはそれを使うことができます。SEの制限のため、自分の質問には答えられませんでした。k=1k=1k=1

1
挿入と削除が一方的である場合の効率的な検索のためのデータ構造
の要素を格納するためのデータ構造が必要 です。各要素は異なる時間関連付けられてい 。 は変動し、理論的な上限がありますが、これは通常使用されるものよりも桁違いに大きくなります。んんnt私t私t_iんんn 私のアプリケーションを通して、私はそれを保証することができます: 挿入された要素は、既存のすべての要素より常に新しいものです。つまり、時間関連付けられた要素が挿入された場合、ます。要素は1つずつ挿入されます。tˇtˇ\check{t}tˇ&gt; t私∀ I∈ 1 、... 、n個tˇ&gt;t私∀私∈1、…、ん\check{t}>t_i ∀ i ∈ {1,…,n} 最も古い要素のみが削除されます。つまり、要素が削除された場合、ます。削除は主に1つずつ行われますが、誤って格納された要素の割合が1未満である限り、要素の削除が遅れても直接的な害はありません。jjjtj&lt; t私 ∀ I∈{1、...、N}∖{J}tj&lt;t私 ∀私∈{1、…、ん}∖{j}t_j < t_i ~∀ i ∈ \lbrace 1,…,n \rbrace \setminus \lbrace j \rbrace 挿入と削除を除いて、私がする必要がある唯一のことは、、ある時間の2つの隣接する要素を見つけること。言い換えると、t_j &lt;\ tilde {t} &lt;t_kおよび∄l {\ {1、…、n \}:t_j &lt;t_l &lt;t_k となるような2つの要素jと kを見つける必要があります。t〜t〜\tilde{t}分私t私&lt; t〜&lt; 最大私t私分私t私&lt;t〜&lt;最高私t私\min\limits_i t_i < \tilde{t} < …

1
パラメータ化された複雑さのカーネル
(問題の)カーネルとは何か、またそれらの用途は何かを誰かに説明できますか?私のスライドは言う: パラメータ化された問題のカーネル LLL 変容です (x,k)↦(x′,k′)(x,k)↦(x′,k′)(x,k) \mapsto (x',k') そのような: (x,k)∈L⇔(x′,k′)∈L(x,k)∈L⇔(x′,k′)∈L(x,k) \in L \Leftrightarrow (x',k') \in L |x′|≤f(k)|x′|≤f(k)|x'| \leq f(k) いくつかの機能のために fff k′≤g(k)k′≤g(k)k' \leq g(k) いくつかの機能のために ggg 変換は多項式時間で計算する必要があります。 私の質問は: これは、固定パラメータが扱いやすいという問題とどのように関連していますか? カーネルが便利な理由は何ですか? この定義はどこから来たのですか。 スライドの例は頂点カバーの例ですが、実際にはわかりません。スライドが少し短いためです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.