aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic GUEGAN <loic.guegan@yahoo.fr>2019-01-27 20:29:42 +0100
committerLoic GUEGAN <loic.guegan@yahoo.fr>2019-01-27 20:29:42 +0100
commit2dfdbfbb498d0584a8147279464039c49bea515a (patch)
treee4f757e812a7a895f4efa5a5d059562817d2c1c3
parent30765ae30d516eda228447408b59be03712f5b17 (diff)
Update comments
-rw-r--r--src/quick-find.lisp23
-rw-r--r--src/quick-union.lisp29
-rw-r--r--src/weighted-quick-union.lisp34
3 files changed, 55 insertions, 31 deletions
diff --git a/src/quick-find.lisp b/src/quick-find.lisp
index dd371b8..21bd6d5 100644
--- a/src/quick-find.lisp
+++ b/src/quick-find.lisp
@@ -1,4 +1,11 @@
-;; Create network nodes
+;;;; Quick Find Algorithm
+;;;; This algorithm solve dynamic connectivity
+;;;; problem by providing a way to find if there
+;;;; is a path between two nodes in a dynamic graph
+
+
+;;; Base functions
+
(defun create-network (n)
"Build a quick-find network using a dynamic vector"
(let ((nodes (make-array n :fill-pointer 0)))
@@ -6,11 +13,6 @@
(vector-push id nodes))
nodes))
-;; Check if two nodes are connected
-(defmacro connected (network n1 n2)
- " Return t if there is a path between n1 and n2, nil otherwise. connected represent the find operation of the Quick Find Algorithm"
- `(= (elt ,network ,n1) (elt ,network ,n2)))
-
;; Link two nodes in the network
(defun union_ (network n1 n2)
"Link two nodes in the quick-find network. union_ represent the union operation of the Quick Find Algorithm"
@@ -21,9 +23,14 @@
(if (= (elt new-network n) v-n2) (setf (elt new-network n) v-n1)))
new-network))
-;; Union consing version
+;;; Macro definitions
+
+(defmacro connected (network n1 n2)
+ " Return t if there is a path between n1 and n2, nil otherwise. connected represent the find operation of the Quick Find Algorithm"
+ `(= (elt ,network ,n1) (elt ,network ,n2)))
+
(defmacro nunion_ (network n1 n2)
- "A cosing version of union_"
+ "A consed version of union_"
`(setq ,network (union_ ,network ,n1 ,n2)))
diff --git a/src/quick-union.lisp b/src/quick-union.lisp
index ca61703..9b4e9d8 100644
--- a/src/quick-union.lisp
+++ b/src/quick-union.lisp
@@ -1,4 +1,13 @@
-;; Create network nodes
+;;;; Quick Union Algorithm
+;;;; This algorithm solve dynamic connectivity
+;;;; problem by providing a way to find if there
+;;;; is a path between two nodes in a dynamic graph.
+;;;; It is an improved version of the Quick Find algorithm
+;;;; It optimize the union function
+
+
+;;; Base functions
+
(defun create-network (n)
"Build a quick-find network using a dynamic vector"
(let ((nodes (make-array n :fill-pointer 0)))
@@ -6,20 +15,12 @@
(vector-push id nodes))
nodes))
-;; Find the root of a node
(defun find-root (network node)
"Find the root of a sub-tree in the network."
(do ((id node value)
(value (elt network node) (elt network value)))
((= id value) id)))
-;; Check if two nodes are connected
-(defmacro connected (network n1 n2)
- "Return true if n1 and n2 are connected and nil otherwise. connection represent
-the find operation on the Quick Union algorithm"
- `(= (find-root ,network ,n1) (find-root ,network ,n2)))
-
-;; Link two nodes together
(defun union_ (network n1 n2)
"Connect to sub-tree together. union represent the union operation on the Quick Union algorithm"
(let ((new-network (copy-seq network)))
@@ -27,7 +28,15 @@ the find operation on the Quick Union algorithm"
(find-root new-network n2))
new-network))
-;; A consed version of union_
+
+;;; Macro definitions
+
+(defmacro connected (network n1 n2)
+ "Return true if n1 and n2 are connected and nil otherwise. connection represent
+the find operation on the Quick Union algorithm"
+ `(= (find-root ,network ,n1) (find-root ,network ,n2)))
+
(defmacro nunion_ (network n1 n2)
+ "A consed version of union_"
`(setf ,network (union_ ,network ,n1 ,n2)))
diff --git a/src/weighted-quick-union.lisp b/src/weighted-quick-union.lisp
index 16b1aa5..7a3a3a7 100644
--- a/src/weighted-quick-union.lisp
+++ b/src/weighted-quick-union.lisp
@@ -1,27 +1,28 @@
-;; Create network nodes: A two dimensionnal array.
-;; 1st dimension = the network
-;; 2nd dimension = each subtree node quantities
+;;;; Weighted Quick Union Algorithm
+;;;; This algorithm solve dynamic connectivity
+;;;; problem by providing a way to find if there
+;;;; is a path between two nodes in a dynamic graph.
+;;;; It is an improved version of the Quick Union algorithm
+;;;; by improving the way that the union-tree is constructed
+;;;; The algorithm try to reduce the deepness of the tree in
+;;;; order to optimize the find-root function
+
+;;; Base functions
+
(defun create-network (n)
- "Build a quick-find network using a multi-dimensional dynamic vector"
+ "Build a quick-find network using a multi-dimensional dynamic vector:\n
+1st dimension = the network\n 2nd dimension = each subtree node quantities"
(let ((network (make-array `(2 ,n) :initial-element 1)))
(dotimes (id n)
(setf (aref network 0 id) id))
network))
-;; Find the root of a node
(defun find-root (network node)
"Find the root of a sub-tree in the network."
(do ((id node value)
(value (aref network 0 node) (aref network 0 value)))
((= id value) id)))
-;; Check if two nodes are connected
-(defmacro connected (network n1 n2)
- "Return true if n1 and n2 are connected and nil otherwise. connection represent
-the find operation on the Quick Union algorithm"
- `(= (find-root ,network ,n1) (find-root ,network ,n2)))
-
-;; Link two nodes together
(defun union_ (network n1 n2)
"Connect to sub-tree together. union represent the union operation on the Quick Union algorithm"
(let ((new-network (copy-tree network))) ; Duplicate network
@@ -39,9 +40,16 @@ the find operation on the Quick Union algorithm"
new-network)))
+;;; Macro definitions
+
+
+(defmacro connected (network n1 n2)
+ "Return true if n1 and n2 are connected and nil otherwise. connection represent
+the find operation on the Quick Union algorithm"
+ `(= (find-root ,network ,n1) (find-root ,network ,n2)))
-;; A consed version of union_
(defmacro nunion_ (network n1 n2)
+ "A consed version of the union function."
`(setf ,network (union_ ,network ,n1 ,n2)))