I n s t y t u t I n f o r m a t y k i
P o l i t e c h n i k a Zl s k a
A n a l i z a a l g o r y t m w
O p r a c o w a B: Z b i g n i e w C z e c h
M a t e r i a By d y d a k t y c z n e
G l i w i c e , w r z e s i e D 2 0 0 4
S p i s t r e [c i
1 D o w o d z e n i e p o p r a w n o [c i a l g o r y t m w 4
1 . 1 A k s j o m a t y a r y t m e t y k i l i c z b . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 . 2 P r a w a r a c h u n k u z d a D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 . 3 R e g u By d o w o d z e n i a ( w n i o s k o w a n i a ) . . . . . . . . . . . . . . . . . . . . . . . . 6
1 . 4 D o w o d z e n i e s k o Dc z o n o [c i a l g o r y t m w . . . . . . . . . . . . . . . . . . . . . . 8
2 Z Bo |o n o [ o b l i c z e n i o w a a l g o r y t m w 8
2 . 1 O b l i c z a n i e w a r t o [c i w i e l o m i a n u . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 . 2 M n o |e n i e l i c z b c a Bk o w i t y c h . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 . 3 Z n a j d o w a n i e m a k s y m a l n e g o ( m i n i m a l n e g o ) e l e m e n t u . . . . . . . . . . . . . . 9
2 . 4 J e d n o c z e s n e z n a j d o w a n i e m a k s y m a l n e g o i m i n i m a l n e g o e l e m e n t u . . . . . . . 1 0
2 . 5 M n o |e n i e d w c h n - b i t o w y c h l i c z b d w j k o w y c h . . . . . . . . . . . . . . . . . 1 0
2 . 6 S o r t o w a n i e p r z e z Bc z e n i e . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1
3 K o p c e i k o l e j k i p r i o r y t e t o w e 1 1
3 . 1 P r o c e d u r y o p e r u j c e n a k o p c u . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1
3 . 2 O p e r a c j e n a k o l e j k a c h p r i o r y t e t o w y c h . . . . . . . . . . . . . . . . . . . . . . 1 2
3 . 3 S o r t o w a n i e p r z e z k o p c o w a n i e . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3
4 W y s z u k i w a n i e 1 4
4 . 1 W y s z u k i w a n i e l i n i o w e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4
4 . 2 W y s z u k i w a n i e l i n i o w e z z a s t o s o w a n i e m w a r t o w n i k a . . . . . . . . . . . . . . . 1 4
4 . 3 W y s z u k i w a n i e l i n i o w e w u p o r z d k o w a n e j t a b l i c y . . . . . . . . . . . . . . . . 1 5
4 . 4 W y s z u k i w a n i e b i n a r n e ( l o g a r y t m i c z n e ) . . . . . . . . . . . . . . . . . . . . . . 1 5
4 . 5 D r z e w a p o s z u k i w a D b i n a r n y c h . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5
4 . 6 H a s z o w a n i e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 9
4 . 6 . 1 H a s z o w a n i e o t w a r t e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 9
4 . 6 . 2 H a s z o w a n i e z a m k n i t e . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1
4 . 7 M i n i m a l n e , d o s k o n a Be f u n k c j e h a s z u j c e . . . . . . . . . . . . . . . . . . . . . 2 2
5 O p e r a c j e n a t e k s t a c h 2 4
5 . 1 W y s z u k i w a n i e n a i w n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4
5 . 2 A l g o r y t m K n u t h a , M o r r i s a i P r a t t a ( K M P ) . . . . . . . . . . . . . . . . . . . 2 5
5 . 3 W y s z u k i w a n i e n i e z g o d n o [c i o w e . . . . . . . . . . . . . . . . . . . . . . . . . . 2 6
5 . 4 A l g o r y t m B o y e r a i M o o r a ( B M ) . . . . . . . . . . . . . . . . . . . . . . . . . . 2 6
6 S o r t o w a n i e 2 7
6 . 1 S o r t o w a n i e p r z e z p r o s t e w s t a w i a n i e . . . . . . . . . . . . . . . . . . . . . . . 2 7
6 . 2 A l g o r y t m S h e l l a , c z y l i s o r t o w a n i e z a p o m o c m a l e j c y c h p r z y r o s t w . . . . . 2 9
6 . 3 S o r t o w a n i e p r z e z p r o s t e w y b i e r a n i e . . . . . . . . . . . . . . . . . . . . . . . 3 0
6 . 4 S o r t o w a n i e p r z e z p r o s t a z a m i a n . . . . . . . . . . . . . . . . . . . . . . . . . 3 2
6 . 5 S o r t o w a n i e s z y b k i e a l g o r y t m Q u i c k s o r t . . . . . . . . . . . . . . . . . . . . . 3 4
6 . 6 I n n a w e r s j a a l g o r y t m u Q u i c k s o r t . . . . . . . . . . . . . . . . . . . . . . . . . 3 6
6 . 7 C z a s y w y k o n a n i a p r o g r a m w s o r t o w a n i a . . . . . . . . . . . . . . . . . . . . . 3 8
7 S e l e k c j a 3 9
8 S o r t o w a n i e p r z y u w z g l d n i e n i u s z c z e g l n y c h w Ba s n o [c i k l u c z y 3 9
8 . 1 S o r t o w a n i e k u b e Bk o w e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 0
8 . 2 S o r t o w a n i e p o z y c y j n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1
9 A l g o r y t m y z a c h Ba n n e 4 3
9 . 1 K o l o r o w a n i e z a c h Ba n n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3
9 . 2 P r o b l e m k o m i w o j a |e r a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3
9 . 3 Z n a j d o w a n i e n a j t a Ds z y c h d r g a l g o r y t m D i j k s t r y . . . . . . . . . . . . . . 4 4
2
1 0 A l g o r y t m y g r a f o w e 4 4
1 0 . 1 P r z e s z u k i w a n i e g r a f u w g Bb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4
1 0 . 2 P r z e s z u k i w a n i e g r a f u w s z e r z . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6
1 0 . 3 W y z n a c z a n i e c y k l i p o d s t a w o w y c h ( f u n d a m e n t a l n y c h ) . . . . . . . . . . . . . . 4 7
1 0 . 4 M i n i m a l n e d r z e w a r o z p i n a j c e . . . . . . . . . . . . . . . . . . . . . . . . . . 4 8
1 0 . 5 W y z n a c z a n i e c y k l i E u l e r a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 9
1 1 W y s z u k i w a n i e w y c z e r p u j a c e . A l g o r y t m z p o w r o t a m i 4 9
1 2 P r z e s z u k i w a n i e h e u r y s t y c z n e 4 9
1 2 . 1 P r z e s z u k i w a n i e w s z e r z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 9
1 2 . 2 P r z e s z u k i w a n i e w g Bb z i t e r a c y j n y m p o g Bb i a n i e m . . . . . . . . . . . . . . . 5 0
1 2 . 3 P r z e s z u k i w a n i e w e d Bu g s t r a t e g i i n a j l e p s z y w i e r z c h o Be k j a k o p i e r w s z y . . . . 5 0
1 3 G e n e r o w a n i e p e r m u t a c j i 5 1
1 4 P y t a n i a 5 3
1 5 P o d z i k o w a n i a 5 6
L i t e r a t u r a 5 6
3
1 D o w o d z e n i e p o p r a w n o [c i a l g o r y t m w
P r z e d d o w o d e m p o p r a w n o [c i
{ ( n > 0 ) a n d ( m > 0 ) } w a r u n e k w s t p n y ( a s e r c j a w e j [c i o w a )
b e g i n
i l o c z y n : = 0 ;
N : = n ;
r e p e a t
i l o c z y n : = i l o c z y n + m ;
N : = N - 1 ;
u n t i l N = 0 ;
e n d ;
{ i l o c z y n = n " m } w a r u n e k o s t a t e c z n y ( a s e r c j a w y j [c i o w a )
P o p r z e p r o w a d z e n i u d o w o d u
{ ( n > 0 ) a n d ( m > 0 ) }
b e g i n
i l o c z y n : = 0 ;
N : = n ;
r e p e a t
{ N i e z m i e n n i k : ( i l o c z y n + N " m = n " m ) a n d ( N > 0 ) }
i l o c z y n : = i l o c z y n + m ;
N : = N - 1 ;
{ ( i l o c z y n + N " m = n " m ) a n d ( N 0 ) }
u n t i l N = 0 ;
{ ( i l o c z y n + N " m = n " m ) a n d ( N = 0 ) }
e n d ;
{ i l o c z y n = n " m }
P r o c e s o b l i c z e n i o w y
I n s t r u k c j e W y n i k i o b l i c z e D N i e z m i e n n i k i t e r a c j i
n = 5 m = 8
i l o c z y n : = 0 ; N : = n ; i l o c z y n = 0 , N = 5 , m = 8 ( 0 + 5 " 8 = 4 0 ) a n d ( N > 0 )
i l o c z y n : = i l o c z y n + m N : = N - 1 i l o c z y n = 8 , N = 4 , m = 8 ( 8 + 4 " 8 = 4 0 ) a n d ( N > 0 )
i l o c z y n : = i l o c z y n + m N : = N - 1 i l o c z y n = 1 6 , N = 3 , m = 8 ( 1 6 + 3 " 8 = 4 0 ) a n d ( N > 0 )
i l o c z y n : = i l o c z y n + m N : = N - 1 i l o c z y n = 2 4 , N = 2 , m = 8 ( 2 4 + 2 " 8 = 4 0 ) a n d ( N > 0 )
i l o c z y n : = i l o c z y n + m N : = N - 1 i l o c z y n = 3 2 , N = 1 , m = 8 ( 3 2 + 1 " 8 = 4 0 ) a n d ( N > 0 )
i l o c z y n : = i l o c z y n + m N : = N - 1 i l o c z y n = 4 0 , N = 0 , m = 8 ( 4 0 + 0 " 8 = 4 0 ) a n d ( N = 0 )
P r o c e d u r a a s s e r t o r a z p r z y k Ba d j e j u |y c i a
p r o c e d u r e a s s e r t ( b : B o o l e a n ; t : s t r i n g ) ;
i f n o t b t h e n w r i t e ( t ) ;
a s s e r t ( ( n > 0 ) a n d ( m > 0 ) , n o t 1 ) ;
b e g i n
i l o c z y n : = 0 ;
N : = n ;
r e p e a t
a s s e r t ( ( i l o c z y n + N " m = n " m ) a n d ( N > 0 ) , n o t 2 ) ;
i l o c z y n : = i l o c z y n + m ;
N : = N - 1 ;
a s s e r t ( ( i l o c z y n + N " m = n " m ) a n d ( N 0 ) , n o t 3 ) ;
u n t i l N = 0 ;
4
a s s e r t ( ( i l o c z y n + N " m = n " m ) a n d ( N = 0 ) , n o t 4 ) ;
e n d ;
a s s e r t ( i l o c z y n = n " m , n o t 5 ) ;
1 . 1 A k s j o m a t y a r y t m e t y k i l i c z b
P r z e m i e n n o [ d o d a w a n i a i m n o |e n i a
x + y = y + x
x " y = y " x
Bc z n o [ d o d a w a n i a i m n o |e n i a
( x + y ) + z = x + ( y + z )
( x " y ) " z = x " ( y " z )
R o z d z i e l n o [ d o d a w a n i a i o d e j m o w a n i a w z g l d e m m n o |e n i a
x " ( y + z ) = x " y + x " z
x " ( y - z ) = x " y - x " z
I n n e
x + 0 = x
x " 0 = 0
x " 1 = x
1 . 2 P r a w a r a c h u n k u z d a D
e 1 , e 2 , e 3 z d a n i a
1 . P r a w a p r z e m i e n n o [c i
( e 1 '" e 2 ) a" ( e 2 '" e 1 )
( e 1 (" e 2 ) a" ( e 2 (" e 1 )
( e 1 a" e 2 ) a" ( e 2 a" e 1 )
2 . P r a w a Ba c z n o [c i
e 1 '" ( e 2 '" e 3 ) a" ( e 1 '" e 2 ) '" e 3
e 1 (" ( e 2 (" e 3 ) a" ( e 1 (" e 2 ) (" e 3
3 . P r a w a r o z d z i e l n o [c i
e 1 (" ( e 2 '" e 3 ) a" ( e 1 (" e 2 ) '" ( e 1 (" e 3 )
e 1 '" ( e 2 (" e 3 ) a" ( e 1 '" e 2 ) (" ( e 1 '" e 3 )
4 . P r a w a D e M o r g a n a
( e 1 '" e 2 ) a" e 1 (" e 2
( e 1 (" e 2 ) a" e 1 '" e 2
5 . P r a w o p o d w j n e g o p r z e c z e n i a
( e 1 ) a" e 1
6 . P r a w o w y Bc z o n e g o [r o d k a
e 1 (" e 1 a" t r u e
7 . P r a w o z a p r z e c z e n i a
e 1 '" e 1 a" f a l s e
8 . P r a w o i m p l i k a c j i
e 1 ! e 2 a" e 1 (" e 2
9 . P r a w o r w n o w a |n o [c i
( e 1 a" e 2 ) a" ( e 1 ! e 2 ) '" ( e 2 ! e 1 )
1 0 . P r a w a u p r a s z c z a n i a a l t e r n a t y w y
5
e 1 (" e 1 a" e 1
e 1 (" t r u e a" t r u e
e 1 (" f a l s e a" e 1
e 1 (" ( e 1 '" e 2 ) a" e 1
1 1 . P r a w a u p r a s z c z a n i a k o n i u n k c j i
e 1 '" e 1 a" e 1
e 1 '" t r u e a" e 1
e 1 '" f a l s e a" f a l s e
e 1 '" ( e 1 (" e 2 ) a" e 1
1 2 . P r a w o i d e n t y c z n o [c i
e 1 a" e 1
1 . 3 R e g u By d o w o d z e n i a ( w n i o s k o w a n i a )
F 1 , . . . , F n
G
F 1 , . . . , F n o r a z G s a p r e d y k a t a m i ( a s e r c j a m i ) .
Z n a c z e n i e : J e [l i F 1 , . . . , F n s p r a w d z i w e ( z a Bo |e n i a ) , t o m o |n a u d o w o d n i , |e G j e s t
p r a w d z i w e ( t e z a ) .
I n s t r u k c j a p r z y p i s a n i a
{ A ( x ! E ) } x : = E { A }
I n s t r u k c j a z l o |o n a
{ A } P 1 { B } , { B } P 2 { C }
{ A } b e g i n P 1 ; P 2 e n d { C }
U o g l n i o n a r e g u Ba d o w o d z e n i a d l a i n s t r u k c j i z Bo |o n e j
{ A i - 1 } P i { A i } d l a i = 1 , . . . , n
{ A 0 } b e g i n P 1 ; P 2 ; . . . ; P n e n d { A n }
R e g u By d o w o d z e n i a w a |n e d l a k a |d e j i n s t r u k c j i
{ A } P { B } , B ! C
1 .
{ A } P { C }
A ! B , { B } P { C }
2 .
{ A } P { C }
J e d n o c z e s n y z a p i s o b u r e g u B
A ! B , { B } P { C } , C ! D
{ A } P { D }
I n s t r u k c j a a l t e r n a t y w y
{ A '" B } P 1 { C } , { A '" B } P 2 { C }
{ A } i f B t h e n P 1 e l s e P 2 e n d i f { C }
I n s t r u k c j a w a r u n k o w a
{ A '" B } P { C } , { A '" B ! C }
{ A } i f B t h e n P e n d i f { C }
6
I n s t r u k c j a i t e r a c j i d o p k i
{ A '" B } P { A }
{ A } w h i l e B d o P e n d w h i l e { A '" B }
I n s t r u k c j a i t e r a c j i p o w t a r z a j
{ A } P { C } , { C '" B ! A }
{ A } r e p e a t P u n t i l B { C '" B }
I n s t r u k c j e i t e r a c j i d l a
1 . f o r x : = a t o b d o S e n d f o r ;
o z n a c z e n i u
i f a b t h e n
x : = x 1 ; S ;
x : = x 2 ; S ;
. . .
x : = x n ; S ;
e n d i f ;
g d z i e x 1 = a , x n = b o r a z x i = s u c c ( x i - 1 ) d l a i = 2 , . . . , n .
2 . f o r x : = b d o w n t o a d o S e n d f o r ;
o z n a c z e n i u
i f b a t h e n
x : = x 1 ; S ;
x : = x 2 ; S ;
. . .
x : = x n ; S ;
e n d i f ;
g d z i e x 1 = b , x n = a o r a z x i = p r e d ( x i - 1 ) d l a i = 2 , . . . , n .
R e g u By d o w o d z e n i a
{ ( a x b ) '" P ( [ a . . x ) ) } S { P ( [ a . . x ] ) }
{ P ( [ ] ) } f o r x : = a t o b d o S e n d f o r { P ( [ a . . b ] ) }
{ ( a x b ) '" P ( ( x . . b ] ) } S { P ( [ x . . b ] ) }
{ P ( [ ] ) } f o r x : = b d o w n t o a d o S e n d f o r { P ( [ a . . b ] ) }
P r z y k Ba d
{ A l g o r y t m d z i e l e n i a c a Bk o w i t e g o : q = x d i v y . }
{ ( x 0 ) a n d ( y > 0 ) }
b e g i n
q : = 0 ;
r : = x ;
w h i l e r y d o
{ ( x = q " y + r ) a n d ( r 0 ) a n d ( r y ) }
r : = r - y ;
q : = 1 + q ;
e n d w h i l e ;
e n d ;
{ ( x = q " y + r ) a n d ( 0 r <