タグ付けされた質問 「amortized-analysis」

9
抽出を持つ優先度キューが存在しますか?
プライオリティキューインターフェイスを実装するデータ構造は非常に多くあります。 挿入:構造に要素を挿入します Get-Min:構造内の最小要素を返します Extract-Min:構造内の最小要素を削除します このインターフェイスを実装する一般的なデータ構造は、(最小)ヒープです。 通常、これらの操作の(償却)実行時間は次のとおりです。 挿入:(時々O(log n ))O(1)O(1)\mathcal{O}(1)O(ログn )O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) Extract-Min:O(ログn )O(log⁡n)\mathcal{O}(\log n) フィボナッチヒープは、例えば、これらの実行中の時間を実現します。さて、私の質問は次のとおりです。 次の(償却)実行時間のデータ構造はありますか? 挿入:O(ログn )O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) 抽出分:O(1)O(1)\mathcal{O}(1) ソートされた入力が与えられたときに時間でそのような構造を構築できる場合、例えば、o (nO(n)O(n)\mathcal{O}(n)交差点は、「通常の」優先度キューを使用する場合よりも厳密に高速です。o (nログn)o(nlog⁡n)o\left(\frac{n}{\log n}\right)

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

2
償却時間での検索、挿入、削除を伴うデータ構造?
償却時間で次の操作をサポートする順序付きリストを維持するためのデータ構造はありますか?O(1)O(1)O(1) GetElement(k):リストの番目の要素を返します。kkk InsertAfter(x、y):新しい要素yをリストのxの直後に挿入します。 Delete(x):リストからxを削除します。 最後の2つの操作では、xがデータ構造への直接のポインターとして与えられていると仮定できます。InsertElementは、yに対応するポインターを返します。InsertAfter(NULL、y)は、リストの先頭にyを挿入します。 たとえば、空のデータ構造から始めて、次の操作は順序付きリストを次のように更新します。 InsertAfter(NULL、a) [a]⟹⟹\implies InsertAfter(NULL、b) [b、a]⟹⟹\implies InsertAfter(b、c) [b、c、a]⟹⟹\implies InsertAfter(a、d) [b、c、a、d]⟹⟹\implies Delete(c) [b、a、d]⟹⟹\implies これらの5つの更新後、GetElement(2)はdを返し、GetElement(3)はエラーを返します。

2
C ++ベクトルのpush_backが常に償却されるのはなぜですか?
私はC ++を学習していますが、ベクターのpush_back関数の実行時間が一定の「償却」であることに気付きました。文書にはさらに、「再割り当てが行われた場合、再割り当て自体が全体のサイズで線形になります」と記載されています。 これは、push_back関数がであることを意味するべきではありません。ここで、nはベクトルの長さです。結局のところ、最悪の場合の分析に興味がありますよね?O(n)O(n)O(n)nnn 決定的に、形容詞「償却」が実行時間をどのように変えるか理解していないと思います。

1
NP困難な問題は平均して多項式になることができますか?
平均的な場合の「多項式」であるな問題があるかどうか疑問に思っています。これを解釈するには2つの方法があると思いますか?NPNPNP 場合、解くアルゴリズムが存在し得るのタイムランニング(平均場合)償却と-hard問題定数を?N P O (n k)kP≠ NPP≠NPP \neq NPNPNPNPO (nk)O(nk)O(n^k)kkk やもあるハードな問題はありますか?B P P P PNPNPNPB PPBPPBPPPPPPPP だれでもこれらの質問のいずれかに答えるか、または参照を提供できますか

1
ポテンシャル関数バイナリヒープ抽出最大O(1)
最大ヒープが償却時間で完了するように、最大​​ヒープの潜在的な関数を理解する手助けが必要です。潜在的な方法をよく理解していないことを付け加えておきます。O (1 )O(1)O(1) 抽出のコストを削減するために、挿入関数はさらに「支払う」必要があることを知っています。これは、ヒープの高さに関するものでなければなり(if log (n )⌋がヒープの高さを与える場合挿入は2 log (n )または∑ n k = 1 2 log (k ))⌊ ログ(n )⌋⌊log⁡(n)⌋ \lfloor \log(n) \rfloor 2 ログ(n )2log⁡(n)2\log(n)Σんk = 12 ログ(k )∑k=1n2log⁡(k) \sum_{k=1}^n 2\log(k)

1
インクリメンタルな強連結コンポーネント
変化する有向グラフについて、強く接続されたコンポーネントに関する情報を維持したいと思います。グラフ操作はインクリメンタルです。頂点の追加とエッジの追加のみです。これらの操作で最もよく知られている償却済みの複雑さを実現するデータ構造はどれですか。 グラフが無向の場合、答えはunion-find構造になります。また、無向グラフは有向グラフの特殊なケースと見なすことができるので、(少しでも)超定数の下限が引き継がれます。 線形の上限の場合、強連結成分は、データをまったくリサイクルせずに、エッジを追加するたびに最初から計算できます。もっと上手にできる方法があるのか​​な。 これが必要な状況では、どういうわけか、重要なSCCはルールではなく例外であることを期待しています。そして、サイクルの不在の中で、私は合計で線形時間を達成することができます(つまり、操作ごとの一定時間の償却)[編集:]どういう意味かを明確にしましょう。もちろん、不在のサイクルでは、SCCを追跡する必要はまったくありません。償却された一定の時間は、SCCを心配する以外に、私の設定で行うことです。 したがって、一般的には、上記の上限よりは良くないが、グラフがDAGのままである限り、操作ごとに一定の償却時間を使用するデータ構造にも関心があります。

4
償却分析に関する質問
アルゴリズムと複雑さに関する試験の準備として、私は現在、古い演習を解いています。初めて遭遇したときにすでに苦労してきた概念の1つは、償却分析の概念です。償却分析とは何ですか?私たちの講義ノートには、「償却分析は特定の操作に必要な「平均時間」の限界を与え、最悪の場合の限界を与えることもある」と述べられています。それは本当に便利に聞こえますが、例について言えば、私が何をしなければならないのかわからず、サンプルソリューションを読んだ後でも、彼らが何をしているのかわかりません。 基数2に1を加算してみましょう。つまり、0、1、10、11、100、101、110、111、1000、...償却分析を使用して、各ステップで変更する必要があるのは常に多くのビットだけを償却することを示します。 (元々はドイツ語での演習なので、完全に正確ではないかもしれない私の翻訳をお詫びします) ここで、標準解は最初に、いくつかの定数に対してを定義し。これは、潜在的な関数と呼ばれるもので、過剰な時間の単位に何らかの形で対応しているものだと思います(ただし、この特定の定義を思い付く理由はわかりません)。番目のステップでビットを変更する必要があると仮定します。そのようなステップは常に次の形式ですφ (I ):= C ⋅ #{ バイナリ表現における1ビット}ϕ(i):=c⋅#{1-bits in the binary representation}\phi(i) := c \cdot \# \{\text{1-bits in the binary representation}\}c > 0c>0c > 0メートルmm私ii …01…1m→…10…0m.…01…1⏟m→…10…0⏟m.\dots \underbrace{0 1 \dots 1}_m \to \dots \underbrace{1 0 \dots 0}_m. この発言は私には理解できますが、やはりその背後にある動機はわかりません。次に、どこからともなく、彼らは彼らが「見積もり」と呼ぶものを思いつきます a(i)=m+c(ϕ(i)−ϕ(i−1))=m+c(−m+2)a(i)=m+c(ϕ(i)−ϕ(i−1))=m+c(−m+2)a(i) = m + c(\phi(i) - \phi(i-1)) = m + c(-m …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.