J-O-Caml (6) [email protected] pauillac.inria.fr/~levy/qinghua/j-o-caml Qinghua, December 4.
J-O-Caml (2) [email protected] pauillac.inria.fr/~levy/qinghua/j-o-caml Qinghua, November...
-
Upload
godwin-logan-hardy -
Category
Documents
-
view
216 -
download
0
Transcript of J-O-Caml (2) [email protected] pauillac.inria.fr/~levy/qinghua/j-o-caml Qinghua, November...
Plan of this class
• compiling programs
• list processing
• pattern-matching
• new data types
• labeling algorithm
Compiling programs
prog1.ml
program textocamlc
binary
a.out
• ocamlc -o prog1 produces prog1 (executable byte code)
• ocamlc -c prog1.ml produces prog1.cmo (byte code)
• ocamlopt -c prog1.ml produces prog1.cmx (binary)
• also files prog1.cmi (compiled interfaces -- see later)
Printing
• or if printing many times:
List processing
List processing
• polymorphic types
• ‘a list (say ``alpha list’’) is type of list of any type, e.g. int list, bool list, ...
List processing
• Iterators on lists (~ arrays), but no List.make
• List.map f x
• List.iter f x
• List.fold_left f a x
• List.fold_right f a x
Exercices on lists
• Write mem a x which tests if a belongs to list x
• Write exists p x which tests if predicate p is true for one element of x; same forall p x which tests for all elements.
• Arbitrary precision numbers can be implemented by lists (little endian or big endian style). Write addition and multiplication algorithms.
• Conway sequence of lists starts with list [1]. Then next list is read from the previous one. Therefore [1; 1], [2; 1], [1; 2; 1; 1], [1; 1; 1; 2; 2; 1].... Print lists of Conway sequence. Is there any unlucky number ?
New data types
• products
New data types
• products
New data types
• sums
New data types
• sums
New data types
• recursive types
New data types
• recursive types
New data types
• recursive types
• recursive polymorphic types
New data types
• recursive types
• recursive polymorphic types
New data types
• recursive polymorphic types (alternative definition for binary trees)
New data types
• recursive polymorphic types (alternative definition for binary trees)
Caring about space
• with an extra argument as an accumulator of the result
Combien d’objetsdans une image?
Jean-Jacques LévyINRIA
Labeling
16 objects in this picture
1
1
2 3
4 5 6
78 9
10
11 12
13 14
Naive algorithm
1) choose an unvisited pixel
2) traverse all similar connected pixels
3) and restart until all pixel are visited
Very high complexity:
- how to find an unvisited pixel ?
- how organizing exploration of connected pixels (which direction?)
Algorithm
1) first pass
2) scan pixels left-to-right, top-to-bottom giving a new object id each time a new object is met
3) second pass
4) generate equivalences between ids due to new adjacent relations met during scan of pixels.
5) third pass
- compute the number of equivalence classes
Complexity:
- scan twice full image (linear cost)
- try to efficiently manage equivalence classes (Union-Find by Tarjan)
Animation
with Polka system for animated algorithms
Exercise for next class
• find an algorithm for the labeling algorithm
Equivalence classes
Equivalence classes“Union-Find”
• objects
• equivalences
• find the equivalence class of
• 3 operations:
-
-
-
new object
find canonical representative
merge 2 equivalence classes
Equivalence classes“Union-Find”
• with tree-like structure
• given by the array of direct ancestors
ancestor
Equivalence classes“Union-Find”
• unbalanced trees because of merges
- merge 2 equivalence classes
Equivalence classes“Union-Find”
• try to balance
- merge 2 equivalence classes
therefore keep height at each node
opérations pour
Equivalence classes“Union-Find”
• compression of path toward canonical representative
- with side-effect on tree structure
Exercice for next class
• find good primitives for bitmap graphics in Ocaml library
• design the overall structure of the labeling program