You are on page 1of 73

1

443432

:
http://webcourse.cs.technion.ac.il/234247/Spring2012/

:
'
'

:
anton@kix.co.il

18.06.2012 0.1

:
http://my.kix.co.il/pub/bySemester/2012Spring/Algorithms/

1
213//31/21

" }

. -

, - () -. -

Breadth First Search


BFS

. -


, ' -

. -

:
"" -
.

Pseudo codeBFS -

BFS


""

-

""

Pseudo code BFS


:
} {

| | :

v ' ) adj ( v , "

while ) O adj ( v ) O ( E"


v

) . O (V + E


BFS . s -
dist ( s, v ) - s - . v -
= ) . dist ( s, v
) dist ( s, v s v - " s -." v -

1
) ( u , v . dist ( s, v ) dist ( s, u ) + 1

u s - v . s - v -
" s -

u -

) ( u, v

. dist ( s, v ) dist ( s, u ) + 1 u . s -

2
] d [v ) d [v] dist ( s, v . v
.


.


enqueue

) d [v] dist ( s, v . v
: ) enqueue ( Q, s ) d [ s ] = 0 = dist ( s, s
= ] d [v v , s - .
: v - . u v

) d [u ] dist ( s, u

) d [v] = d [u ] + 1 dist ( s, u ) + 1 dist ( s, v

d [v] -
.

3
BFS Q } , {v1 ,..., vn

d [vr ] d [v1 ] + 1

] d [vi ] d [vi +1

3
.

) . ,
.(enqueue

4
vi - Q - , v j v j - ] . d [vi ] d [v j

:4

, -


.2
-

.1

( )

()
-

( )FIFO

] [

vi v j - ) 3 (.
vi - v j -

] d [v ) . (.

BFS ) G
( . s
BFS v s - ) . d [v] = dist ( s, v
v , s - v -
s - v v . v

v ) . d [v] > dist ( s, v


v ) dist ( s, v .
s - , v - u v .
. dist ( s, v ) = dist ( s, u ) + 1
u ) d [u ] = dist ( s, u ) . dist ( s, v:
. d [v] > dist ( s, v ) = dist ( s, u ) + 1 = d [u ] + 1
" . 3
u :

v . d [v ] = d [u ] + 1
. v .

v , 4 ] , d [v] d [u
.

v . , u
v , 3 , d [v] d [u ] + 1 .

v ) . d [v] = dist ( s, v .
] u = p[v d [v] = d [u ] + 1 dist ( s, v ) = dist ( s, u ) + 1

s - v -" p[v ] - v -
s -. p[v] -

2
293//31/21

) - Depth First Search (DFS


v

) ( v, u

u . u -

.
,BFS / .

DFS
: ) G = (V , E s. V -
: v V ] d [v . v
d [v] : p[v] - v.
DFS:
(1) for all v in V
d[v] = 0
p[v] = nil
mark all edges unused
i = 0
v = s
(2) i = i + 1
d[v] = i
(3) while there are unused (v,u) do
)choose unused (v,u
mark (v,u) used
if d[u] = 0 then
p[u] = v

v = u

v = u
i = i + 1
d[v] = i
(4) if p[v] != nil then
]v = p[v
)goto (3
else
if there is u with d[u] = 0 then
v = u
)goto (2
(5) stop

] d [v ] i , d [v.

) ,
(.

DFS . s -

DFS .

predecessor subgraph

G v p[v] nil ]p[v


v .
G ) .depth first trees
(.

: , G ) ( u , v v
) . ( u , v

: ) ( u , v u v DFS
) (.

: . G ) ( u , v u - v
.DFS

) :(cross G
DFS , DFS.

DFS

color[u ] - white.gray -

f [u ] - . u -

adj[u ] - BFS . u

DFS(G):
u in V do

for each

color[u] = white
p[u] = nil
i = 0
for each u in V do
)if color[u] = white then DFS_VISIT(u
DFS_VISIT(u):
color[u] = gray
i = i + 1
d[u] = i
for each v in adj(u) do
if color[v] = white then
p[v] = u
)DFS_VISIT(v
i = i + 1
f[u] = i

10

f [u ] : . 2
.

DFS
-

| | -
) -
( ' DFS_VISIT - .
: DFS_VISIT ( "") .
DFS_VISIT ' , :DFS_VISIT
-
| |

" | |

|
| |

DFS
.1 G ,
.DFS_VISIT
.2 v u DFS v u
f [u ] -

.3 v" (v
v -" ) . v

) )

((

) . u v ( y ( xx ) y ) v u ( w ( zz ) w

1
, G u , v
:

11

.1 ]] [ d [u ], f [u [ d [v], f [v]] - ,
/ . u, v
.2 ]] [ d [u ], f [u ]] , [ d [v], f [v u v
.DFS
.3 ]] [ d [v], f [v [ d [u ], f [u ]] - u v
.DFS

:
: d [u ] < d [v ] . 2 :
- d [v] < f [u ] .a v u ""
. u - v . u v -
u - ] f [v ] < f [u" , [ d [v], f [v]] [ d [u ], f [u ]] -
).(3

f [u ] < d [v] .b

] . d [u ] < f [u ] < d [v ] < f [v -

u . v -
- d [v] < d [u ] .

2
v u DFS / G"
] (*) d [u ] < d [v ] < f [v ] < f [u

1 )*( ) (3 v u

.DFS

12

3
DFS G / , v u" ] , d [u
u , u - v - .

: v . u w u - v - w -
, u , d [ w] > d [u ] 2 ] d [u w ,
u - v - .
: ] d [u u - v - v
. u v -
. u w v . w , u
] ) f [ w] f [u w = u ( .:

] ) d [u ] < d [v] < f [ w] = f [u d [u ] < d [v] : ,d [v] < f [ w] -


w - v - v .( w
1 ]] , [ d [v], f [v]] [ d [u ], f [u ] d [v ] d [u, f [u ] -
) (3 v - . u

13

3
163//31/21



-( . - )

.
, .
?

} -


|)

14

({



)

)
) :
,DFS :
( -)

DFS -

)
1
. -

: ,

: -

. -

2 DFS :
:

DFS -.

. -
. -


.DFS -

( ) :2

DFS -.

DFS

)
DFS : (
- ( . - - -) -

15

1 DFS
1 ,DFS

: ,
. -

,DFS

. - ,2

, -

- .


).

:
:

( -

, ,
.

) :
-

. ,

( DFS - ).
(
.

16

() .
).

( -

, :

( DFS - ) , )
-. -

)2 DFS
)1 DFS , ,when possible
() .
)/ DFS.
:

DFS -.

( ).

17

4
/13/431/21
| |

| |

DFS -.

DFS - . ,
( DFS -) .
: DFS -.
DFS - -

, T -
-

.
-

( DFS -).

: T -
.1

DFS -

DFS -

DFS - ."

, -

. -

1 .

:
DFS - ( -

18

).


-
:

.
.

:1

,1 ,DFS DFS ,
.

, -

,DFS -

:
.
)

(
DFS -

, ()
,-
)

.
(

( ()

. - -

:
, . -


,

.


,
.

19

, .
"
: ( ) , -
. , ( ).
" , " ( )
, .

: :
: ,

.
.

( ) -
(

, )

:
, -
"

".

20

:

}

| {

, -.
, - . -
, .

-
,

, -

21

5
263/431/21
" T -
T .2 .
T .1 .

( ) ,
( ).
( .
:
) .
.

( ) , -
)
.
( - -).
.
. ,
-
)
.
, ,
.
(
).

( " ).

22

Prim
.2 } {
:
.1
.2

.1

-
.

{ } . -


.
: -

, Prim .
Prim ,
.
Prim
-

, Prim

| | .
| | " .

. -
. -

: -


)
.

) . -
" | |

| |

23

Kruskal
.2 .
.1 :

.
} {

} {

, -
, - .

. . -
( )

:
} | {
-.
, , .
: " ( ).
. -
} {
, ,
.

Union Find -
: -
-

, - ( )
- .

{ } -

? 3

2 | |
" | | :

| |

| |

| |

| |

24


= 3 =
.'
. -

? -

?

-

. -

, - -

: -
-. -

25

, - -
.

. -
-

6
//3/431/21

/
: ) , G = (V , E'

, w : E . s

: v V s . dist ( s, v ) -

)"(

d : V :

d (s) = 0

) ) . d ( v ) dist ( s, v (.

)relaxation (u,v
) d ( v ) > d ( u ) + w ( u, v ) . d ( v ) d ( u ) + w ( u, v


,
. parent ( v ) u

'
.

26


. "
. ) ( u , v ) d ( v ) > d ( u ) + w ( u, v ) . ( u , v

}{

d : V" . 2 :

. s d "
) . ( u, v
. ) ( u , v ) d ( v ) d ( u ) + w ( u , v v
) . d ( v ) = dist ( s, v

. , u v ) d ( u ,
) d ( u ) dist ( s, u . ) d ( v
.v ) d ( v ,
) d ( v ) d ( u ) + w ( u , v ) d ( s, u ) + w ( u , v ) dist ( s, v

s v

, x ) ( u , v ) . d ( x ) dist ( s, x
. d ( s ) = 0 - ) d ( s
, v = s ) , d ( s ) d ( u ) + w ( s, u d ( s ) < 0
. dist ( s, s ) d ( s ) < 0
." v ) . dist ( s, v ) = d ( v ) d ( v ) dist ( s, v ) -
d"( , ) . d ( v ) dist ( s, v
v ) , d ( v ) > dist ( s, v s - v -

27

) . d ( v . P = ( u0 = s, u1 ,..., uk = v ) - ) d ( v ) > dist p ( s, v

dist p p s - .
dist p ( s, s ) = d ( s ) = 0

M
) dist p ( s, v ) < d ( v

i
) dist p ( s, ui ) = d ( ui
) dist p ( s, ui +1 ) < d ( ui +1

) d ( ui +1 ) > dist p ( s, ui +1 ) = dist p ( s, ui ) + w ( ui , ui +1 ) = d ( ui ) + w ( ui , ui +1

) ( ui , ui +1 .

-
: ) G = (V , E , )
( , . s V
: . dist ( s, v ) = d ( v ) - v
:
v V ) d ( v

. d ( s ) 0
i = 1 V 1
) ( u , v

) ( u, v


) O (V ) + O (VE ) = O (VE

28

'
, v s - v - k k

) . d ( v ) = dist ( s, v

' . k k = 0 s ' 0
) ( . d ( s ) = 0 = dist ( s, s ) -
: k . k + 1 v
s - v - k + 1.
) ( u , v , k + 1 s - . v - k

( u , v ) -

s -) u -

( ,
' k ) . d ( u ) = dist ( s, u k + 1 -
) ) ( u , v ,( u
) d ( v ) d ( u ) + w ( u , v ) = dist ( s, u ) + w ( u , v ) = dist ( s, v
) (u,v

s v

'
G - s - v
s - v - V 1.

,
V 1.

29

"
' s - V 1,
' V 1 ".

- , '

)(Dijkstra
: , . s
: d ( v ) = dist ( s, v ) - v

:
v V ) , d ( v d ( s ) 0

Q ) Q V ) - d ( v ) dist ( s, v
.( s Q

Q
Q - u ) d ( u.
u Q - ) ( u , v ) . ( u , v


O (V 2 ) -

O ( E log V ) -


) ( u , v
) , d ( v ) d ( u ) + w ( u , v
. :

'

30

) d ( u ) d ( u u . Q - v

) . d (u ) d (v

u d ( u ) , Q - ) d ( u ) d ( v

u - . u , v
v
.
: u v -
. d ( u ) = d ( u1 ) d ( u2 ) L d ( uk ) = d ( v ) -

'

) ( u, v

) , d ( v ) d ( u ) + w ( u , v

d ( v ) , v ) ) d ( v
( z v ) d ( z ) d ( v-
-
) d ( z ) + w ( z, v ) d ( z ) d ( v
'


. :

) d ( v ) d ( u ) + w ( u , v ) . d ( v ) d ( u ) + w ( u , v

31

' ( ')
-

32

7
07/05/2012


.
" .
, ,
.
:
9
9

12

11

10

33



.2
.1 : ,
} {
.

, -

pseudo code
.
.
Greedy Activity Selector

} {

:
" .
: () " ,
" .| :
.
| , -

- ( ) .
- - - . -
(
. -
, ).
-

, . -

34

,
.
.i
.ii
.iii

. . -
-

( ).
, , -

).
, - ( -
( ).

| | -

|
|

. -

:
|


.
, .
prefix code ) (prefix
.
.prefix code

35

: .
prefix code
, ,
.
prefix codes , .
0 , , 2 - .
:

. -

":

.
" , .
, . | | ,
| |

36

| | .

| | .

:
.
, . .

| |

37

Huffman :

38

243/5321
Huffman

| |

} {

:
:1

:
. -

39

2 -

(
}

:2

( ).
:3
prefix

: -
. -

. -

, -

( )

. -" , -

)

, ,1-

40

. - ,
: :

) ( .
. ,
/
-

, --

prefix-

"

( ) .

-"

. -

2 :
) (

) ( ,

) (

.
) (
) (

) ".

" , | | -

41

| |


( ).
{
}
- .

"

} :

{
.

/ .

|{


)2 -

)1 -
( - ,) - -
:
, :

42

.2
.a
.b
.c

.d

.1-

.a
(
)
{ } .i
.ii

)
)

(
(

.b
.i
.ii
./
:

43

44

( )

:1
"


- ,
:
)2 ( ) .
)1
)/
.

9
12./6.21

: ( ).
:

:
-

45

.
?

,:
)

"
,
-

}
:

( )

: , .

46

"

All Pairs Shortest Path


:

: .
:

| | - Bellman-Ford
:

| |

- 1

{.
{

,
)

( )

- 2

-
}

. -

47

( {

| |

| |.

/ - -

-
.
" -

| |

| |

, -

.
)

( : )
)2

) ./

-
-

( .
, )
- -

.
)1

(

-

).

. - - }
{.
( -

).


--
}
{.
- }
{.
-
.
,
, - - -

}
.
{ . :

48

. -

- -

}

-
{

49

{
-

.
-

01
18./5.21

Sequence Alignment
: ( ocurrance ).
.occurrence
: .
o_currance occurrence .
o_ccur_anceoccurre_nce .
,
( )alignment

.2
.1
./ -

. ,
. .

. -
:
.2

.1

.
( ) -

50

-
(

:
)

( {

: , : .

( )

51

.
{

- "

".

3 .

( )
-

- :

52

-
-

: - ?
sequence alignment -
.
. (
).


. ( )transpose


:
:

, -

transpose .
: ?
] [ 3 .divide and conquer

().

.2

)

.1 :
-
.i
) -
.ii

) -

(
(

-
3 )

53

(.

:
?
:

( : , )

54

00
/63/631/21

, .
() , , .
?
?

)2
)1
)/
)4


()
()

)2 :
-
-

-
-

)1 :

" | |

55

| |

15

12

3
5

10
10

7/7

10/12

3/3
0/5

10/15

4/4

7/10
7/10

56

--

, .14

( "

"

( ).

_
S

| |

57

.| | -

.| | -
, - ( ) .
, .
":

.
2

| |.


).

| |

| |

( S

:
( )
-
.

, - ,

58

u
1/2

2/2

1/1

2/2

1/2
v

)1( :

)2( :

()1

:
u

u
2
t

2/2

2
1

1/2
1/1

1/2

2/2
v

59

1/2

v
1
u
1/2
t

1/2
s

0/1
1/2

1/2
v

1/2

0/2

( "" )

60

1/1

0/2

e
u

e
v

eR

)-

(.

3

:
)
) | |


|
| | |

61

02
223/631/21
:/
)2 .
:
, -

)+(v

:
. -

)-(v

)-(v

)+(v

Gf
f

G
f

62

)-

( -

:
. -

( -

)1 :

:
,
,

| |.
-
-

-
-

| |

63

))-

(.
(.

Ford Fulkerson
)2
)1 -
.a

--

.b

--

:)/

.
(

) -

.c
.

min-cut-max-flow
. :

-

)2
-
)1-
)/

| |

)-

- .0 -
(

, -

) -

( , ,/ -
| |

64

| |

- .

| | -

_
S


-
-
-

-.

()

. -

.
:

).

- - . -
-
..

-

).

- - . -
-
..

-

65

S
}

_
S

s
}

| | -
| | -

. -
|

| |

| ,1

?
| | :
| |

| |

. pre-processing | |
| | .

| |

.
, , Ford
Fulkerson .
, , .
.

66

:
u
M

M
v

, Ford Fulkerson |

" | -

| | |

| .

. , .
" |

| |

( .)dijekstra

( ) -
.

67

- Edwards Karp

03
283/631/21
Ford Fulkerson
.

| |

Edmond Karp .Ford Fulkerson

Edmond Karp
.2 : .
.1 - - :
() .
.a-
-

| | | |

:
1
.
( )
} {
( )

2 MagicKarp | | | |

! ,

( . - ,

).

:1
, .
| |

68

,
(.)2
2 -

-
.
-
.
:

. - ,

(.)1
(. )/

:2
:

, ,
, -
. -
- , -
-
" ,

| |

| |
:EK

,
| |.

| | | |

| |

( -

69

:| | -

).

perfect matching-
).

).

| :

( . -

| | (

,
}

.
{

{}

( : , ).

3 -
| | | | -
,

- .

, -

| |.

:
-

( )2 - ,

-
-

(
)
(
)
(
)

-
-
:
.

.
- ,
| |
.
} {

70

( )1

- 2

. - ,
- .2 - " -".
.

"" . -
,
: -
.2

| |

Ford Fulkerson -
}| | | |{

: | |
." | | | | .

71

| |

Hall

( ) . -

Hall
|
| | |.

| | -

| |

:
:I ,
|
)*(

:II

{|

|} |

| |

.
|

| | . . -

( )/ , ( !) :
.

-
-

/ , -

, , - -

min-cut-max-flow - | |
-

.| | -

( } {

{ } -

).

S
72

-
.
.

,
|

| |

| |

"
| |

| |

| |

||
-
-

| | -

| |

73

You might also like