CS253 Report 3 Wilhelm Aaron

Embed Size (px)

Citation preview

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    1/35

    C S 2 5 3 R e p o r t 3

    T h e E d i t D i s t a n c e P r o b l e m

    A a r o n W i l h e l m

    O c t o b e r 2 6 , 2 0 1 1

    1

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    2/35

    B a c k g r o u n d a n d M o t i v a t i o n

    D y n a m i c P r o g r a m m i n g i s a p r o g r a m m i n g t e c h n i q u e i n w h i c h a p r o b l e m

    i s d i v i d e d i n t o m u l t i p l e s u b - p r o b l e m s , t h e s u b - p r o b l e m i s t h e n s o l v e d a n d c o m -

    b i n e d t o s o l v e t h e o r i g i n a l p r o b l e m . T h i s i s v e r y s i m i l a r t o t h e d i v i d e a n d

    c o n q u e r m e t h o d o l o g y w i t h t h e e x c e p t i o n t h a t d y n a m i c p r o g r a m m i n g s a v e s t h e

    r e s u l t s o f i n t e r m e d i a t e s t e p s . T h i s o p t i m i z e s f o r t i m e s i n c e s i n c e t h e m a n y o f

    t h e s u b - p r o b l e m s a r e c a l c u l a t e d m u l t i p l e t i m e s . M a n y o f t h e s e p r o b l e m s w h e n

    n o t o p t i m i z e d i n t h i s m a n n e r h a v e a r u n t i m e c o m p l e x i t y o f O(2n+m), w h i l e t h e

    o p t i m i z e d v e r s i o n o f t h e a l g o r i t h m w i l l h a v e a r u n t i m e c o m p l e x i t y o f

    O(m

    n).

    T h e r e i s a t r a d e o t h o u g h , t h e t h e s p a c e c o m p l e x i t y o f t h e f a s t e r a l g o r i t h m i s

    O(m n) a n d t h e s p a c e c o m p l e x i t y o f t h e s l o w e r a l g o r i t h m i s O(m + n) . S i n c e

    w e g e n e r a l l y w i s h t o h a v e r e s u l t s q u i c k l y a n d m e m o r y i s r e l a t i v e l y c h e a p t h e

    f a s t e r a l g o r i t h m i s g e n e r a l l y t h e p r e f e r r e d c h o i c e .

    O n e p r o b l e m t h a t r e q u i r e s t h e u s e o f d y n a m i c p r o g r a m m i n g t e c h n i q u e s i s

    t h e e d i t d i s t a n c e p r o b l e m . T h e e d i t d i s t a n c e p r o b l e m i s c o n c e r n e d w i t h n d i n g

    t h e m i n i m u m c h a n g e s t h a t c a n b e m a d e t o o n e s t r i n g t o g e t a d e s i r e d r e s u l t a n t

    s t r i n g . D i e r e n t i m p l e m e n t a t i o n s o f t h e a l g o r i t h m s u s e d t o s o l v e t h i s p r o b l e m

    u s e d i e r e n t t r a n s f o r m a t i o n s f o r s t r i n g m o d i c a t i o n . T h e t r a n s f o r m a t i o n s u s e d

    a r e g e n e r a l l y a s u b s e t o f t h e f o l l o w i n g t r a n s f o r m a t i o n s :

    C o p y : s i m p l y c o p i e s a c h a r a c t e r f r o m t h e o u t p u t s t r i n g t o t h e i n p u t s t r i n g

    R e p l a c e : s e t s a c h a r a c t e r i n t h e i n p u t s t r i n g t o a v a l u e i n t h e o u t p u t s t r i n g

    D e l e t e : d e l e t e s a c h a r a c t e r i n t h e i n p u t s t r i n g

    I n s e r t : i n s e r t s a c h a r a c t e r f r o m t h e o u t p u t s t r i n g

    T w i d d l e : s w a p s t h e n e x t t w o c h a r a c t e r s

    K i l l : r e m o v e s t h e r e s t o f t h e c h a r a c t e r s i n t h e t e x t

    2

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    3/35

    U n d e r s t a n d i n g t h e e d i t d i s t a n c e p r o b l e m c a n b e u s e d i n s e v e r a l a p p l i c a t i o n s

    s u c h a s , s p e l l c h e c k i n g , s p e l l c h e c k e r s m u s t s e a r c h f o r c l o s e s t w o r d t o a m i s s p e l l e d

    w o r d , D N A s e q u e n c i n g u s e s n e e d t o n d s i m i l a r i t i e s i n D N A s t r u c t u r e t o n d

    w h a t w h a t s e q u e n c e s a r e r e s p o n s i b l e f o r w h a t a t t r i b u t e s a n d d i a l g o r i t h m s a r e

    u s e d t o n d a n d t r a c k d i e r e n c e s i n s o u r c e c o d e a n d o t h e r l e s t o m a n a g e w h a t

    w a s d o n e b y w h o m .

    P r o c e d u r e s

    I n o r d e r t o g e t t h e a l g o r i t h m s t o w o r k a p p r o p r i a t e w e i g h t s a n d t r a n s f o r m a t i o n s

    h a d t o p i c k e d . T o p i c k t h e t r a n s f o r m a t i o n s I a t t e m p t e d t o p i c k t h e m o s t b a s i c

    o f t r a n s f o r m a t i o n s a n d a l s o m a k e s u r e t h a t I w a s g u a r a n t e e d t h e a b i l i t y t o

    t r a n s f o r m a n d s t r i n g t o a n y o t h e r s t r i n g . S i n c e k i l l i s s i m p l y a r e p e a t e d d e l e t e

    u n t i l t h e s t r i n g i s g o n e I d e c i d e d n o t t o u s e i t . S i n c e r e p l a c e c a n e a s i l y b e

    s u b s t i t u t e d b y a d e l e t e a n d a n i n s e r t I d i d n ' t i m p l e m e n t r e p l a c e e i t h e r . C o p y ,

    d e l e t e , i n s e r t a n d t w i d d l e a r e w h a t I d e c i d e d t o u s e . T w i d d l e w a s u s e d b e c a u s e

    I w i s h e d t o p o s s i b l y u s e t h e s e a l g o r i t h m s w i t h D N A s e q u e n c i n g o r t o a i d i n

    t r a c k i n g c h a n g e s i n t e x t d o c u m e n t s w h e r e i t i s c o m m o n f o r l e t t e r s o r l i n e s t o

    b e s w i t c h e d .

    F o r t h e w e i g h t s , t h e o r i g i n a l v a l u e s r e l a t i v e t o e a c h o t h e r w e r e p i c k e d b y u s i n g

    l o g i c . F o r i n s t a n c e t h e c o p y t r a n s f o r m a t i o n s h o u l d b e t h e o n l y t r a n s f o r m a t i o n

    u s e d w h e n t h e b e g i n n i n g a n d e n d i n g s t r i n g a r e t h e s a m e , t h e r e f o r e t h e c o p y

    o p e r a t o r s h o u l d b e l o w e s t i n w e i g h t . C o p y i n g s h o u l d a l s o b e l o w e r w e i g h t t h a n

    i n s e r t i n g o r d e l e t i n g s i n c e c o p y i n g c h a n g e s t h e s t r i n g t h e l e a s t , b o t h c o p y i n g a n d

    i n s e r t i n g d o a l m o s t t h e s a m e a m o u n t i n m o d i f y i n g t h e s t r i n g s o t h e y s h o u l d b e

    c l o s e t o t h e s a m e a n d t w i d d l e s h o u l d h a v e a f a i r l y l o w w e i g h t s i n c e n o t h i n g i s

    c r e a t e d o r d e s t r o y o n l y i p p e d a r o u n d . F r o m t h e r e I m o d i e d t h e v a l u e s b y

    h a n d u n t i l I g o t t r a n s f o r m a t i o n s t h a t m a t c h e d w h a t I b e l i e v e d t o b e i n t u i t i v e

    3

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    4/35

    a n s w e r s ( T h e s e a r e i n t h e u n i t t e s t i n g p o r t i o n o f t h e c o d e ) .

    H o w T h e R e c u r s i v e A l g o r i t h m W o r k s

    T h e w a y t h a t t h i s a l g o r i t h m w o r k s i s b y s p l i t t i n g u p t h e p r o b l e m i n t o s m a l l e r

    s u b - p r o b l e m s , t h i s n d s t h e m i n i m u m w e i g h t o f t h e b y r e c u r s i v e l y t r y i n g t o n d

    t h e m i n i m u m w e i g h t t o t u r n i n p u t [ i + 1 . . i n p u t . s i z e ] i n t o o u t p u t [ j . . o u t p u t . s i z e ] ,

    i n p u t [ i + 1 . . i n p u t . s i z e ] i n t o o u t p u t [ j + 1 . . o u t p u t . s i z e ] , i n p u t [ i . . i n p u t . s i z e ] i n t o o u t -

    p u t [ j + 1 . . o u t p u t . s i z e ] a n d i n p u t [ i + 2 . . i n p u t . s i z e ] i n t o o u t p u t [ j + 2 . . o u t p u t . s i z e ] .

    4

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    5/35

    A l g o r i t h m 1 RecursiveM inWeight(input, i, output, j)

    P r e : W h e n o r i g i n a l l y c a l l e d i a n d j e q u a l 1

    P o s t : R e t u r n m i n i m u m w e i g h t n e e d e d t o c h a n g e i n p u t [ i . . i n p u t . s i z e ] t o o u t -

    p u t [ j . . o u t p u t . s i z e ]

    1 : smallest = 2 :

    i f i input.size O R j output.size t h e n

    3 :

    i f j output.size t h e n

    4 :

    weight = INSERT_ WEIGHT +RecursiveMinWeight(input, i, output, j + 1)

    5 :

    smallest = min(smallest, weight)6 :

    e n d i f

    7 :

    i f i input.size A N D j output.size A N D input[i] == output[j]t h e n

    8 : weight = COPY_ WEIGHT +

    RecursiveM inWeight(input, i + 1, output, j + 1)9 :

    smallest = min(smallest, weight)1 0 :

    e n d i f

    1 1 :

    i f i input.size t h e n

    1 2 :

    weight = DELETE_ WEIGHT +RecursiveM inWeight(input, i + 1, output, j)

    1 3 :

    smallest = min(smallest, weight)1 4 :

    e n d i f

    1 5 :

    i f i + 1 input.size A N Dj + 1 output.size A N Dinput[i] == output[j + 1] A N Doutput[j] == input[i + 1] t h e n

    1 6 :

    weight = TWIDDLE_ WEIGHT +

    RecursiveM inWeight(input, i + 2, output, j + 2)1 7 :

    smallest = min(smallest, weight)1 8 :

    e n d i f

    1 9 :

    e l s e

    2 0 :

    smallest = 02 1 :

    e n d i f

    2 2 : r e t u r n smallest

    C o m p l e x i t y A n a l y s i s

    T h e r e c u r r e n c e f o r t h i s a l g o r i t h m i s

    T(n, m) = T(n 1, m) + T(n, m 1) + T(n 1, m 1) + T(n 2, m 2) ( 1 )

    5

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    6/35

    W h i c h g r o w s a t a n e x p o n e n t i a l r a t e l e a d i n g t o a r u n t i m e c o m p l e x i t y o f

    O(2n+m) ( 2 )

    T h e m e m o r y c o m p l e x i t y o n t h e o t h e r h a n d h a s a c o n s t a n t m e m o r y p e r c a l l

    t o i t s e l f a n d h a s m a x d e p t h o f n + m l e a d i n g t o a m e m o r y c o m p l e x i t y o f

    O(n + m) ( 3 )

    H o w T h e I t e r a t i v e A l g o r i t h m W o r k s

    T h i s a l g o r i t h m w o r k s i n a m a n n e r s i m i l a r t o t h e a b o v e a l g o r i t h m e x c e p t i n s t e a d

    o f c a l l i n g i t s e l f t o g e t t h e v a l u e o f t h e s u b - p r o b l e m s i t u s e s a t a b l e o f l o w e r l o o k

    u p v a l u e s . T h e f u n c t i o n c a l c _ w e i g h t r e q u i r e s f o r v a l u e s o f t h e s u b - p r o b l e m s o f

    c h a n g i n g i n p u t [ i . . i n p u t . s i z e ] t o o u t p u t [ j . . o u t p u t . s i z e ] t o a l r e a d y b e s o l v e d . T h i s

    c a n b e a c h i e v e d b y s i m p l y u s i n g c a l c _ w e i g h t o n t h e l a r g e s t v a l u e s o f i n d e x e s

    b e f o r e u s i n g i t o n t h e l a r g e r v a l u e s

    A l g o r i t h m 2 IterativeMinWeigh(input, output)

    P r e : N o n e

    P o s t : T h i s w i l l r e t u r n t h e m i n i m u m w e i g h t o f t r a n s f o r m s t o t u r n i n p u t i n t o

    o u t p u t a n d i t w i l l s a v e t h e l i s t o f b e s t t r a n s f o r m s

    1 : Let weightable[1..input.size + 1][1..output.size + 1] be a new array2 :

    Let transformtable[1..input.size + 1][1..output.size + 1] be a new array3 :

    f o r i = input.size + 1 to 1 d o4 :

    f o r j = output.size + 1 to 1 d o5 :

    calc _ weight(transformtable, weighttable, input, output, i, j)6 :

    e n d f o r

    7 :

    e n d f o r

    8 :

    FindMinPath(transformtable, weighttable)9 : r e t u r n weighttable[1][1]

    T h i s g e t s t h e m i n i m u m w e i g h t o f n e e d t o c h a n g e i n p u t [ i . . i n p u t . s i z e ] t o o u t -

    p u t [ j . . o u t p u t . s i z e ] .

    6

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    7/35

    A l g o r i t h m 3 calc _ weight(transformtable, weighttable, input, output, i, j)

    P r e : T h e t h e w e i g h t a n d t r a n s f o r m t a b l e m u s t b e l l e d c o r r e c t l y f o r v a l u e s i f

    x a n d y s u c h t h a t x > i a n d y > j

    P o s t : T h i s w i l l s a v e t h a t o p t i m a l s o l u t i o n i n w e i g h t t a b l e [ i ] [ j ]

    1 : smallest = 2 :

    i f i input.size O R j output.size t h e n

    3 :

    i f j output.size t h e n

    4 :

    weight = INSERT_ WEIGHT + weighttable[i][j + 1]5 :

    i f weight < smallest t h e n

    6 :

    trans = INSERT7 :

    smallest = weight8 :

    e n d i f

    9 :

    e n d i f

    1 0 : i f i input.size A N D j output.size A N D input[i] == output[j]t h e n

    1 1 :

    weight = COPY_ WEIGHT + weighttable[i + 1][j + 1]1 2 :

    i f weight < smallest t h e n

    1 3 :

    trans = COPY1 4 :

    smallest = weight1 5 :

    e n d i f

    1 6 :

    e n d i f

    1 7 :

    i f i input.size t h e n

    1 8 : weight = DELETE_ WEIGHT + weighttable[i + 1][j]1 9 : i f weight < smallest t h e n

    2 0 : trans = DELETE2 1 :

    smallest = weight2 2 :

    e n d i f

    2 3 :

    e n d i f

    2 4 :

    i f i + 1 input.size A N Dj + 1 output.size A N Dinput[i] == output[j + 1] A N Doutput[j] == input[i + 1] t h e n

    2 5 : weight = TWIDDLE_ WEIGHT + weight[i + 2][j + 2]2 6 : i f weight < smallest t h e n

    2 7 : trans = TWIDDLE2 8 :

    smallest = weight2 9 :

    e n d i f

    3 0 :

    e n d i f

    3 1 :

    e n d i f

    3 2 :

    weighttable[i][j] = smallest3 3 : transformtable[i][j] = trans

    7

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    8/35

    A l g o r i t h m 4 FindMinPath(transformtable, weighttable)

    P r e : T h e 2 - D a r r a y s t r a n s f o r m t a b l e a n d w e i g h t t a b l e i s p r o p e r l y l l , w i t h ( 1 , 1 )

    t h e i n t h e t a b l e s i s t h e m i n i m u m t r a n s f o r m w e i g h t

    P o s t : T h a t t h e r e t u r n e d l i s t w i l l c o n t a i n t h e t h e s m a l l e s t

    1 :

    L e t m i n L i s t b e a n e m p t y l i s t

    2 :

    i = 13 :

    j = 14 :

    w h i l e i start.size O R j end.size d o

    5 :

    t = transformtable[i][j]6 : minList.pushback(t)7 : i f t == COPY t h e n 8 : i = i + 19 :

    j = j + 11 0 :

    e l s e i f t == DELETE t h e n 1 1 :

    i = i + 11 2 :

    e l s e i f t == INSERT t h e n 1 3 :

    j = j + 11 4 :

    e l s e i f t == TWIDDLE t h e n 1 5 :

    i = i + 21 6 : j = j + 21 7 : e n d i f

    1 8 : e n d w h i l e

    1 9 :

    r e t u r n minList

    C o m p l e x i t y A n a l y s i s

    T h e f u n c t i o n F i n d M i n P a t h w i l l r u n i n t i m e p r o p o r t i o n a l t o t h e n u m b e r o f e l -

    e m e n t s i n t h e w e i g h t t a b l e w h i c h m e a n s t h e F i n d M i n P a t h r u n s i n O(n m)

    t i m e , s i n c e c a l c _ w e i g h t r u n s i n c o n s t a n t t i m e a n d i s c a l l e d a n u m b e r o f t i m e s

    p r o p o r t i o n a l t o n m s o t h e r u n n i n g t i m e o f t h e i t e r a t i v e a l g o r i t h m i s

    O(n m) ( 4 )

    T h e m e m o r y u s a g e i s c o n s t a n t e v e r y w h e r e e x c e p t f o r t h e v a r i a b l e s w e i g h t -

    t a b l e a n d t r a n s f o r m t a b l e w h i c h e a c h h a v e a s i z e o f ( m + 1 ) ( n + 1 ) . S o t h e m e m o r y

    8

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    9/35

    c o m p l e x i t y o f t h e i t e r a t i v e a l g o r i t h m i s

    O(n m) ( 5 )

    T e s t i n g P l a n a n d R e s u l t s

    F i r s t t h e t e s t i n g w i l l m a d e s u r e t h e a l g o r i t h m s w o r k e d f o r v e r y s m a l l i n p u t s

    i n c l u d i n g o n e s w h e r e o n e o r b o t h o f t h e s t r i n g s a r e o f s i z e z e r o . T h e n s m a l l t e s t s

    w e r e p e r f o r m e d t o t e s t f o r e a s y t o c h e c k a n s w e r s s u c h a s w h e n t h e t w o s t r i n g

    a r e t h e s a m e , t h e i n p u t s t r i n g i s t h e o u t p u t s t r i n g w i t h a l l t h e o d d e l e m e n t s

    s w a p p e d w i t h i t s p r e v i o u s e l e m e n t . T h e n m o r e c o m p l i c a t e d w e r e p e r f o r m e d b y

    h a n d a n d c h e c k e d b y b y c o d i n g i n t h e a n s w e r i n t o t h e u n i t t e s t c o d e .

    T h e r u n n i n g t i m e s o f t h e r e c u r s i v e a l g o r i t h m i s n o t r e d u c e d i n c o m p l e x i t y b y

    a l a r g e a m o u n t , t h e r u n n i n g t i m e w i l l s t i l l b e O(2n+m) , a l t h o u g h w i t h s t r i n g s

    w h e r e n o n e o f t h e c h a r a c t e r s a r e t h e s a m e l i n e s 8 a n d 1 6 o f a l g o r i t h m n e v e r

    g e t e x e c u t e d a n d c a u s e t h e r u n n i n g t i m e t o d e c r e a s e . T h e w o r s t w o u l d h a p p e n

    w h e n a l l t h e e l e m e n t s a r e t h e s a m e c a u s i n g l i n e s 8 a n d 1 6 t o b e r u n e v e r y t i m e .

    W i t h t h e i t e r a t i v e a l g o r i t h m t h e o n l y t h i n g a e c t i n g t h e r u n n i n g t i m e i s

    h o w m a n y d i e r e n t t r a n s f o r m s a r e i n t h e o p t i m a l t r a n s f o r m a t i o n l i s t . T h e m o r e

    t r a n s f o r m a t i o n s t h e r e a r e i n t h e l i s t t h e m o r e t h e a l g o r i t h m t h a t g e t t h e o p t i m a l

    t r a n s f o r m a t i o n l i s t h a s t o t r a v e l t h r o u g h t h e l a r g e t w o d i m e n s i o n a l t a b l e . T h i s

    m e a n s t h e b e s t r u n n i n g t i m e w i l l b e w h e n t h e t w o s t r i n g s w i l l h a v e n o t h i n g b u t

    t w i d d l e s f o r t h e o p t i m a l t r a n s f o r m a t i o n l i s t . T h e s l o w e s t t i m e w i l l t h e n b e w h e n

    t h e t w o s t r i n g s h a v e n o c h a r a c t e r s i n c o m m o n .

    F o r a l l o f t h e b e n c h m a r k s , e v e n t h o u g h t t h e r u n n i n g t i m e d e p e n d s o n b o t h

    s t r i n g s i z e s , t h e s i z e s o f t h e t w o s t r i n g s a r e o f e q u a l s i z e . T h i s i s t o s i m p l i f y

    t h i n g s a n d b e c a u s e t h e r e i s n o t h i n g t o l e a r n f r o m p e r f o r m i n g t h o s e t e s t s .

    9

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    10/35

    R e s u l t s

    R e c u r s i v e V e r s i o n

    E m p i r i c a l l y D e r i v e d R u n T i m e s :

    0

    10

    20

    30

    40

    50

    60

    70

    8 9 10 11 12 13 14 15

    Time(Sec.)

    Input Size

    Recursive Edit Distance Results

    Recursive PlotRecursive Approximation

    T(n) = 0.00162938 2n ( 6 )

    n0 = 13 ( 7 )

    I t e r a t i v e V e r s i o n

    E m p i r i c a l l y D e r i v e d R u n T i m e s :

    1 0

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    11/35

    0

    5

    10

    15

    20

    25

    0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000

    Time(Sec.)

    Input Size

    Iterative Edit Distance Results

    Iterative PlotIterative Approximation

    T(n) = 5.90954e 08 n2 ( 8 )

    n0 = 9000 ( 9 )

    F i n a l W e i g h t s

    C O P Y W E I G H T = 1

    D E L E T E W E I G H T = 3

    I N S E R T W E I G H T = 3

    T W I D D L E W E I G H T = 2

    1 1

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    12/35

    P r o b l e m s

    O n e p r o b l e m w a s t h a t t h e r e w a s n o c l e a r c u t b e s t s e t o f w e i g h t s o r e v e n b e s t

    s e q u e n c e s f o r t h e m o r e c o m p l i c a t e d i n p u t s t r i n g s . T h i s w a s d e a l t w i t h b y s e t -

    t i n g u p m a n y d i e r e n t t e s t c a s e s a n d h a n d t w e a k i n g t h e w e i g h t s u n t i l s e n s i b l e

    s o l u t i o n s w e r e f o u n d . A n o t h e r i s t h a t t h e r e c u r s i v e v e r s i o n w a s s o s l o w t h a t

    u s i n g i t t o c o m p a r e t r a n s f o r m a t i o n s e q u e n c e s w i t h t h e i t e r a t i v e v e r s i o n q u i c k l y

    b e c a m e u n b e a r a b l e . A n o t h e r p r o b l e m i s t h a t n d i n g t h e e x a c t v a l u e s o f n0 s u c h

    t h a t t h e a c t u a l t i m e t a k e n o f i n p u t s i z e s o f n n0 b e h a v e s l i k e t h e a s y m p t o t i c

    c o m p l e x i t y i s d i c u l t t o n d d o t o t i m e r r e s o l u t i o n b e g i n o n l y a s e c o n d .

    C o n c l u s i o n

    F r o m t h e d a t a i t h a s b e e n s h o w n t h a t b y u s i n g d y n a m i c p r o g r a m m i n g i t h a s

    d r a s t i c a l l y c u t d o w n t h e r u n n i n g t i m e c o m p l e x i t y b u t a t t h e c o s t o f i n c r e a s i n g

    t h e m e m o r y c o m p l e x i t y . B o t h a l g o r i t h m s e x h i b i t e d t h e i r e x p e c t e d r u n t i m e

    c o m p l e x i t i e s a n d t h e r e c u r s i v e a l g o r i t h m ' s t i m e a p p r o a c h e d a s y m p t o t i c c o m -

    p l e x i t y v e r y q u i c k l y , a t a b o u t

    n0 = 13w h i l e t h e i t e r a t i v e v e r s i o n w a s a b o u t

    n0 = 9000 . W i t h t h e e x p e r i m e n t s I p e r f o r m e d I a r r i v e d a t

    1 2

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    13/35

    A p p e n d i x A

    S o u r c e C o d e

    m a i n . c p p

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / \ f i l e m a i n . c p p

    / / / \ a u t h o r A a r o n W i l h e l m

    / / / \ b r i e f T e s t i n g a n d b e n c h m a r k i n g o f t h e E d i t D i s t a n c e a l g o r i t h m s

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    # i n c l u d e < i o s t r e a m >

    # i n c l u d e < v e c t o r >

    # i n c l u d e < c a s s e r t >

    # i n c l u d e < s t r i n g >

    # i n c l u d e < f s t r e a m >

    # i n c l u d e < c s t d l i b >

    # i n c l u d e < t i m e . h >

    # i n c l u d e " e d i t _ d i s t a n c e . h "

    # d e f i n e I T E R _ S T A R T _ S I Z E 1 0 0 0

    # d e f i n e I T E R _ S T E P _ S I Z E 1 0 0 0

    # d e f i n e I T E R _ E N D _ S I Z E 2 0 3 0 0

    # d e f i n e R E C V _ S T A R T _ S I Z E 8

    # d e f i n e R E C V _ S T E P _ S I Z E 1

    # d e f i n e R E C V _ E N D _ S I Z E 1 5

    u s i n g n a m e s p a c e s t d ;

    v o i d s t r 2 v e c t o r ( c o n s t s t r i n g & s t r , s t d : : v e c t o r < c h a r > & v c t )

    {

    v c t . c l e a r ( ) ;

    f o r ( u n s i g n e d i n t i = 0 ; i < s t r . s i z e ( ) ; + + i )

    {

    v c t . p u s h _ b a c k ( s t r [ i ] ) ;

    }

    }

    v o i d s t r 2 v e c t o r ( c o n s t c h a r s t r , s t d : : v e c t o r < c h a r > & v c t )

    {

    v c t . c l e a r ( ) ;

    f o r ( u n s i g n e d i n t i = 0 ; s t r [ i ] ! = ' \ 0 ' ; + + i )

    {

    1 3

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    14/35

    v c t . p u s h _ b a c k ( s t r [ i ] ) ;

    }

    }

    v o i d p a r s e _ i n p u t s ( i n t a r g c , c h a r a r g v [ ] , b o o l r , b o o l i , b o o l u )

    {

    s t r i n g s t r ;

    f o r ( i n t j = 0 ; j < a r g c ; + + j )

    {

    s t r = a r g v [ j ] ;

    i f ( s t r = = " h " )

    {

    c o u t < < " W e l l y o u r s c r e w e d " < < e n d l ;

    e x i t ( 0 ) ;

    }

    e l s e i f ( s t r = = "

    b i " )

    {

    ( i ) = t r u e ;

    }

    e l s e i f ( s t r = = " b r " )

    {

    ( r ) = t r u e ;

    }

    e l s e i f ( s t r = = " u " )

    {

    ( u ) = t r u e ;

    }

    e l s e

    {

    c o u t < < " N o t a v a l i d f l a g t r y u s i n g h " < < e n d l ;

    e x i t ( 1 ) ;

    }

    }

    }

    i n t m a i n ( i n t a r g c , c h a r a r g v [ ] )

    {

    E d i t _ D i s t < c h a r > d i f f ;

    E d i t _ D i s t < c h a r > i t e r a t e , r e c u r s e ;

    b o o l b e n c h _ r e c v = f a l s e ; / / b e n c h m a r k r e c u r s i v e a l g o

    b o o l b e n c h _ i t = f a l s e ; / / b e n c h m a r k i t e r a t i v e a l g o

    b o o l u n i t _ t e s t = f a l s e ;

    1 4

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    15/35

    v e c t o r < c h a r > s t a r t , f i n i s h ;

    o f s t r e a m r e c _ f i l e , i t _ f i l e ;

    t i m e _ t s t a r t _ t i m e , e n d _ t i m e ;

    s r a n d ( t i m e ( 0 ) ) ;

    a r g c ;

    a r g v + + ;

    p a r s e _ i n p u t s ( a r g c , a r g v , & b e n c h _ r e c v , & b e n c h _ i t , & u n i t _ t e s t ) ;

    i f ( b e n c h _ r e c v )

    {

    c o u t < < " S t a r t i n g R e c u r s i v e B e n c h m a r k " < < e n d l ;

    r e c _ f i l e . o p e n ( " r e c u r s e . d a t " ) ;

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    f o r ( u n s i g n e d i n t i = 1 ; i < = R E C V _ E N D _ S I Z E ; + + i )

    {

    s t a r t . p u s h _ b a c k ( r a n d ( ) ) ;

    f i n i s h . p u s h _ b a c k ( r a n d ( ) ) ;

    i f ( i > = R E C V _ S T A R T _ S I Z E & &

    ( i R E C V _ S T A R T _ S I Z E ) % R E C V _ S T E P _ S I Z E = = 0 )

    {

    s t a r t _ t i m e = t i m e ( N U L L ) ;

    r e c u r s e . f i n d _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    e n d _ t i m e = t i m e ( N U L L ) ;

    r e c _ f i l e < < i < < " \ t " < < ( e n d _ t i m e

    s t a r t _ t i m e ) < < e n d l ;

    }

    }

    r e c _ f i l e . c l o s e ( ) ;

    c o u t < < " E n d i n g R e c u r s i v e B e n c h m a r k " < < e n d l ;

    }

    i f ( b e n c h _ i t )

    {

    c o u t < < " S t a r t i n g I t e r a t i v e B e n c h m a r k " < < e n d l ;

    i t _ f i l e . o p e n ( " i t e r a t e . d a t " ) ;

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    f o r ( u n s i g n e d i n t i = 1 ; i < = I T E R _ E N D _ S I Z E ; i + + )

    {

    s t a r t . p u s h _ b a c k ( r a n d ( ) ) ;

    f i n i s h . p u s h _ b a c k ( r a n d ( ) ) ;

    1 5

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    16/35

    i f ( i > = I T E R _ S T A R T _ S I Z E & &

    ( i I T E R _ S T A R T _ S I Z E ) % I T E R _ S T E P _ S I Z E = = 0 )

    {

    s t a r t _ t i m e = t i m e ( N U L L ) ;

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    e n d _ t i m e = t i m e ( N U L L ) ;

    i t _ f i l e < < i < < " \ t " < < ( e n d _ t i m e s t a r t _ t i m e ) < < e n d l ;

    }

    }

    i t _ f i l e . c l o s e ( ) ;

    c o u t < < " E n d i n g I t e r a t i v e B e n c h m a r k " < < e n d l ;

    }

    / / s o m e s i m p l e t e s t s

    i f ( u n i t _ t e s t )

    {

    c o u t < < " S t a r t i n g U n i t T e s t " < < e n d l ;

    /

    E M P T Y V E C T O R

    /

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    r e c u r s e . f i n d _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    a s s e r t ( i t e r a t e . s i z e ( ) = = 0 ) ;

    a s s e r t ( f i n i s h . s i z e ( ) = = 0 ) ;

    /

    O B V I O U S C O P Y T E S T

    /

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    f o r ( i n t i = 0 ; i < 1 0 ; + + i )

    {

    s t a r t . p u s h _ b a c k ( ' A ' ) ;

    f i n i s h . p u s h _ b a c k ( ' A ' ) ;

    }

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    r e c u r s e . f i n d _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    1 6

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    17/35

    a s s e r t ( i t e r a t e . s i z e ( ) = = s t a r t . s i z e ( ) ) ;

    f o r ( i n t i = 0 ; i < 1 0 ; + + i )

    {

    a s s e r t ( i t e r a t e [ i ] = = r e c u r s e [ i ] ) ;

    a s s e r t ( i t e r a t e [ i ] = = C O P Y ) ;

    }

    /

    O B V I O U S I N S E R T T E S T

    /

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    f o r ( i n t i = 0 ; i < 1 0 ; + + i )

    {

    f i n i s h . p u s h _ b a c k ( ' B ' ) ;

    }

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    r e c u r s e . f i n d _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    a s s e r t ( i t e r a t e . s i z e ( ) = = r e c u r s e . s i z e ( ) ) ;

    a s s e r t ( i t e r a t e . s i z e ( ) = = f i n i s h . s i z e ( ) ) ;

    f o r ( u n s i g n e d i n t i = 0 ; i < i t e r a t e . s i z e ( ) ; + + i )

    {

    a s s e r t ( i t e r a t e [ i ] = = r e c u r s e [ i ] ) ;

    a s s e r t ( i t e r a t e [ i ] = = I N S E R T ) ;

    }

    /

    O B V I O U S D E L E T E T E S T

    /

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    f o r ( i n t i = 0 ; i < 1 0 ; + + i )

    {

    s t a r t . p u s h _ b a c k ( ' B ' ) ;

    }

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    r e c u r s e . f i n d _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    a s s e r t ( i t e r a t e . s i z e ( ) = = r e c u r s e . s i z e ( ) ) ;

    1 7

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    18/35

    f o r ( u n s i g n e d i n t i = 0 ; i < i t e r a t e . s i z e ( ) ; + + i )

    {

    a s s e r t ( i t e r a t e [ i ] = = r e c u r s e [ i ] ) ;

    a s s e r t ( i t e r a t e [ i ] = = D E L E T E ) ;

    }

    /

    O B V I O U S T W I D D L E T E S T

    /

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    s t r 2 v e c t o r ( " A a B b C c " , s t a r t ) ;

    s t r 2 v e c t o r ( " a A b B c C " , f i n i s h ) ;

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    r e c u r s e . f i n d _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    a s s e r t ( i t e r a t e . s i z e ( ) = = r e c u r s e . s i z e ( ) ) ;

    f o r ( u n s i g n e d i n t i = 0 ; i < i t e r a t e . s i z e ( ) ; + + i )

    {

    a s s e r t ( i t e r a t e [ i ] = = r e c u r s e [ i ] ) ;

    a s s e r t ( i t e r a t e [ i ] = = T W I D D L E ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    s t a r t . c l e a r ( ) ;

    f i n i s h . c l e a r ( ) ;

    s t r 2 v e c t o r ( " T h i s t e x t w i l l b e m o d i f i e d " , s t a r t ) ;

    s t r 2 v e c t o r ( " T e x t m o d i f c a t i o n d o n e " , f i n i s h ) ;

    i t e r a t e . i t _ m i n _ w e i g h t ( s t a r t , f i n i s h ) ;

    a s s e r t ( i t e r a t e [ 0 ] = = C O P Y ) ;

    f o r ( u n s i g n e d i n t i = 1 ; i < = 5 ; i + + )

    {

    a s s e r t ( i t e r a t e [ i ] = = D E L E T E ) ;

    }

    f o r ( u n s i g n e d i n t i = 6 ; i < = 9 ; i + + )

    {

    a s s e r t ( i t e r a t e [ i ] = = C O P Y ) ;

    }

    f o r ( u n s i g n e d i n t i = 1 0 ; i < = 1 7 ; i + + )

    1 8

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    19/35

    {

    a s s e r t ( i t e r a t e [ i ] = = D E L E T E ) ;

    }

    f o r ( u n s i g n e d i n t i = 1 8 ; i < = 2 2 ; i + + )

    {

    a s s e r t ( i t e r a t e [ i ] = = C O P Y ) ;

    }

    f o r ( u n s i g n e d i n t i = 2 3 ; i < = 2 5 ; i + + )

    {

    a s s e r t ( i t e r a t e [ i ] = = I N S E R T ) ;

    }

    a s s e r t ( i t e r a t e [ 2 6 ] = = C O P Y ) ;

    f o r ( u n s i g n e d i n t i = 2 7 ; i < = 3 2 ; i + + )

    {

    a s s e r t ( i t e r a t e [ i ] = = I N S E R T ) ;

    }

    a s s e r t ( i t e r a t e [ 3 3 ] = = C O P Y ) ;

    a s s e r t ( i t e r a t e [ 3 4 ] = = D E L E T E ) ;

    c o u t < < " E n d i n g U n i t T e s t " < < e n d l ;

    }

    r e t u r n 0 ;

    }

    1 9

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    20/35

    e d i t _ d i s t a n c e . h

    # i f n d e f E D I T _ D I S T A N C E _ H

    # d e f i n e E D I T _ D I S T A N C E _ H

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f i l e e d i t _ d i s t a n c e . h

    / / / @ a u t h o r A a r o n W i l h e l m

    / / / @ b r i e f D e c l a r a t i o n s f o r C l a s s t o h a n d l e t h e E d i t d i s t a n c e p r o b l e m

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    # i n c l u d e < l i s t >

    # i n c l u d e < v e c t o r >

    # i n c l u d e " e d i t _ d i s t a n c e _ t r a n s . h "

    s t r u c t _ e d _ t a b l e _ c e l l

    {

    u n s i g n e d i n t w e i g h t ;

    T r a n s _ t y p e s t _ t y p e ;

    } ;

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ c l a s s E d i t _ D i s t

    / / / @ b r i e f D e c l a r a t i o n s f o r C l a s s t o h a n d l e t h e E d i t d i s t a n c e p r o b l e m

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    c l a s s E d i t _ D i s t

    {

    p u b l i c :

    E d i t _ D i s t ( ) ;

    T r a n s _ t y p e s o p e r a t o r [ ] ( u n s i g n e d i n t ) ;

    u n s i g n e d i n t f i n d _ m i n _ w e i g h t

    (

    s t d : : v e c t o r < g e n e r i c > & s t a r t ,

    s t d : : v e c t o r < g e n e r i c > & e n d

    ) ;

    v o i d c l e a r ( ) ;

    u n s i g n e d i n t g e t _ m i n _ w e i g h t ( ) ;

    v o i d g e t _ t r a n s f o r m a t i o n s ( s t d : : v e c t o r < s t d : : s t r i n g > & ) ;

    s t a t i c b o o l a p p l y _ t r a n s f o r m a t i o n s

    (

    c o n s t T r a n s f o r m _ l i s t & ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & i n ,

    s t d : : v e c t o r < g e n e r i c > o u t

    2 0

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    21/35

    ) ;

    u n s i g n e d i n t i t _ m i n _ w e i g h t

    (

    c o n s t s t d : : v e c t o r < g e n e r i c > & s t a r t ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & e n d

    ) ;

    u n s i g n e d i n t s i z e ( ) ;

    T r a n s f o r m _ l i s t m i n _ t r a n s _ l i s t ;

    p r i v a t e :

    u n s i g n e d i n t _ f i n d _ m i n _ w e i g h t

    (

    s t d : : v e c t o r < g e n e r i c > & i n p u t ,

    u n s i g n e d i n t p o s _ i ,

    s t d : : v e c t o r < g e n e r i c > & o u t p u t ,

    u n s i g n e d i n t p o s _ o

    ) ;

    v o i d c e l l _ w e i g h t

    (

    _ e d _ t a b l e _ c e l l t ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & i n p u t ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & o u t p u t ,

    u n s i g n e d i n t x ,

    u n s i g n e d i n t y

    ) ;

    T r a n s f o r m _ l i s t c u r r _ t r a n s _ l i s t ;

    } ;

    # i n c l u d e " e d i t _ d i s t a n c e . t p p "

    # e n d i f / E D I T _ D I S T A N C E _ H /

    2 1

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    22/35

    e d i t _ d i s t a n c e . t p p

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f i l e e d i t _ d i s t a n c e . t p p

    / / / @ a u t h o r A a r o n W i l h e l m

    / / / @ b r i e f T h i s i m p l e m e n t s t h e E d i t D i s t a n c e p r o b l e m b o t h i t e r a t i v e l y a n d

    / / / r e c u r s i v e l y

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    # i n c l u d e < s t r i n g >

    # i n c l u d e < l i m i t s . h >

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n E d i t _ D i s t

    / / / @ b r i e f D e f a u l t c o n s t r u c t o r f o r t h e c l a s s d o e s n ' t r e a l l y d o a n y t h i n g

    / / / @ p r e N o n e

    / / / @ p o s t N o n e

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    E d i t _ D i s t < g e n e r i c > : : E d i t _ D i s t ( )

    {

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n o p e r a t o r [ ]

    / / / @ b r i e f T h e i n d e x t h o p t i m a l t r a n s f o r m

    / / / @ p r e n o n e

    / / / @ p o s t r e t u r n s t h e i n d e x

    / / / @ p a r a m i n d e x W h i c h t r a n s f o r m y o u w a n t

    / / / @ r e t u r n T h e i n d e x t h o p t i m a l t r a n s f o r m

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    T r a n s _ t y p e s E d i t _ D i s t < g e n e r i c > : : o p e r a t o r [ ] ( u n s i g n e d i n t i n d e x )

    {

    r e t u r n m i n _ t r a n s _ l i s t . l i s t [ i n d e x ] ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n f i n d _ m i n _ w e i g h t

    / / / @ b r i e f T h i s f i n d s t h e m i n i m u m s u m o f w e i g h t s i t t a k e s t o t r a n s f o r m t h e

    / / / t h e v e c t o r s t a r t i n t o t h e v e c t o r e n d

    / / / @ p r e N o n e

    / / / @ p o s t T h i s c a l c u l a t e s t h e m i n i m u m w e i g h t t o t r a n s f o r m s t a r t i n t o e n d

    / / / @ p a r a m v e c t o r < g e n e r i c > s t a r t

    2 2

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    23/35

    / / / @ p a r a m v e c t o r < g e n e r i c > e n d

    / / / @ r e t u r n T h e m i n i m u m s u m o f w e i g h t s t h a t i t t a k e s t o t r a n s f o r m t h e

    / / / v e c t o r s t a r t t o e n d

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    u n s i g n e d i n t E d i t _ D i s t < g e n e r i c > : : f i n d _ m i n _ w e i g h t

    (

    s t d : : v e c t o r < g e n e r i c > & s t a r t ,

    s t d : : v e c t o r < g e n e r i c > & e n d

    )

    {

    c l e a r ( ) ;

    r e t u r n _ f i n d _ m i n _ w e i g h t ( s t a r t , 0 , e n d , 0 ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n g e t _ m i n _ w e i g h t

    / / / @ b r i e f A f t e r t h e m i n w e i g h t h a s b e e n c a l c u l a t e d t h i s c a n b e u s e d t o g e t

    / / / t h a t w e i g h t

    / / / @ p r e O n e o f t h e f i n d _ m i n _ w e i g h t f u n c t i o n s m u s t b e c a l l e d w i t h

    / / / v e c t o r s ( e v e n e m p t y o n e s ) m u s t b e c a l l e d t o g e t v a l u a b l e i n f o r m a t i o n

    / / / e l s e y o u ' l l j u s t g e t z e r o

    / / / @ p o s t G e t t h e w e i g h t o f t h e m o s t e f f i c i e n t t r a n s f o r m a t i o n l i s t

    / / / @ r e t u r n W e i g h t o f t h e t r a n s f o r m a t i o n l i s t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    u n s i g n e d i n t E d i t _ D i s t < g e n e r i c > : : g e t _ m i n _ w e i g h t ( )

    {

    r e t u r n m i n _ t r a n s _ l i s t . w e i g h t ( ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n _ f i n d _ m i n _ w e i g h t

    / / / @ b r i e f T h i s i s t h e r e c u r s i v e i m p l e m e n t a t i o n o f t h e e d i t d i s t a n c e p r o b l e m

    / / / i t w o r k s b e s p l i t i n g t h e p r o b l e m u p a n d o n l y t r a n s f o r m i n g

    / / / i n p u t [ p o s _ i . . s i z e ( ) ] t o o u t p u t [ p o s _ o . . s i z e ( ) ]

    / / / @ p r e I n o r d e r f o r t h i s t o y i e l d a c o r r e c t a n s w e r t h e p r e v i o u s

    / / / t r a n s f o r m a t i o n s m u s t h a v e n o t b e e n i n v a l i d ( e . g . n o c o p y m o v e

    / / / w h e n i n p u t [ i ] ! = o u t p u t [ j ] )

    / / / @ p o s t T h e m i n i m u m w e i g h t t o t r a n s f o r m i n p u t i n t o o u t p u t i s c a l c u l a t e d a n d

    / / / t h e m i n i m u m t r a n s f o r m a t i o n l i s t i s s a v e d i n m i n _ t r a n s _ l i s t

    / / / @ p a r a m v e c t o r < g e n e r i c > i n p u t t h e v e c t o r t h a t i s s t a r t e d w i t h t h a t i s

    / / / i s t u r n e d i n t o t h e o u t p u t s t r i n g ( i n p u t d o e s n ' t a c t u a l l y g e t

    / / / m o d i f i e d

    / / / @ p a r a m u n s i g n e d i n t p o s _ i

    2 3

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    24/35

    / / / T h e p o s i t i o n i n t o t h e i n p u t v e c t o r , t h i s s p l i t s t h e p r o b l e m i n t o

    / / / a s u b p r o b l e m o f f i n d t h e m i n w e i g h t o f i n p u t [ p o s _ i . . e n d ]

    / / / @ p a r a m v e c t o r < g e n e r i c > o u t p u t t h e v e c t o r t h a t t h e i n p u t v e c t o r

    / / / i s t u r n e d i n t o

    / / / @ p a r a m u n s i g n e d i n t p o s _ o

    / / / T h e p o s i t i o n i n t o t h e o u t p u t v e c t o r , t h i s s p l i t s t h e p r o b l e m i n t o

    / / / a s u b p r o b l e m o f f i n d t h e m i n w e i g h t o f o u t p u t [ p o s _ i . . s i z e ( ) ]

    / / / @ r e t u r n T h e m i n i m u m w e i g h t o f t r a n s f o r m i n g i n p u t [ p o s _ i . . s i z e ( ) ] t o

    / / / o u t p u t [ p o s _ o . . s i z e ( ) ]

    / / / p r o o f : S i n c e a t e a c h s t e p t h e a l g o r i t h m p i c k s t h e o p t i m a l d e c i s i o n

    / / / a n d t h a t d e c i s i o n d o e s n o t c o n f l i c t w i t h g l o b a l o p t i m a l s o l u t i o n .

    / / / I t c a n e a s i l y b e s h o w n t h a t t h e m o s t o p t i m a l c h o i c e i s m a d e

    / / / a t e a c h s t e p b e c a u s e e a c h t i m e t h e a l g o r i t h m a t t e m p t s s o m e t h i n g

    / / / i t m a k e s s u r e t h a t t h e r e s u l t i n g v a l u e i s t h e s m a l l e s t p o s s i b l e

    / / / v a l u e

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    u n s i g n e d i n t E d i t _ D i s t < g e n e r i c > : : _ f i n d _ m i n _ w e i g h t

    (

    s t d : : v e c t o r < g e n e r i c > & i n p u t ,

    u n s i g n e d i n t p o s _ i ,

    s t d : : v e c t o r < g e n e r i c > & o u t p u t ,

    u n s i g n e d i n t p o s _ o

    )

    {

    u n s i g n e d i n t c u r r , m i n = U I N T _ M A X ;

    /

    c h e c k t o s e e i f a t e n d

    /

    i f ( p o s _ i < i n p u t . s i z e ( ) | | p o s _ o < o u t p u t . s i z e ( ) )

    {

    / I n s e r t /

    i f ( p o s _ o < o u t p u t . s i z e ( ) )

    {

    c u r r _ t r a n s _ l i s t . p u s h _ b a c k ( I N S E R T ) ;

    c u r r = I N S E R T _ W E I G H T + _ f i n d _ m i n _ w e i g h t ( i n p u t , p o s _ i , o u t p u t , p o s _ o + 1 ) ;

    c u r r _ t r a n s _ l i s t . p o p _ b a c k ( ) ;

    i f ( c u r r < m i n )

    {

    m i n = c u r r ;

    }

    }

    / C o p y /

    i f (

    p o s _ i < i n p u t . s i z e ( ) & &

    2 4

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    25/35

    p o s _ o < o u t p u t . s i z e ( ) & &

    i n p u t [ p o s _ i ] = = o u t p u t [ p o s _ o ]

    )

    {

    c u r r _ t r a n s _ l i s t . p u s h _ b a c k ( C O P Y ) ;

    c u r r = C O P Y _ W E I G H T + _ f i n d _ m i n _ w e i g h t ( i n p u t , p o s _ i + 1 , o u t p u t , p o s _ o + 1 ) ;

    c u r r _ t r a n s _ l i s t . p o p _ b a c k ( ) ;

    i f ( c u r r < m i n )

    {

    m i n = c u r r ;

    }

    }

    / D e l e t e /

    i f ( p o s _ i < i n p u t . s i z e ( ) )

    {

    c u r r _ t r a n s _ l i s t . p u s h _ b a c k ( D E L E T E ) ;

    c u r r = D E L E T E _ W E I G H T + _ f i n d _ m i n _ w e i g h t ( i n p u t , p o s _ i + 1 , o u t p u t , p o s _ o ) ;

    c u r r _ t r a n s _ l i s t . p o p _ b a c k ( ) ;

    i f ( c u r r < m i n )

    {

    m i n = c u r r ;

    }

    }

    /

    T w i d d l e

    /

    i f ( p o s _ i + 1 < i n p u t . s i z e ( ) & & p o s _ o + 1 < o u t p u t . s i z e ( ) & &

    i n p u t [ p o s _ i ] = = o u t p u t [ p o s _ o + 1 ] & & o u t p u t [ p o s _ o ] = = i n p u t [ p o s _ i + 1 ]

    )

    {

    c u r r _ t r a n s _ l i s t . p u s h _ b a c k ( T W I D D L E ) ;

    c u r r = T W I D D L E _ W E I G H T + _ f i n d _ m i n _ w e i g h t ( i n p u t , p o s _ i + 2 , o u t p u t , p o s _ o + 2 ) ;

    c u r r _ t r a n s _ l i s t . p o p _ b a c k ( ) ;

    i f ( c u r r < m i n )

    {

    m i n = c u r r ;

    }

    }

    }

    / a t e n d a n d n e e d t o c o m p a r e w e i g h t

    t o m i n w e i g h t l i s t t o s e e i f b e t t t e r

    /

    e l s e

    2 5

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    26/35

    {

    i f ( m i n _ t r a n s _ l i s t . s i z e ( ) = = 0 )

    {

    m i n _ t r a n s _ l i s t = c u r r _ t r a n s _ l i s t ;

    }

    e l s e i f ( m i n _ t r a n s _ l i s t . w e i g h t ( ) > c u r r _ t r a n s _ l i s t . w e i g h t ( ) )

    {

    m i n _ t r a n s _ l i s t = c u r r _ t r a n s _ l i s t ;

    }

    m i n = 0 ;

    }

    r e t u r n m i n ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n i t _ m i n _ w e i g h t

    / / / @ b r i e f T h i s i s t h e i t e r a i v e i m p l e m e n t a t i o n o f t h e e d i t d i s t a n c e p r o b l e m

    / / / i t w o r k s b e s p l i t i n g t h e p r o b l e m u p a n d o n l y t r a n s f o r m i n g

    / / / i n p u t [ p o s _ i . . s i z e ( ) ] t o o u t p u t [ p o s _ o . . s i z e ( ) ]

    / / / @ p r e N o n e

    / / / @ p o s t T h e m i n i m u m w e i g h t t o t r a n s f o r m i n p u t i n t o o u t p u t i s c a l c u l a t e d a n d

    / / / t h e m i n i m u m t r a n s f o r m a t i o n l i s t i s s a v e d i n m i n _ t r a n s _ l i s t

    / / / @ p a r a m v e c t o r < g e n e r i c > i n p u t t h e v e c t o r t h a t i s s t a r t e d w i t h t h a t i s

    / / / i s t u r n e d i n t o t h e o u t p u t s t r i n g ( i n p u t d o e s n ' t a c t u a l l y g e t

    / / / m o d i f i e d

    / / / @ p a r a m v e c t o r < g e n e r i c > o u t p u t t h e v e c t o r t h a t t h e i n p u t v e c t o r

    / / / i s t u r n e d i n t o

    / / / @ r e t u r n T h e m i n i m u m w e i g h t o f t r a n s f o r m i n g i n p u t [ p o s _ i . . s i z e ( ) ] t o

    / / / o u t p u t [ p o s _ o . . s i z e ( ) ]

    / / / p r o o f : S i n c e a t e a c h s t e p t h e a l g o r i t h m p i c k s t h e o p t i m a l d e c i s i o n

    / / / a n d t h a t d e c i s i o n d o e s n o t c o n f l i c t w i t h g l o b a l o p t i m a l s o l u t i o n .

    / / / I t c a n e a s i l y b e s h o w n t h a t t h e m o s t o p t i m a l c h o i c e i s m a d e

    / / / a t e a c h s t e p b e c a u s e e a c h t i m e t h e a l g o r i t h m a t t e m p t s s o m e t h i n g

    / / / i t m a k e s s u r e t h a t t h e r e s u l t i n g v a l u e i s t h e s m a l l e s t p o s s i b l e

    / / / v a l u e

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    u n s i g n e d i n t E d i t _ D i s t < g e n e r i c > : : i t _ m i n _ w e i g h t

    (

    c o n s t s t d : : v e c t o r < g e n e r i c > & s t a r t ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & e n d

    )

    {

    2 6

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    27/35

    _ e d _ t a b l e _ c e l l t a b l e = N U L L ;

    u n s i g n e d i n t r e t ;

    / / C r e a t e t a b l e

    t a b l e = n e w _ e d _ t a b l e _ c e l l [ s t a r t . s i z e ( ) + 1 ] ;

    f o r ( u n s i g n e d i n t i = 0 ; i < s t a r t . s i z e ( ) + 1 ; i + + )

    {

    t a b l e [ i ] = n e w _ e d _ t a b l e _ c e l l [ e n d . s i z e ( ) + 1 ] ;

    }

    / / F i l l t a b l e

    / / i n v a r i a n t t e s t h e r e w o u l d c h e c k t h a t t a b l e i s e m p t y

    f o r ( u n s i g n e d i n t i = s t a r t . s i z e ( ) ; ; i )

    {

    f o r ( u n s i g n e d i n t j = e n d . s i z e ( ) ; ; j )

    {

    / / i n v a r i a n t h e r e w o u l d c h e c k l o o p c o n d i t i o n a n d

    / / t h a t t h e t a b l e i s b e i n g f i l l e d p r o p e r l y

    / / C o u l d c h e c k t h a t t a b l e [ x ] [ y ] i s a l o c a l m i n i m u m f o r x > i a n d y > j

    c e l l _ w e i g h t ( t a b l e , s t a r t , e n d , i , j ) ;

    i f ( j = = 0 )

    {

    b r e a k ;

    }

    }

    i f ( i = = 0 )

    {

    b r e a k ;

    }

    }

    / / i n v a r i a n t h e r e c h e c k ! l o o p c o n d i t i o n

    / / a n d t h a t t h e p o s t c o n d i t i o n i s t r u e

    / / t h a t t a b l e [ 0 ] [ 0 ] h a s t h e m i n w e i g h t

    / / F i n d m i n t r a n s f o r m a t i o n l i s t

    m i n _ t r a n s _ l i s t . l i s t . r e s e r v e

    (

    ( ( s t a r t . s i z e ( ) < e n d . s i z e ( ) ) ? e n d . s i z e ( ) : s t a r t . s i z e ( ) )

    ) ;

    m i n _ t r a n s _ l i s t . c l e a r ( ) ;

    / / i n v a r i a n t c o u l d b e u s e d t o s h o w a t e a c h v a l u e o f i a n d j

    / / t h a t t h e v a l u e o f i n t h e t a b l e a t i , j i s t r u e l y

    / / t h e o p t i m a l s u b p r o b l e m

    2 7

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    28/35

    f o r ( u n s i g n e d i n t i = 0 , j = 0 ; i < s t a r t . s i z e ( ) | | j < e n d . s i z e ( ) ; )

    {

    / / C o u l d c h e c k t h a t t a b l e [ x ] [ y ] i s a l o c a l m i n i m u m f o r x > i a n d y > j

    T r a n s _ t y p e s a ;

    a = t a b l e [ i ] [ j ] . t _ t y p e ;

    m i n _ t r a n s _ l i s t . p u s h _ b a c k ( a ) ;

    s w i t c h ( a )

    {

    c a s e C O P Y :

    + + i ;

    + + j ;

    b r e a k ;

    c a s e D E L E T E :

    + + i ;

    b r e a k ;

    c a s e I N S E R T :

    + + j ;

    b r e a k ;

    c a s e T W I D D L E :

    i + = 2 ;

    j + = 2 ;

    b r e a k ;

    } ;

    }

    / / i n v a r i a n c e c o u l d b e u s e d t o c h e c k t h a t c o r r e c t s e q u e n c e w a s c h o s e n

    / / a n d t h e ! l o o p c o n d i t i o n

    r e t = t a b l e [ 0 ] [ 0 ] . w e i g h t ;

    f o r ( u n s i g n e d i n t i = 0 ; i < s t a r t . s i z e ( ) + 1 ; i + + )

    {

    d e l e t e [ ] t a b l e [ i ] ;

    }

    d e l e t e [ ] t a b l e ;

    r e t u r n r e t ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n c e l l _ w e i g h t

    / / / @ b r i e f C a l c u l a t e t h e

    / / / @ p r e t h e t a b l e m u s t b e f i l l e d i n t h e p o s i t i v e p o s _ i a n d p o s i t i v e p o s _ o

    2 8

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    29/35

    / / / d i r e c t i o n

    / / / @ p o s t T h e m i n i m u m p o s s i b l e w e i g h t f o r t h e s u b p r o b l e m w i l l b e s a v e d

    / / / i n t [ p o s _ i ] [ p o s _ o ]

    / / / @ p a r a m T h e t a b l e o f m i n i m u m w e i g h t s a n d c o r r e s p o n d i n g t r a n s f o r m a t i o n s

    / / / @ p a r a m v e c t o r < g e n e r i c > i n p u t t h e v e c t o r t h a t i s s t a r t e d w i t h t h a t i s

    / / / i s t u r n e d i n t o t h e o u t p u t s t r i n g ( i n p u t d o e s n ' t a c t u a l l y g e t

    / / / m o d i f i e d

    / / / @ p a r a m v e c t o r < g e n e r i c > o u t p u t

    t h e v e c t o r t h a t t h e i n p u t v e c t o r

    / / / i s t u r n e d i n t o

    / / / @ p a r a m u n s i g n e d i n t p o s _ i

    / / / T h e p o s i t i o n i n t o t h e i n p u t v e c t o r , t h i s s p l i t s t h e p r o b l e m i n t o

    / / / a s u b p r o b l e m o f f i n d t h e m i n w e i g h t o f i n p u t [ p o s _ i . . e n d ]

    / / / @ p a r a m u n s i g n e d i n t p o s _ o

    / / / T h e p o s i t i o n i n t o t h e i n p u t v e c t o r , t h i s s p l i t s t h e p r o b l e m i n t o

    / / / a s u b p r o b l e m o f f i n d t h e m i n w e i g h t o f o u t p u t [ p o s _ o . . e n d ]

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    v o i d E d i t _ D i s t < g e n e r i c > : : c e l l _ w e i g h t

    (

    _ e d _ t a b l e _ c e l l t ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & i n p u t ,

    c o n s t s t d : : v e c t o r < g e n e r i c > & o u t p u t ,

    u n s i g n e d i n t p o s _ i ,

    u n s i g n e d i n t p o s _ o

    )

    {

    u n s i g n e d i n t c u r r , m i n = U I N T _ M A X ;

    T r a n s _ t y p e s c u r r _ b e s t _ t r a n s ;

    / c h e c k t o s e e i f a t e n d /

    i f ( p o s _ i < i n p u t . s i z e ( ) | | p o s _ o < o u t p u t . s i z e ( ) )

    {

    / I n s e r t /

    i f ( p o s _ o < o u t p u t . s i z e ( ) )

    {

    c u r r = I N S E R T _ W E I G H T + t [ p o s _ i ] [ p o s _ o + 1 ] . w e i g h t ;

    i f ( c u r r < m i n )

    {

    c u r r _ b e s t _ t r a n s = I N S E R T ;

    m i n = c u r r ;

    }

    }

    / C o p y /

    i f (

    2 9

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    30/35

    p o s _ i < i n p u t . s i z e ( ) & &

    p o s _ o < o u t p u t . s i z e ( ) & &

    i n p u t [ p o s _ i ] = = o u t p u t [ p o s _ o ]

    )

    {

    c u r r = C O P Y _ W E I G H T + t [ p o s _ i + 1 ] [ p o s _ o + 1 ] . w e i g h t ;

    i f ( c u r r < m i n )

    {

    c u r r _ b e s t _ t r a n s = C O P Y ;

    m i n = c u r r ;

    }

    }

    / D e l e t e /

    i f ( p o s _ i < i n p u t . s i z e ( ) )

    {

    c u r r = D E L E T E _ W E I G H T + t [ p o s _ i + 1 ] [ p o s _ o ] . w e i g h t ;

    i f ( c u r r < m i n )

    {

    c u r r _ b e s t _ t r a n s = D E L E T E ;

    m i n = c u r r ;

    }

    }

    / T w i d d l e /

    i f ( p o s _ i + 1 < i n p u t . s i z e ( ) & & p o s _ o + 1 < o u t p u t . s i z e ( ) & &

    i n p u t [ p o s _ i ] = = o u t p u t [ p o s _ o + 1 ] & & o u t p u t [ p o s _ o ] = = i n p u t [ p o s _ i + 1 ]

    )

    {

    c u r r = T W I D D L E _ W E I G H T + t [ p o s _ i + 2 ] [ p o s _ o + 2 ] . w e i g h t ;

    i f ( c u r r < m i n )

    {

    c u r r _ b e s t _ t r a n s = T W I D D L E ;

    m i n = c u r r ;

    }

    }

    / / W r i t e f i n d i n g t o t a b l e

    t [ p o s _ i ] [ p o s _ o ] . w e i g h t = m i n ;

    t [ p o s _ i ] [ p o s _ o ] . t _ t y p e = c u r r _ b e s t _ t r a n s ;

    }

    / / s t d : : c e r r < < m i n < < s t d : : e n d l ;

    }

    3 0

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    31/35

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n c l e a r

    / / / @ b r i e f c l e a r i n t e r n a l d a t a

    / / / @ p r e n o n e

    / / / @ p o s t c l e a r s i n t e r n a l d a t a

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    v o i d E d i t _ D i s t < g e n e r i c > : : c l e a r ( )

    {

    m i n _ t r a n s _ l i s t . c l e a r ( ) ;

    c u r r _ t r a n s _ l i s t . c l e a r ( ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n s i z e

    / / / @ b r i e f g e t t h e s i z e o f t h e t r a n s f o r m a t i o n l i s t

    / / / @ p r e N o n e

    / / / @ p o s t g e t t h e s i z e o f t r a n s f o r m a t i o n l i s t

    / / / @ r e t u r n s i z e o f t r a n s f o r m a t i o n l i s t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    t e m p l a t e

    u n s i g n e d i n t E d i t _ D i s t < g e n e r i c > : : s i z e ( )

    {

    r e t u r n m i n _ t r a n s _ l i s t . s i z e ( ) ;

    }

    3 1

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    32/35

    e d i t _ d i s t a n c e _ t r a n s . h

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f i l e e d i t _ d i s t a n c e . h

    / / / @ a u t h o r A a r o n W i l h e l m

    / / / @ b r i e f T h i s m a n a g e s t h e t r a n s f o r m l i s t a n d w e i g h t s u m s f o r t h e l i s t

    / / / o f t r a n s f o r m s

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    # i f n d e f E D I T _ D I S T A N C E _ T R A N S _ H

    # d e f i n e E D I T _ D I S T A N C E _ T R A N S _ H

    # i n c l u d e < l i s t >

    # i n c l u d e < v e c t o r >

    / W e i g h t s o f d i f f e r e n t t r a n s f o r m s /

    # d e f i n e C O P Y _ W E I G H T 1

    # d e f i n e D E L E T E _ W E I G H T 3

    # d e f i n e I N S E R T _ W E I G H T 3

    # d e f i n e T W I D D L E _ W E I G H T 2

    / D i f f e r e n t t y p e s o f t r a n s f o r m a t i o n s /

    e n u m T r a n s _ t y p e s

    {

    C O P Y = 0 ,

    D E L E T E ,

    I N S E R T ,

    T W I D D L E

    } ;

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n g e t _ w e i g h t

    / / / @ b r i e f g e t t h e w e i g h t o f a t r a n s f o r m a t i o n

    / / / @ p a r a m t h e t y p e o f t r a n s f o r m a t i o n t h a t y o u w a n t t h e w e i g h t o f

    / / / @ p r e n o n e

    / / / @ p o s t g e t t h e w e i g h t o f a t r a n s f o r m a t i o n

    / / / @ r e t u r n t h e w e i g h t o f a t r a n s f o r m a t i o n u n l e s s a n a i s i n v a l i d

    / / / i n w h i c h c a s e z e r o i s r e t u r n e d

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    i n l i n e u n s i g n e d i n t g e t _ w e i g h t ( T r a n s _ t y p e s a )

    {

    s w i t c h ( a )

    {

    c a s e C O P Y :

    r e t u r n C O P Y _ W E I G H T ;

    c a s e D E L E T E :

    r e t u r n D E L E T E _ W E I G H T ;

    3 2

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    33/35

    c a s e I N S E R T :

    r e t u r n I N S E R T _ W E I G H T ;

    c a s e T W I D D L E :

    r e t u r n T W I D D L E _ W E I G H T ;

    }

    r e t u r n 0 ; / / E r r o r

    } ;

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ c l a s s T r a n s f o r m _ l i s t

    / / / @ b r i e f C l a s s t o m a n a g e t h e l i s t o f t r a n f o r m a t i o n s

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    c l a s s T r a n s f o r m _ l i s t

    {

    p u b l i c :

    T r a n s f o r m _ l i s t ( ) ;

    T r a n s f o r m _ l i s t & o p e r a t o r = ( T r a n s f o r m _ l i s t & A ) ;

    v o i d p u s h _ b a c k ( T r a n s _ t y p e s a ) ;

    v o i d p o p _ b a c k ( ) ;

    u n s i g n e d i n t w e i g h t ( ) ;

    u n s i g n e d i n t s i z e ( ) ;

    v o i d c l e a r ( ) ;

    s t d : : v e c t o r < T r a n s _ t y p e s > l i s t ;

    u n s i g n e d i n t t o t a l _ w e i g h t ;

    } ;

    # e n d i f /

    E D I T _ D I S T A N C E _ T R A N S _ H

    /

    3 3

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    34/35

    e d i t _ d i s t a n c e _ t r a n s . c p p

    # i n c l u d e " e d i t _ d i s t a n c e _ t r a n s . h "

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n T r a n s f o r m _ l i s t

    / / / @ b r i e f d e f a u l t c o n s t r u c t o r

    / / / @ p r e n o n o

    / / / @ p o s t n o n e

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    T r a n s f o r m _ l i s t : : T r a n s f o r m _ l i s t ( )

    {

    t o t a l _ w e i g h t = 0 ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n o p e r a t o r =

    / / / @ b r i e f c o p y o f a l i s t o f t r a n s f o r m a t i o n s

    / / / @ p a r a m A

    t h e l i s t y o u w a n t t o c o p y f r o m

    / / / @ p r e n o n e

    / / / @ p o s t T h i s o b j e c t w i l l c o n t a i n t h e s a m e d a t a a s A

    / / / @ r e t u r n t h i s o b j e c t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    T r a n s f o r m _ l i s t & T r a n s f o r m _ l i s t : : o p e r a t o r = ( T r a n s f o r m _ l i s t & A )

    {

    t o t a l _ w e i g h t = A . t o t a l _ w e i g h t ;

    l i s t = A . l i s t ;

    r e t u r n

    t h i s ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n p u s h _ b a c k

    / / / @ b r i e f a d d a t r a n s f o r m a t i o n t o t h e e n d o f t h e l i s t

    / / / @ p a r a m a t h e t r a n s f o r m a t i o n y o u w a n t a d d e d t o t h e l i s t

    / / / @ p r e n o n e

    / / / @ p o s t t r a n s f o r m a t i o n a d d e d t o t h e e n d o f t h e l i s t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    v o i d T r a n s f o r m _ l i s t : : p u s h _ b a c k ( T r a n s _ t y p e s a )

    {

    l i s t . p u s h _ b a c k ( a ) ;

    t o t a l _ w e i g h t + = g e t _ w e i g h t ( a ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n p o p _ b a c k

    / / / @ b r i e f r e m o v e l a s t t r a n s f o r m a t i o n f r o m l i s t

    3 4

  • 8/3/2019 CS253 Report 3 Wilhelm Aaron

    35/35

    / / / @ p r e m u s t n o t b e e m p t y

    / / / @ p o s t l a s t t r a n s f o r m a t i o n r e m o v e d f r o m l i s t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    v o i d T r a n s f o r m _ l i s t : : p o p _ b a c k ( )

    {

    T r a n s _ t y p e s e n d ;

    e n d = l i s t . b a c k ( ) ;

    l i s t . p o p _ b a c k ( ) ;

    t o t a l _ w e i g h t

    = g e t _ w e i g h t ( e n d ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n s i z e

    / / / @ b r i e f g e t s i z e o f t h e l i s t

    / / / @ p r e n o n e

    / / / @ p o s t s i z e o f l i s t g o t t e n

    / / / @ r e t u r n s i z e o f t h e l i s t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    u n s i g n e d i n t T r a n s f o r m _ l i s t : : s i z e ( )

    {

    r e t u r n l i s t . s i z e ( ) ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n w e i g h t

    / / / @ b r i e f g e t w e i g h t o f l i s t

    / / / @ p r e n o n e

    / / / @ p o s t w e i g h t o f l i s t r e c i e v e d

    / / / @ r e t u r n w e i g h t o t t h e l i s t

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    u n s i g n e d i n t T r a n s f o r m _ l i s t : : w e i g h t ( )

    {

    r e t u r n t o t a l _ w e i g h t ;

    }

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    / / / @ f n c l e a r

    / / / @ b r i e f c l e a r t h e l i s t

    / / / @ p r e n o n e

    / / / @ p o s t l i s t c l e a r e d

    / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /

    v o i d T r a n s f o r m _ l i s t : : c l e a r ( )

    {

    t o t a l _ w e i g h t = 0 ;

    l i s t . c l e a r ( ) ;

    }

    3 5