• Aucun résultat trouvé

J-O-Caml (2)

N/A
N/A
Protected

Academic year: 2022

Partager "J-O-Caml (2)"

Copied!
17
0
0

Texte intégral

(1)

J-O-Caml (2)

jean-jacques.levy@inria.fr

pauillac.inria.fr/~levy/qinghua/j-o-caml

Qinghua, November 20

Plan of this class

compiling programs

list processing

pattern-matching

new data types

labeling algorithm

(2)

Compiling programs

prog1.ml

program text ocamlc

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)

List processing

(3)

List processing

List processing

polymorphic types

‘a list (say ``alpha list’’) is type of list of any type, e.g. int list, bool list, ...

(4)

Exercices on lists

Exercices on lists

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 in sequence is obtainte by reading previous list. 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 ?

(5)

New data types

products

New data types

products

(6)

New data types

sums

New data types

sums

(7)

New data types

recursive types

New data types

recursive types

(8)

New data types

recursive types

recursive polymorphic types

New data types

recursive types

recursive polymorphic types

(9)

New data types

recursive polymorphic types (alternative definition for binary trees)

New data types

recursive polymorphic types (alternative definition for binary trees)

(10)

Caring about space

with an extra argument as an accumulator of the result

Caring about space

with an extra argument as an accumulator of the result

(11)

Combien d’objets dans une image?

Jean!Jacques L"vy INRIA

Labeling

16 objects in this picture 1

1

2 3

4 5 6

7

8 9

10

11 12

13 14

(12)

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

-

scan pixels left-to-right, top-to-bottom giving a new object id each time a new object is met

2) second pass

-

generate equivalences between ids due to new adjacent relations met during scan of pixels.

3) 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)

(13)

Animation

with Polka system for animated algorithms

Exercise for next class

find an algorithm for the labeling algorithm

(14)

Equivalence classes

Equivalence classes

“Union-Find”

objects

• equivalences

• find the equivalence class of x

1

, x

2

, ... , x

n

x

p

• 3 operations:

-

- -

NEW(x ) FIND(x ) UNION(x , y )

new object

find canonical representative merge 2 equivalence classes

(15)

Equivalence classes

“Union-Find”

• with tree-like structure x

9

x

7

x

5

x

10

x

1

x

4

x

2

x

6

x

3

x

8

x

11

x

12

x

13

• given by the array of direct ancestors

7 9 9 7

9

0 2 11 1 2 8 8 13 8

ancestor

Equivalence classes

“Union-Find”

• unbalanced trees because of merges -

UNION(x , y )

merge 2 equivalence classes

x

9

x

7

x

5

x

10

x

1

x

4

x

3

x

8

x

11

x

12

x

13

x

6

x

2

x

6

= x

13

(16)

Equivalence classes

“Union-Find”

• try to balance

-

UNION(x , y )

merge 2 equivalence classes

x

9

x

7

x

5

x

10

x

1

x

4

x

3

x

8

x

11

x

12

x

13

x

6

x

2

therefore keep height at each node opérations pour

O(log n)

FIND(x)

Equivalence classes

“Union-Find”

• compression of path toward canonical representative -

FIND(x )

with side-effect on tree structure

x

9

x

7

x

5

x

10

x

1

x

4

x

6

x

2

x

9

x

7

x

5

x

10

x

1

x

4

x

6

x

2

FIND(x

4

)

(17)

Exercice for next class

find good primitives for graphics in Ocaml library

design the overall structure of the labeling program

Références

Documents relatifs

Unité de recherche INRIA Rennes : IRISA, Campus universitaire de Beaulieu - 35042 Rennes Cedex (France) Unité de recherche INRIA Rhône-Alpes : 655, avenue de l’Europe - 38334

We show that on the algebra of binary trees whose leaves are labeled by letters of an alphabet containing at least three letters, a function is congruence preserving if and only if

It turns out that statically typed object- oriented languages all support both pure objects and also a form of abstract data types.. They also support

Our type system is built by starting with the concept of a finite partial map to describe the store and then using a combination of standard type constructors such as singleton,

• Scheme, SML, Ocaml, Haskell are functional programming languages.. • they

• Scheme, SML, Ocaml, Haskell are functional programming languages. • they

• recursive polymorphic types (alternative definition for binary trees). dimanche 10

• module Graphics is a portable graphics library (needs graphics.cma to be compiled as first argument of the ocamlc command). • module names ( List ) start with