fix: cite sources

Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
Matej Focko 2022-05-18 22:59:26 +02:00
parent d3a9ebaf2e
commit 4b271e8a83
Signed by: mfocko
GPG key ID: 7C47D46246790496
2 changed files with 60 additions and 4 deletions

View file

@ -150,3 +150,59 @@
url = {https://sedgewick.io/wp-content/uploads/2022/03/2008-09LLRB.pdf}, url = {https://sedgewick.io/wp-content/uploads/2022/03/2008-09LLRB.pdf},
urldate = {2022-05-10} urldate = {2022-05-10}
} }
@SOFTWARE{llvm,
author = {{LLVM Project}},
title = {\texttt{\_\_tree}},
url = {https://github.com/llvm/llvm-project/blob/main/libcxx/include/__tree},
version = {commit \texttt{990ea39}},
date = {2022-05-02},
}
@SOFTWARE{jdk,
author = {{Oracle and/or its affiliates}},
title = {\texttt{TreeMap.java}},
url = {https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/TreeMap.java},
version = {commit \texttt{fb469fb}},
date = {2022-05-02},
}
@SOFTWARE{csharp,
author = {{.NET Foundation and Contributors}},
title = {\texttt{SortedSet.cs}},
url = {https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections/src/System/Collections/Generic/SortedSet.cs},
version = {commit \texttt{215b39a}},
date = {2022-05-02},
}
@SOFTWARE{agda,
author = {Daggitt, Matthew and Allais, Guillaume},
title = {\texttt{AVL.agda}},
url = {https://github.com/agda/agda-stdlib/blob/master/src/Data/Tree/AVL.agda},
version = {commit \texttt{d0841d1}},
date = {2022-05-02},
}
@SOFTWARE{ocaml,
author = {{Institut National de Recherche en Informatique et en Automatique}},
title = {\texttt{set.ml}},
url = {https://github.com/ocaml/ocaml/blob/trunk/stdlib/set.ml},
version = {commit \texttt{f52fdc2}},
date = {2022-05-02},
}
@SOFTWARE{coq,
author = {{INRIA, CNRS and contributors}},
title = {\texttt{MSetAVL.v}},
url = {https://github.com/coq/coq/blob/master/theories/MSets/MSetAVL.v},
version = {commit \texttt{c1ddf13}},
date = {2022-05-02},
}
@SOFTWARE{rust,
author = {{LLVM Project}},
title = {\texttt{\_\_tree}},
url = {https://github.com/rust-lang/rust/blob/master/library/alloc/src/collections/btree/map.rs},
version = {commit \texttt{9805437}},
date = {2022-05-02},
}

View file

@ -23,7 +23,7 @@ The lower bound is given by a perfect binary tree, and the upper bound is given
Other variants of the red-black tree are considered to be simpler for implementation, e.g. left-leaning red-black tree, as described by \textit{Sedgewick}~\cite{llrb}. Other variants of the red-black tree are considered to be simpler for implementation, e.g. left-leaning red-black tree, as described by \textit{Sedgewick}~\cite{llrb}.
Red-black trees are used to implement sets in C++~\footnote{\url{https://github.com/llvm/llvm-project/blob/main/libcxx/include/__tree} as of commit \texttt{990ea39}}, Java~\footnote{\url{https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/TreeMap.java} as of commit \texttt{fb469fb}} and C\#~\footnote{\url{https://github.com/dotnet/runtime/blob/main/src/libraries/System.Collections/src/System/Collections/Generic/SortedSet.cs} as of commit \texttt{215b39a}}. Red-black trees are used to implement sets in C++~\cite{llvm}, Java~\cite{jdk} and C\#~\cite{csharp}.
\section{AVL tree} \section{AVL tree}
@ -48,7 +48,7 @@ Similarly, we will deduce the height of the AVL tree from the original paper by
If we compare the upper bounds for the height of the red-black trees and AVL trees, we can see that AVL rules are more strict than red-black rules, but at the cost of rebalancing. However, in both cases, the rebalancing still takes $\log_2{n}$. If we compare the upper bounds for the height of the red-black trees and AVL trees, we can see that AVL rules are more strict than red-black rules, but at the cost of rebalancing. However, in both cases, the rebalancing still takes $\log_2{n}$.
Regarding the implementation of AVL trees, we can see them implemented in the standard library of Agda~\footnote{\url{https://github.com/agda/agda-stdlib/blob/master/src/Data/Tree/AVL.agda} as of commit \texttt{d0841d1}}, OCaml~\footnote{\url{https://github.com/ocaml/ocaml/blob/trunk/stdlib/set.ml} as of commit \texttt{f52fdc2}} or Coq~\footnote{\url{https://github.com/coq/coq/blob/master/theories/MSets/MSetAVL.v} as of commit \texttt{c1ddf13}; they also admit to follow the OCaml implementation}. Regarding the implementation of AVL trees, we can see them implemented in the standard library of Agda~\cite{agda}, OCaml~\cite{ocaml} or Coq~\footnote{They also admit to follow the OCaml implementation.}~\cite{coq}.
\section {B-tree} \section {B-tree}
@ -67,6 +67,6 @@ B-tree is a self-balancing tree as described by \textit{Bayer and McCreight}~\ci
We have chosen the rules from \textit{Introduction to Algorithms}~\cite{cormen2009introduction} because the terminology is more familiar and compact than the rules given in the original paper by \textit{Bayer and McCreight}~\cite{btree}, where they introduce B-trees for the organization of files in filesystems, as the title suggests. We have chosen the rules from \textit{Introduction to Algorithms}~\cite{cormen2009introduction} because the terminology is more familiar and compact than the rules given in the original paper by \textit{Bayer and McCreight}~\cite{btree}, where they introduce B-trees for the organization of files in filesystems, as the title suggests.
Based on the original paper~\cite{btree} and \textit{Introduction to Algorithms}~\cite{cormen2009introduction}, we have deduced the following height boundaries: Based on the original paper~\cite{btree} and \textit{Introduction to Algorithms}~\cite{cormen2009introduction}, we have deduced the following height boundaries:
\[ 1 + \log_{t}{ \left( \frac{(t - 1)(n - 1)}{2} + 1 \right)} \leq h \leq \log_t{\frac{n + 1}{2}} \] \[ h \leq \log_t{\frac{n + 1}{2}} \]
Even though the original paper has presented B-tree to be used in filesystems or databases, there are also cases when B-tree is used to represent sets, for example, in Rust~\footnote{\url{https://github.com/rust-lang/rust/blob/master/library/alloc/src/collections/btree/map.rs} as of commit \texttt{9805437}; $t = 6$}. Even though the original paper has presented B-tree to be used in filesystems or databases, there are also cases when B-tree is used to represent sets, for example, in Rust~\footnote{$t = 6$}~\cite{rust}.