diff --git a/content/Alberi Binomiali.md b/content/Alberi Binomiali.md new file mode 100644 index 00000000..4b1a2e9d --- /dev/null +++ b/content/Alberi Binomiali.md @@ -0,0 +1,5 @@ +--- +tags: + - Algoritmi/StruttureDati + - Algoritmi/PrimaProva +--- diff --git a/content/Analisi Ammortizzata.md b/content/Analisi Ammortizzata.md new file mode 100644 index 00000000..bb812721 --- /dev/null +++ b/content/Analisi Ammortizzata.md @@ -0,0 +1,24 @@ +--- +tags: + - Algoritmi/PrimaProva + - Algoritmi + - Algoritmi/AnalisiAmmortizzata +--- +Per analizzare sequenze di $n$ operazioni. +Si determina un tempo complessivo $T(n)$ che viene in qualche modo ripartito tra le $n$ operazioni. + +$\dfrac{T(n)}{n}:\text{costo ammortizzato per operazione.}$ + +La stima ottenuta non è probabilistica, si tratta di una media nel caso peggiore. + +**Tre Metodi**: +- [[Metodo dell'Aggregazione]] +- [[Metodo degli Accantonamenti]] +- [[Metodo del Potenziale]] + +**Esempi** +* [[Stack Multipop]] +* [[Contatore binario]] + +**Applicazione Reale** +- [[Tabella Dinamica]] diff --git a/content/B-Tree.md b/content/B-Tree.md new file mode 100644 index 00000000..4b1a2e9d --- /dev/null +++ b/content/B-Tree.md @@ -0,0 +1,5 @@ +--- +tags: + - Algoritmi/StruttureDati + - Algoritmi/PrimaProva +--- diff --git a/content/Contatore binario.md b/content/Contatore binario.md new file mode 100644 index 00000000..49f6e6e8 --- /dev/null +++ b/content/Contatore binario.md @@ -0,0 +1,78 @@ +--- +tags: + - Algoritmi/AnalisiAmmortizzata +--- +# Contatore Binario con Increment + +Sia $A[0,\dots ,k-1]$ un array di k Bit. +$$ +\begin{flalign} +& \text{Value}[A] = \displaystyle\sum^{k-1}_{i=0}A[i]\times 2^{i} \\ + +& \text{Value}[\text{Increment}(A)] = \text{Value}[A]+1 (mod\ 2^{k}) \\ +\end{flalign} +$$ +1101011 $\to$ 1101100 + +$\LARGE\overset{7\quad \! \! 6\quad \! \! 5\quad \! \! 4\quad \! \!3 \quad \! \! 2\quad \! \! 1\quad \! \! 0 }{\boxed{0}\boxed{0}\boxed{0}\boxed{1}\boxed{0}\boxed{0}\boxed{0}\boxed{0}}$ + +```c +Increment(A) +i = 0 +while (i0 do: + POP(s) + k-- +``` + +$\text{Multipop}(S) \to O(min(|S|,k))$ + +Analisi di una sequenza di $n$ operazioni su uno stack inizialmente vuoto. +- $|S| = \mathbf{O}(n)$ +- Costo di una singola operazione $= \mathbf{O}(n)$ +- Costo di $n$ operazioni $=n \mathbf{O}(n) = \mathbf{O}(\color{red}{n^{2}}\color{white})$ +Questa è una sovrastimazione del costo effettivo che potremmo ottenere. + +## Multipop con [[Metodo dell'Aggregazione|Aggregazione]] + +Lo stack è inizialmente vuoto. Le operazioni di Pop e Push sono elementari, mentre MultiPop(S,k) è un'operazione composta (da più pop). +Sia $op_{i}$ una qualsiasi operazione (pop, push, multipop): + +$\underbrace{ op_{1},op_{2},op_{3},\dots,op_{n-1},op_{n} }_{ \downarrow }$ $\quad \longleftarrow \quad${Pop, Push, Multipop} +$op'_{1},op'_{2},op'_{3},\dots,op'_{m-1},op'_{m}$ $\quad \longleftarrow \quad${Pop, Push} + +Ossia abbiamo ora $m$ operazioni elementari. Ogni multipop è stata scomposta in una sequenza di pop semplici. + +Costo $\mid\mid$ = costo $\mid\mid$ = $\large m$ + +Cioè abbiamo fatto: + +$\large\text{Multipop}(S,k) \quad \longrightarrow \quad \underbrace{ \text{Pop}(S),\dots,\text{Pop}(S) }_{ min(\mid S\mid,k) }$ + +Per questo cambia l'indice da n ad m. +$min(\mid S\mid,k)$ significa che multipop esegue per $k$ volte, oppure fino a svuotamento totale dello stack. + + +> [!example] Multipop $\to$ Sequenza di Pop +> $\quad\qquad\Large\text{Multipop}(4)$ +> $\overbrace{ \large\overset{op'4}{\text{Pop}(S)},\Large\overset{op'4}{\text{Pop}(S)},\Large\overset{op'4}{\text{Pop}(S)} }^{\color{red}\downarrow}$ + +### Upper Bound numero Pop + +Il numero delle pop può al più essere il numero delle push effettuate nello stack. + +$\#\text{Pop}(op'_{1},\dots,op'_{m}) \leq \#Push(op'_{1},\dots,op'_{m}) = \#Push(op_{1},\dots,op_{n}) \leq n$ + +Cioè il numero di push non varia nella semplificazione di multipop in sequenze di pop. + +Pertanto + +$\#Pop(\dots) \leq n$ + +Da cui troviamo il costo $T(n)$: +$$\large +\begin{align} + T(n)& = \text{costo}(\langle op_{1},\dots,op_{n}\rangle) = \text{costo}(\langle op'_{1},\dots,op'_{m}\rangle) \\ +& = \#\text{pop}(\langle op'_{1},\dots,op'_{m}\rangle) +\#\text{push}(\langle op'_{1},\dots,op'_{m}\rangle) \\ +& \leq n+m \\ & \\ +& \text{Costo Ammortizzato per Operazione: } \dfrac{T(n)}{n} \leq \dfrac{2\cancel{ n }}{\cancel{ n }}=2 +\end{align} +$$ + +## Multipop con [[Metodo degli Accantonamenti|Accantonamenti]] + +## Multipop con [[Metodo del Potenziale|Potenziale]] \ No newline at end of file diff --git a/content/Union-Find.md b/content/Union-Find.md new file mode 100644 index 00000000..30693392 --- /dev/null +++ b/content/Union-Find.md @@ -0,0 +1,7 @@ +--- +tags: + - Algoritmi + - Algoritmi/PrimaProva + - Algoritmi/StruttureDati +draft: true +--- diff --git a/content/Untitled.md b/content/Untitled.md new file mode 100644 index 00000000..e69de29b diff --git a/content/index.md b/content/index.md new file mode 100644 index 00000000..1045bba3 --- /dev/null +++ b/content/index.md @@ -0,0 +1,23 @@ +--- +title: "Algoritmi: indice" +draft: false +tags: +--- +- [[Alberi Binomiali]] +- [[Analisi Ammortizzata]] +- [[B-Tree]] +- [[Contatore binario]] +- [[Funzione di Ackermann]] +- [[Heap Binomiali]] +- [[Heap di Fibonacci]] +- [[Union-Find]] +- [[Kruskal's Algorithm]] +- [[Mergeable Heaps]] +- [[Metodo degli Accantonamenti]] +- [[Metodo del Potenziale]] +- [[Metodo dell'Aggregazione]] +- [[Move To Front]] +- [[Notazione di Knuth]] +- [[Prim's Algorithm]] +- [[Splay Tree]] +- [[Stack Multipop]]- \ No newline at end of file