performance metrics and decorator patterns

23
Design Patterns for Data Structures Performance Metrics and Decorator Patterns Chapter 4

Upload: others

Post on 10-Apr-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

Performance Metricsand

Decorator Patterns

Chapter 4

Page 2: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

Theoretical asymptotic bounds of sort algorithms4.3 Performance Metrics and Decorator Patterns 147

• Merge sort — Θ(n lgn)• Worst case quick sort — Θ(n2)

• Average case quick sort — Θ(n lgn)• Selection sort — Θ(n2)

• Insertion sort — Θ(n2)

• Heap sort — Θ(n lgn)

These bounds are all based on theoretical statement execution counts. In practice, theuser of any program is interested in the elapsed time for it to execute. To experimentallyverify the above theoretical asymptotic bounds you could try to time the execution withcalls to the system clock. The elapsed time is difficult to measure, however, becausea program runs under control of an operating system that typically manages scores ofprocesses simultaneously. Time measurements depend on external factors that are hardto control such as the number of other jobs in the system and the operating system’sscheduling policy.

The remainder of this chapter applies decorator design patterns to perform statementexecution counts experimentally without relying on the system clock. In software de-sign, a decoration is a functionality that is added to an existing operation to producesome desired side effect.

While it would be difficult to experimentally count the execution of every statementin a sorting program, a decorator pattern can count the execution of some parts of somestatements. The execution count is the side effect the pattern adds to the program. Be-cause the pattern does not provide a total count of the number of CPU cycles to do thesort, the count it does provide is a relative indication of the performance of the algorithm.

A metric is a standard of measurement. This section describes decorator patterns forthe following performance metrics.

• The number of array element comparisons.• The number of array element assignments.• The number of array element probes.

An example of an element comparison is in the comparison statementif (a[i] < a[child])

in the siftDown() method for heap sort. A decorator to count the number of compar-isons would increase the count by one for each execution of the if guard. A decoratorto count the number of probes would increase the count by two for each execution ofthe if guard, once for the access to a[i] and once for the access to a[child]. Anexample of an element assignment is the assignment statementa[mid] = a[j];

in the split() method of quick sort. A decorator to count the number of assignmentswould increase the count by one for each execution of the assignment statement.

This chapter describes two decorators that collect data using the above metrics.• Parametric decoration — for comparison and assignment metrics.• Decorator design pattern — for the probe metric.

Both decorator patterns use C++ templates in conjunction with function overloading.Strictly speaking, parametric decoration is not an OO design pattern as it contains noinheritance. Implementation of the probe metric uses the OO decorator design pattern.

Revised: August 30, 2016 Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford

Page 3: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

How can we measure the performance?

Three possible metrics

Need a metric: a standard of measurement.

4.3 Performance Metrics and Decorator Patterns 147

• Merge sort — Θ(n lgn)• Worst case quick sort — Θ(n2)

• Average case quick sort — Θ(n lgn)• Selection sort — Θ(n2)

• Insertion sort — Θ(n2)

• Heap sort — Θ(n lgn)

These bounds are all based on theoretical statement execution counts. In practice, theuser of any program is interested in the elapsed time for it to execute. To experimentallyverify the above theoretical asymptotic bounds you could try to time the execution withcalls to the system clock. The elapsed time is difficult to measure, however, becausea program runs under control of an operating system that typically manages scores ofprocesses simultaneously. Time measurements depend on external factors that are hardto control such as the number of other jobs in the system and the operating system’sscheduling policy.

The remainder of this chapter applies decorator design patterns to perform statementexecution counts experimentally without relying on the system clock. In software de-sign, a decoration is a functionality that is added to an existing operation to producesome desired side effect.

While it would be difficult to experimentally count the execution of every statementin a sorting program, a decorator pattern can count the execution of some parts of somestatements. The execution count is the side effect the pattern adds to the program. Be-cause the pattern does not provide a total count of the number of CPU cycles to do thesort, the count it does provide is a relative indication of the performance of the algorithm.

A metric is a standard of measurement. This section describes decorator patterns forthe following performance metrics.

• The number of array element comparisons.• The number of array element assignments.• The number of array element probes.

An example of an element comparison is in the comparison statementif (a[i] < a[child])

in the siftDown() method for heap sort. A decorator to count the number of compar-isons would increase the count by one for each execution of the if guard. A decoratorto count the number of probes would increase the count by two for each execution ofthe if guard, once for the access to a[i] and once for the access to a[child]. Anexample of an element assignment is the assignment statementa[mid] = a[j];

in the split() method of quick sort. A decorator to count the number of assignmentswould increase the count by one for each execution of the assignment statement.

This chapter describes two decorators that collect data using the above metrics.• Parametric decoration — for comparison and assignment metrics.• Decorator design pattern — for the probe metric.

Both decorator patterns use C++ templates in conjunction with function overloading.Strictly speaking, parametric decoration is not an OO design pattern as it contains noinheritance. Implementation of the probe metric uses the OO decorator design pattern.

Revised: August 30, 2016 Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford

Page 4: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

! 0HUJHVRUW³ Θ(n lgn)! :RUVWFDVHTXLFNVRUW³ Θ(n2)

! $YHUDJHFDVHTXLFNVRUW³ Θ(n lgn)! 6HOHFWLRQVRUW³ Θ(n2)

! ,QVHUWLRQVRUW³ Θ(n2)

! +HDSVRUW³ Θ(n lgn)

7KHVHERXQGVDUHDOOEDVHGRQWKHRUHWLFDOVWDWHPHQWH[HFXWLRQFRXQWV ,QSUDFWLFH WKHXVHURIDQ\SURJUDPLVLQWHUHVWHGLQWKHHODSVHGWLPHIRULWWRH[HFXWH 7RH[SHULPHQWDOO\YHULI\WKHDERYHWKHRUHWLFDODV\PSWRWLFERXQGV\RXFRXOGWU\WRWLPHWKHH[HFXWLRQZLWKFDOOVWRWKHV\VWHPFORFN 7KHHODSVHGWLPHLVGLIÀFXOWWRPHDVXUH KRZHYHU EHFDXVHDSURJUDPUXQVXQGHUFRQWURORIDQRSHUDWLQJV\VWHPWKDWW\SLFDOO\PDQDJHVVFRUHVRISURFHVVHVVLPXOWDQHRXVO\ 7LPHPHDVXUHPHQWVGHSHQGRQH[WHUQDOIDFWRUVWKDWDUHKDUGWRFRQWUROVXFKDVWKHQXPEHURIRWKHUMREVLQWKHV\VWHPDQGWKHRSHUDWLQJV\VWHP·VVFKHGXOLQJSROLF\

7KHUHPDLQGHURIWKLVFKDSWHUDSSOLHVGHFRUDWRUGHVLJQSDWWHUQVWRSHUIRUPVWDWHPHQWH[HFXWLRQFRXQWVH[SHULPHQWDOO\ZLWKRXWUHO\LQJRQWKHV\VWHPFORFN ,QVRIWZDUHGHVLJQ DGHFRUDWLRQLVDIXQFWLRQDOLW\WKDWLVDGGHGWRDQH[LVWLQJRSHUDWLRQWRSURGXFHVRPHGHVLUHGVLGHHIIHFW

:KLOHLWZRXOGEHGLIÀFXOWWRH[SHULPHQWDOO\FRXQWWKHH[HFXWLRQRIHYHU\VWDWHPHQWLQDVRUWLQJSURJUDP DGHFRUDWRUSDWWHUQFDQFRXQWWKHH[HFXWLRQRIVRPHSDUWVRIVRPHVWDWHPHQWV 7KHH[HFXWLRQFRXQWLVWKHVLGHHIIHFWWKHSDWWHUQDGGVWRWKHSURJUDP %HFDXVHWKHSDWWHUQGRHVQRWSURYLGHDWRWDOFRXQWRIWKHQXPEHURI&38 F\FOHVWRGRWKHVRUW WKHFRXQWLWGRHVSURYLGHLVDUHODWLYHLQGLFDWLRQRIWKHSHUIRUPDQFHRIWKHDOJRULWKP

$ PHWULFLVDVWDQGDUGRIPHDVXUHPHQW 7KLVVHFWLRQGHVFULEHVGHFRUDWRUSDWWHUQVIRUWKHIROORZLQJSHUIRUPDQFHPHWULFV! 7KHQXPEHURIDUUD\HOHPHQWFRPSDULVRQV! 7KHQXPEHURIDUUD\HOHPHQWDVVLJQPHQWV! 7KHQXPEHURIDUUD\HOHPHQWSUREHV$QH[DPSOHRIDQHOHPHQWFRPSDULVRQLVLQWKHFRPSDULVRQVWDWHPHQWLI D>L@ D>FKLOG@

LQWKH VLIW'RZQ PHWKRGIRUKHDSVRUW $ GHFRUDWRUWRFRXQWWKHQXPEHURIFRPSDULVRQVZRXOGLQFUHDVHWKHFRXQWE\RQHIRUHDFKH[HFXWLRQRIWKH LI JXDUG $ GHFRUDWRUWRFRXQWWKHQXPEHURISUREHVZRXOGLQFUHDVHWKHFRXQWE\WZRIRUHDFKH[HFXWLRQRIWKH LI JXDUG RQFHIRUWKHDFFHVVWR D>L@ DQGRQFHIRUWKHDFFHVVWR D>FKLOG@ $QH[DPSOHRIDQHOHPHQWDVVLJQPHQWLVWKHDVVLJQPHQWVWDWHPHQWD>PLG@ D>M@

LQWKH VSOLW PHWKRGRITXLFNVRUW $ GHFRUDWRUWRFRXQWWKHQXPEHURIDVVLJQPHQWVZRXOGLQFUHDVHWKHFRXQWE\RQHIRUHDFKH[HFXWLRQRIWKHDVVLJQPHQWVWDWHPHQW

7KLVFKDSWHUGHVFULEHVWZRGHFRUDWRUVWKDWFROOHFWGDWDXVLQJWKHDERYHPHWULFV! 3DUDPHWULFGHFRUDWLRQ³IRUFRPSDULVRQDQGDVVLJQPHQWPHWULFV! 'HFRUDWRUGHVLJQSDWWHUQ³IRUWKHSUREHPHWULF%RWKGHFRUDWRUSDWWHUQVXVH&WHPSODWHVLQFRQMXQFWLRQZLWKIXQFWLRQRYHUORDGLQJ6WULFWO\VSHDNLQJ SDUDPHWULFGHFRUDWLRQLVQRWDQ22 GHVLJQSDWWHUQDVLWFRQWDLQVQRLQKHULWDQFH ,PSOHPHQWDWLRQRIWKHSUREHPHWULFXVHVWKH22 GHFRUDWRUGHVLJQSDWWHUQ

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

One element comparison

Two element probes

3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

! 0HUJHVRUW³ Θ(n lgn)! :RUVWFDVHTXLFNVRUW³ Θ(n2)

! $YHUDJHFDVHTXLFNVRUW³ Θ(n lgn)! 6HOHFWLRQVRUW³ Θ(n2)

! ,QVHUWLRQVRUW³ Θ(n2)

! +HDSVRUW³ Θ(n lgn)

7KHVHERXQGVDUHDOOEDVHGRQWKHRUHWLFDOVWDWHPHQWH[HFXWLRQFRXQWV ,QSUDFWLFH WKHXVHURIDQ\SURJUDPLVLQWHUHVWHGLQWKHHODSVHGWLPHIRULWWRH[HFXWH 7RH[SHULPHQWDOO\YHULI\WKHDERYHWKHRUHWLFDODV\PSWRWLFERXQGV\RXFRXOGWU\WRWLPHWKHH[HFXWLRQZLWKFDOOVWRWKHV\VWHPFORFN 7KHHODSVHGWLPHLVGLIÀFXOWWRPHDVXUH KRZHYHU EHFDXVHDSURJUDPUXQVXQGHUFRQWURORIDQRSHUDWLQJV\VWHPWKDWW\SLFDOO\PDQDJHVVFRUHVRISURFHVVHVVLPXOWDQHRXVO\ 7LPHPHDVXUHPHQWVGHSHQGRQH[WHUQDOIDFWRUVWKDWDUHKDUGWRFRQWUROVXFKDVWKHQXPEHURIRWKHUMREVLQWKHV\VWHPDQGWKHRSHUDWLQJV\VWHP·VVFKHGXOLQJSROLF\

7KHUHPDLQGHURIWKLVFKDSWHUDSSOLHVGHFRUDWRUGHVLJQSDWWHUQVWRSHUIRUPVWDWHPHQWH[HFXWLRQFRXQWVH[SHULPHQWDOO\ZLWKRXWUHO\LQJRQWKHV\VWHPFORFN ,QVRIWZDUHGHVLJQ DGHFRUDWLRQLVDIXQFWLRQDOLW\WKDWLVDGGHGWRDQH[LVWLQJRSHUDWLRQWRSURGXFHVRPHGHVLUHGVLGHHIIHFW

:KLOHLWZRXOGEHGLIÀFXOWWRH[SHULPHQWDOO\FRXQWWKHH[HFXWLRQRIHYHU\VWDWHPHQWLQDVRUWLQJSURJUDP DGHFRUDWRUSDWWHUQFDQFRXQWWKHH[HFXWLRQRIVRPHSDUWVRIVRPHVWDWHPHQWV 7KHH[HFXWLRQFRXQWLVWKHVLGHHIIHFWWKHSDWWHUQDGGVWRWKHSURJUDP %HFDXVHWKHSDWWHUQGRHVQRWSURYLGHDWRWDOFRXQWRIWKHQXPEHURI&38 F\FOHVWRGRWKHVRUW WKHFRXQWLWGRHVSURYLGHLVDUHODWLYHLQGLFDWLRQRIWKHSHUIRUPDQFHRIWKHDOJRULWKP

$ PHWULFLVDVWDQGDUGRIPHDVXUHPHQW 7KLVVHFWLRQGHVFULEHVGHFRUDWRUSDWWHUQVIRUWKHIROORZLQJSHUIRUPDQFHPHWULFV! 7KHQXPEHURIDUUD\HOHPHQWFRPSDULVRQV! 7KHQXPEHURIDUUD\HOHPHQWDVVLJQPHQWV! 7KHQXPEHURIDUUD\HOHPHQWSUREHV$QH[DPSOHRIDQHOHPHQWFRPSDULVRQLVLQWKHFRPSDULVRQVWDWHPHQWLI D>L@ D>FKLOG@

LQWKH VLIW'RZQ PHWKRGIRUKHDSVRUW $ GHFRUDWRUWRFRXQWWKHQXPEHURIFRPSDULVRQVZRXOGLQFUHDVHWKHFRXQWE\RQHIRUHDFKH[HFXWLRQRIWKH LI JXDUG $ GHFRUDWRUWRFRXQWWKHQXPEHURISUREHVZRXOGLQFUHDVHWKHFRXQWE\WZRIRUHDFKH[HFXWLRQRIWKH LI JXDUG RQFHIRUWKHDFFHVVWR D>L@ DQGRQFHIRUWKHDFFHVVWR D>FKLOG@ $QH[DPSOHRIDQHOHPHQWDVVLJQPHQWLVWKHDVVLJQPHQWVWDWHPHQWD>PLG@ D>M@

LQWKH VSOLW PHWKRGRITXLFNVRUW $ GHFRUDWRUWRFRXQWWKHQXPEHURIDVVLJQPHQWVZRXOGLQFUHDVHWKHFRXQWE\RQHIRUHDFKH[HFXWLRQRIWKHDVVLJQPHQWVWDWHPHQW

7KLVFKDSWHUGHVFULEHVWZRGHFRUDWRUVWKDWFROOHFWGDWDXVLQJWKHDERYHPHWULFV! 3DUDPHWULFGHFRUDWLRQ³IRUFRPSDULVRQDQGDVVLJQPHQWPHWULFV! 'HFRUDWRUGHVLJQSDWWHUQ³IRUWKHSUREHPHWULF%RWKGHFRUDWRUSDWWHUQVXVH&WHPSODWHVLQFRQMXQFWLRQZLWKIXQFWLRQRYHUORDGLQJ6WULFWO\VSHDNLQJ SDUDPHWULFGHFRUDWLRQLVQRWDQ22 GHVLJQSDWWHUQDVLWFRQWDLQVQRLQKHULWDQFH ,PSOHPHQWDWLRQRIWKHSUREHPHWULFXVHVWKH22 GHFRUDWRUGHVLJQSDWWHUQ

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

One element assignment

Page 5: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

Use decorator patterns to collect datausing these three metrics

4.3 Performance Metrics and Decorator Patterns 147

• Merge sort — Θ(n lgn)• Worst case quick sort — Θ(n2)

• Average case quick sort — Θ(n lgn)• Selection sort — Θ(n2)

• Insertion sort — Θ(n2)

• Heap sort — Θ(n lgn)

These bounds are all based on theoretical statement execution counts. In practice, theuser of any program is interested in the elapsed time for it to execute. To experimentallyverify the above theoretical asymptotic bounds you could try to time the execution withcalls to the system clock. The elapsed time is difficult to measure, however, becausea program runs under control of an operating system that typically manages scores ofprocesses simultaneously. Time measurements depend on external factors that are hardto control such as the number of other jobs in the system and the operating system’sscheduling policy.

The remainder of this chapter applies decorator design patterns to perform statementexecution counts experimentally without relying on the system clock. In software de-sign, a decoration is a functionality that is added to an existing operation to producesome desired side effect.

While it would be difficult to experimentally count the execution of every statementin a sorting program, a decorator pattern can count the execution of some parts of somestatements. The execution count is the side effect the pattern adds to the program. Be-cause the pattern does not provide a total count of the number of CPU cycles to do thesort, the count it does provide is a relative indication of the performance of the algorithm.

A metric is a standard of measurement. This section describes decorator patterns forthe following performance metrics.

• The number of array element comparisons.• The number of array element assignments.• The number of array element probes.

An example of an element comparison is in the comparison statementif (a[i] < a[child])

in the siftDown() method for heap sort. A decorator to count the number of compar-isons would increase the count by one for each execution of the if guard. A decoratorto count the number of probes would increase the count by two for each execution ofthe if guard, once for the access to a[i] and once for the access to a[child]. Anexample of an element assignment is the assignment statementa[mid] = a[j];

in the split() method of quick sort. A decorator to count the number of assignmentswould increase the count by one for each execution of the assignment statement.

This chapter describes two decorators that collect data using the above metrics.• Parametric decoration — for comparison and assignment metrics.• Decorator design pattern — for the probe metric.

Both decorator patterns use C++ templates in conjunction with function overloading.Strictly speaking, parametric decoration is not an OO design pattern as it contains noinheritance. Implementation of the probe metric uses the OO decorator design pattern.

Revised: August 30, 2016 Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford

Page 6: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

Demo SortCompAsgn Project

Page 7: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.30 3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

&RXQWHU FODVV &RXQWHU ^SULYDWH

LQW BGHOWDLQW BFRXQW

SXEOLF 3RVW BFRXQW BGHOWD FRVW&RXQWHULQW FRVW

BGHOWDFRVWBFRXQW ^

`

3RVW BFRXQW LV UHWXUQHGLQW JHW&RXQW FRQVW ^

UHWXUQ BFRXQW`

3RVW BFRXQW LV LQFUHDVHG E\ BGHOWDYRLG XSGDWH ^

BFRXQW BGHOWD`

3RVW BFRXQW YRLG FOHDU ^

BFRXQW `

3RVW BGHOWD FRVWYRLG VHW'HOWDLQW FRVW ^

BGHOWD FRVW`

`

)LJXUH &RXQWHUKSS 7KH &RXQWHU FODVVIRUFRXQWLQJDVVLJQPHQWV FRPSDULVRQV DQGSUREHVLQVRUWDOJRULWKPV

DERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLV

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

Page 8: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.30

3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

&RXQWHU FODVV &RXQWHU ^SULYDWH

LQW BGHOWDLQW BFRXQW

SXEOLF 3RVW BFRXQW BGHOWD FRVW&RXQWHULQW FRVW

BGHOWDFRVWBFRXQW ^

`

3RVW BFRXQW LV UHWXUQHGLQW JHW&RXQW FRQVW ^

UHWXUQ BFRXQW`

3RVW BFRXQW LV LQFUHDVHG E\ BGHOWDYRLG XSGDWH ^

BFRXQW BGHOWD`

3RVW BFRXQW YRLG FOHDU ^

BFRXQW `

3RVW BGHOWD FRVWYRLG VHW'HOWDLQW FRVW ^

BGHOWD FRVW`

`

)LJXUH &RXQWHUKSS 7KH &RXQWHU FODVVIRUFRXQWLQJDVVLJQPHQWV FRPSDULVRQV DQGSUREHVLQVRUWDOJRULWKPV

DERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLV

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

Page 9: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

• Do not sort type double.• Instead, sort object with class CAMetrics.• In CAMetrics set up two counters, one to count the

number of comparisons and one to count thenumber of assignments.

• Overload the comparison operators to incrementthe comparison counter when executed.

• Overload the assignment operator to incrementthe assignment counter when executed.

Parametric decoration

Page 10: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.31

&KDSWHU &RPSDULVRQ6RUW$OJRULWKPV

&$0HWULFV WHPSODWHFODVV 7!FODVV &$0HWULFV ^SULYDWH

VWDWLF &RXQWHU BFRPSDUH&RXQWVWDWLF &RXQWHU BDVVLJQ&RXQW

7 BGDWD

SXEOLF&$0HWULFV IRU DUUD\ LQLWLDOL]DWLRQ&$0HWULFVFRQVW &$0HWULFV UKV7 WR7 FRQVWYRLG VHW7FRQVW 7 VRXUFHERRO RSHUDWRUFRQVW &$0HWULFV UKVERRO RSHUDWRU FRQVW &$0HWULFV UKVERRO RSHUDWRU FRQVW &$0HWULFV UKVERRO RSHUDWRU FRQVW &$0HWULFV UKVERRO RSHUDWRU! FRQVW &$0HWULFV UKVERRO RSHUDWRU!FRQVW &$0HWULFV UKV&$0HWULFV RSHUDWRU FRQVW &$0HWULFV UKV

VWDWLF LQW JHW&RPSDUH&RXQWVWDWLF LQW JHW$VVLJQ&RXQWVWDWLF YRLG FOHDU&RPSDUH&RXQWVWDWLF YRLG FOHDU$VVLJQ&RXQWVWDWLF YRLG VHW&RVWLQW L&RVW

SXEOLFIULHQG RVWUHDP RSHUDWRURVWUHDP RV FRQVW &$0HWULFV7! UKV ^

RV UKVBGDWDUHWXUQ RV

`

IULHQG LVWUHDP RSHUDWRU!!LVWUHDP LV &$0HWULFV7! UKV ^UKVBDVVLJQ&RXQWXSGDWHLV !! UKVBGDWDUHWXUQ LV

``

WHPSODWHFODVV 7!&RXQWHU &$0HWULFV7!BFRPSDUH&RXQW

WHPSODWHFODVV 7!&RXQWHU &$0HWULFV7!BDVVLJQ&RXQW

)LJXUH &$0HWULFVKSS 7KH &$0HWULFV FODVV ZKLFKRYHUORDGVWKHFRPSDULVRQDQGDVVLJQPHQWRSHUDWRUV 7KHSURJUDPOLVWLQJFRQWLQXHVLQWKHQH[WÀJXUH

&RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG 5HYLVHG 6HSWHPEHU

Page 11: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.31

152 Chapter 4 Comparison Sort Algorithms

// ========= CAMetrics =========template<class T>class CAMetrics private:

static Counter _compareCount;static Counter _assignCount;

T _data;

public:CAMetrics(); // for array initialization.CAMetrics(CAMetrics const &rhs);T toT() const;void setT(const T &source);bool operator<(CAMetrics const &rhs);bool operator<(CAMetrics const &rhs) const;bool operator<=(CAMetrics const &rhs);bool operator<=(CAMetrics const &rhs) const;bool operator==(CAMetrics const &rhs);bool operator==(CAMetrics const &rhs) const;bool operator!=(CAMetrics const &rhs);bool operator!=(CAMetrics const &rhs) const;bool operator>=(CAMetrics const &rhs);bool operator>=(CAMetrics const &rhs) const;bool operator>(CAMetrics const &rhs);bool operator>(CAMetrics const &rhs) const;CAMetrics &operator=(CAMetrics const &rhs);

static int getCompareCount();static int getAssignCount();static void clearCompareCount();static void clearAssignCount();static void setCost(int cost);

public:friend ostream &operator<<(ostream &os, CAMetrics<T> const &rhs)

os << rhs._data;return os;

friend istream &operator>>(istream &is, CAMetrics<T> &rhs) rhs._assignCount.update();is >> rhs._data;return is;

;

Figure 4.31 CAMetrics.hpp. The CAMetrics class, which overloads the com-parison and assignment operators. The program listing continues in the next figure.

Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford Revised: August 30, 2016

Page 12: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.31

&KDSWHU &RPSDULVRQ6RUW$OJRULWKPV

&$0HWULFV WHPSODWHFODVV 7!FODVV &$0HWULFV ^SULYDWH

VWDWLF &RXQWHU BFRPSDUH&RXQWVWDWLF &RXQWHU BDVVLJQ&RXQW

7 BGDWD

SXEOLF&$0HWULFV IRU DUUD\ LQLWLDOL]DWLRQ&$0HWULFVFRQVW &$0HWULFV UKV7 WR7 FRQVWYRLG VHW7FRQVW 7 VRXUFHERRO RSHUDWRUFRQVW &$0HWULFV UKVERRO RSHUDWRU FRQVW &$0HWULFV UKVERRO RSHUDWRU FRQVW &$0HWULFV UKVERRO RSHUDWRU FRQVW &$0HWULFV UKVERRO RSHUDWRU! FRQVW &$0HWULFV UKVERRO RSHUDWRU!FRQVW &$0HWULFV UKV&$0HWULFV RSHUDWRU FRQVW &$0HWULFV UKV

VWDWLF LQW JHW&RPSDUH&RXQWVWDWLF LQW JHW$VVLJQ&RXQWVWDWLF YRLG FOHDU&RPSDUH&RXQWVWDWLF YRLG FOHDU$VVLJQ&RXQWVWDWLF YRLG VHW&RVWLQW L&RVW

SXEOLFIULHQG RVWUHDP RSHUDWRURVWUHDP RV FRQVW &$0HWULFV7! UKV ^

RV UKVBGDWDUHWXUQ RV

`

IULHQG LVWUHDP RSHUDWRU!!LVWUHDP LV &$0HWULFV7! UKV ^UKVBDVVLJQ&RXQWXSGDWHLV !! UKVBGDWDUHWXUQ LV

``

WHPSODWHFODVV 7!&RXQWHU &$0HWULFV7!BFRPSDUH&RXQW

WHPSODWHFODVV 7!&RXQWHU &$0HWULFV7!BDVVLJQ&RXQW

)LJXUH &$0HWULFVKSS 7KH &$0HWULFV FODVV ZKLFKRYHUORDGVWKHFRPSDULVRQDQGDVVLJQPHQWRSHUDWRUV 7KHSURJUDPOLVWLQJFRQWLQXHVLQWKHQH[WÀJXUH

&RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG 5HYLVHG 6HSWHPEHU

Page 13: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.32

3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

&RQVWUXFWRUV WHPSODWHFODVV 7!&$0HWULFV7!&$0HWULFVYRLG ^`

WHPSODWHFODVV 7!&$0HWULFV7!&$0HWULFVFRQVW &$0HWULFV UKV ^

BDVVLJQ&RXQWXSGDWHBGDWD UKVBGDWD

`

WR7 WHPSODWHFODVV 7!7 &$0HWULFV7!WR7 FRQVW ^

UHWXUQ BGDWD`

VHW7 WHPSODWHFODVV 7!YRLG &$0HWULFV7!VHW7FRQVW 7 VRXUFH ^

BDVVLJQ&RXQWXSGDWHBGDWD VRXUFH

`

)LJXUH &$0HWULFVKSS FRQWLQXHG 7KHFRQVWUXFWRUV WR7 DQG VHW7PHWKRGVIRUWKH &$0HWULFV FODVV 7KHSURJUDPOLVWLQJFRQWLQXHVLQWKHQH[WÀJXUH

WH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

Page 14: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.32

3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

&RQVWUXFWRUV WHPSODWHFODVV 7!&$0HWULFV7!&$0HWULFVYRLG ^`

WHPSODWHFODVV 7!&$0HWULFV7!&$0HWULFVFRQVW &$0HWULFV UKV ^

BDVVLJQ&RXQWXSGDWHBGDWD UKVBGDWD

`

WR7 WHPSODWHFODVV 7!7 &$0HWULFV7!WR7 FRQVW ^

UHWXUQ BGDWD`

VHW7 WHPSODWHFODVV 7!YRLG &$0HWULFV7!VHW7FRQVW 7 VRXUFH ^

BDVVLJQ&RXQWXSGDWHBGDWD VRXUFH

`

)LJXUH &$0HWULFVKSS FRQWLQXHG 7KHFRQVWUXFWRUV WR7 DQG VHW7PHWKRGVIRUWKH &$0HWULFV FODVV 7KHSURJUDPOLVWLQJFRQWLQXHVLQWKHQH[WÀJXUH

WH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

Page 15: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.33

154 Chapter 4 Comparison Sort Algorithms

// ========= Comparison operators =========template<class T>bool CAMetrics<T>::operator<(CAMetrics<T> const &rhs)

_compareCount.update();return _data < rhs._data;

template<class T>bool CAMetrics<T>::operator<(CAMetrics<T> const &rhs) const

_compareCount.update();return _data < rhs._data;

template<class T>bool CAMetrics<T>::operator<=(CAMetrics<T> const &rhs)

_compareCount.update();return _data <= rhs._data;

template<class T>bool CAMetrics<T>::operator<=(CAMetrics<T> const &rhs) const

_compareCount.update();return _data <= rhs._data;

Figure 4.33 CAMetrics.hpp (continued). Implementation of the first two over-loaded comparison operators for the CAMetrics class. The other four operators aresimilar and are not shown. The program listing continues in the next figure.

language.Hello, here is some text without a meaning. This text should show what a printed

text will look like at this place. If you read this text, you will get no information. Really?Is there no information? Is there a difference between this text and some nonsense like“Huardest gefburn”? Kjift – not at all! A blind text like this gives you informationabout the selected font, how the letters are written and an impression of the look. Thistext should contain all letters of the alphabet and it should be written in of the originallanguage. There is no need for special content, but the length of words should match thelanguage.

Hello, here is some text without a meaning. This text should show what a printedtext will look like at this place. If you read this text, you will get no information. Really?Is there no information? Is there a difference between this text and some nonsense like“Huardest gefburn”? Kjift – not at all! A blind text like this gives you informationabout the selected font, how the letters are written and an impression of the look. Thistext should contain all letters of the alphabet and it should be written in of the originallanguage. There is no need for special content, but the length of words should match thelanguage.

Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford Revised: August 30, 2016

Page 16: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.33

154 Chapter 4 Comparison Sort Algorithms

// ========= Comparison operators =========template<class T>bool CAMetrics<T>::operator<(CAMetrics<T> const &rhs)

_compareCount.update();return _data < rhs._data;

template<class T>bool CAMetrics<T>::operator<(CAMetrics<T> const &rhs) const

_compareCount.update();return _data < rhs._data;

template<class T>bool CAMetrics<T>::operator<=(CAMetrics<T> const &rhs)

_compareCount.update();return _data <= rhs._data;

template<class T>bool CAMetrics<T>::operator<=(CAMetrics<T> const &rhs) const

_compareCount.update();return _data <= rhs._data;

Figure 4.33 CAMetrics.hpp (continued). Implementation of the first two over-loaded comparison operators for the CAMetrics class. The other four operators aresimilar and are not shown. The program listing continues in the next figure.

language.Hello, here is some text without a meaning. This text should show what a printed

text will look like at this place. If you read this text, you will get no information. Really?Is there no information? Is there a difference between this text and some nonsense like“Huardest gefburn”? Kjift – not at all! A blind text like this gives you informationabout the selected font, how the letters are written and an impression of the look. Thistext should contain all letters of the alphabet and it should be written in of the originallanguage. There is no need for special content, but the length of words should match thelanguage.

Hello, here is some text without a meaning. This text should show what a printedtext will look like at this place. If you read this text, you will get no information. Really?Is there no information? Is there a difference between this text and some nonsense like“Huardest gefburn”? Kjift – not at all! A blind text like this gives you informationabout the selected font, how the letters are written and an impression of the look. Thistext should contain all letters of the alphabet and it should be written in of the originallanguage. There is no need for special content, but the length of words should match thelanguage.

Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford Revised: August 30, 2016

Page 17: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.34

3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

RSHUDWRU WHPSODWHFODVV 7!&$0HWULFV7! &$0HWULFV7!RSHUDWRU FRQVW &$0HWULFV7! UKV ^

BDVVLJQ&RXQWXSGDWHLI BGDWD UKVBGDWD ^

BGDWD UKVBGDWD`UHWXUQ WKLV

`

$FFHVV PHWKRGV WHPSODWHFODVV 7!LQW &$0HWULFV7!JHW&RPSDUH&RXQW ^

UHWXUQ BFRPSDUH&RXQWJHW&RXQW`

WHPSODWHFODVV 7!LQW &$0HWULFV7!JHW$VVLJQ&RXQW ^

UHWXUQ BDVVLJQ&RXQWJHW&RXQW`

&OHDU PHWKRGV WHPSODWHFODVV 7!YRLG &$0HWULFV7!FOHDU&RPSDUH&RXQW ^

BFRPSDUH&RXQWFOHDU`

WHPSODWHFODVV 7!YRLG &$0HWULFV7!FOHDU$VVLJQ&RXQW ^

BDVVLJQ&RXQWFOHDU`

VHW&RVW WHPSODWHFODVV 7!YRLG &$0HWULFV7!VHW&RVWLQW L&RVW ^

BFRPSDUH&RXQWVHW'HOWDL&RVW`

)LJXUH &$0HWULFVKSS FRQWLQXHG ,PSOHPHQWDWLRQRIWKHRYHUORDGHGDVVLJQPHQWRSHUDWRUIRUWKH &$0HWULFV FODVV 7KLVFRQFOXGHVWKHSURJUDPOLVWLQJ

WH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\"

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

Page 18: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

A Comparison Sort Bound

Any sort of n elements that is based on elementcomparison and exchange is (n lg n).

Page 19: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

The proof uses the following lemma.

&KDSWHU &RPSDULVRQ6RUW$OJRULWKPV

$ FRPSDULVRQVRUWERXQG2EYLRXVO\ WKHVRUWDOJRULWKPVWKDWDUHΘ(n lgn) DUHIDVWHUWKDQWKHRQHVWKDWDUHΘ(n2) $QDWXUDOTXHVWLRQLV &DQDQ\VRUWDOJRULWKPEHGHVLJQHGWKDWLVHYHQIDVWHUWKDQΘ(n lgn)"

$OOWKHVHVRUWVGHVFULEHGLQWKLVFKDSWHUDUHEDVHGRQSDLUZLVHFRPSDULVRQVRIYDOXHVLQDQDUUD\ $ UHPDUNDEOHWKHRUHPDERXWDOJRULWKPVWKDWGHSHQGRQVXFKSDLUZLVHFRPSDULVRQVLVWKHIROORZLQJ

7KHRUHP &RPSDULVRQVRUWERXQG $Q\VRUWRI n HOHPHQWVWKDWLVEDVHGRQHOHPHQWFRPSDULVRQDQGH[FKDQJHLV Ω(n lgn)

7KLVWKHRUHPDVVXPHVWKHFRPSDULVRQPHWULFDVDPHDVXUHRIWKHSHUIRUPDQFHRIWKHVRUWDOJRULWKP

%HFDXVH Ω LVDORZHUERXQG WKHWKHRUHPDVVHUWVWKDW QR FRPSDULVRQVRUWDOJRULWKPFDQEHEHWWHUWKDQΘ(n lgn) $FFRUGLQJWRWKHWKHRUHP WKHΘ(n lgn) VRUWVRIWKLVFKDSWHUDUHDEVROXWHO\WKHEHVWWKDWFDQEHDFKLHYHGE\DQ\RQH DQ\ZKHUH DQ\WLPH +RZFDQZHNQRZWKDWVRPHRQHLQWKHIXWXUHZLOOQRWEHFOHYHUHQRXJKWRLPSURYHRQWKHDV\PSWRWLFEHKDYLRURIWKHVHVRUWV" $IWHUDOO DQLQÀQLWHQXPEHURIDOJRULWKPGHVLJQVDUHSRVVLEOHDQGPDQ\KDYHQRW\HWEHHGGLVFRYHUHG

,QVSLWHRIWKHDSSDUHQWGLIÀFXOW\RISURYLQJWKHLPSRVVLELOLW\RIDSDUWLFXODUDOJRULWKPGHVLJQ WKLVVHFWLRQJLYHVVXFKDPDWKHPDWLFDOSURRI 7KHSURRIGHSHQGVRQWZRIDFWV³DOHPPDWKDWVSHFLÀHVDORZHUERXQGRQ n! DQGWKHELQDU\GHFLVLRQWUHHPRGHOIRUFRPSDULVRQVRUWDOJRULWKPV +HUHLVWKHOHPPDDQGLWVSURRI

/HPPD n! ≥ (n/2)n/2

3URRI

n!= ⟨'HÀQLWLRQRI n! DVVXPLQJ n LVHYHQ⟩

n · (n−1) · (n−2) · . . . · ( n2 +1) · ( n

2 ) · . . . ·3 ·2 ·1= ⟨0XOWLSOLFDWLRQLVV\PPHWULF a ·b = b ·a⟩

1n ·2(n−1) ·3(n−2) · . . . · ( n2 )(

n2 +1)

≥ ⟨3URGXFWRI n/2 WHUPV HDFKRIZKLFKLVJUHDWHUWKDQ n/2⟩(n/2)n/2

,WLVDQH[HUFLVHIRUWKHVWXGHQWWRVKRZWKDWLI n LVRGG WKHORZHUERXQGRQ n! LV(n/2)(n+1)/2 7KHFRPSDULVRQVRUWERXQGWKHRUHPLVVWLOOYDOLGZLWKWKLVERXQGRQ n!

7KHELQDU\GHFLVLRQWUHHPRGHOLVDWUHHUHSUHVHQWDWLRQRIWKHGHFLVLRQSURFHVVWKDWPXVWRFFXUZLWKDQ\FRPSDULVRQVRUW )RUH[DPSOH VXSSRVHWKHDOJRULWKPLVWRVRUWWKUHHLQSXWYDOXHV³ a b DQG c )RUWKHDOJRULWKPWREHFRUUHFW LWPXVWSURGXFHWKHFRUUHFWUHVXOWIRUDOOSRVVLEOHLQLWLDOSHUPXWDWLRQV 7KHUHDUHVL[SRVVLEOHSHUPXWDWLRQVRIWKUHHYDOXHV QDPHO\abc acb bac bca cab cba$ GHFLVLRQLQDFRPSDULVRQVRUWDOJRULWKPLVDQH[HFXWDEOHVWDWHPHQWWKDWLVXVXDOO\WKHJXDUGRIDQ LI VWDWHPHQWOLNHWKHDERYH LI VWDWHPHQWLQWKH VLIW'RZQ PHWKRGRIWKHKHDSVRUW ,QJHQHUDO WKHUHH[LVWVDPLQLPXPQXPEHURIVXFKFRPSDULVRQVWKDWPXVWEHPDGHLIWKHDOJRULWKPLVWREHFRUUHFWIRUDOOSRVVLEOHLQSXWSHUPXWDWLRQV

)LJXUHDVKRZVWKHGHFLVLRQWUHHIRUWKLVWKUHHLQSXWH[DPSOH 7KHQRWDWLRQa : b DWWKHURRWRIWKHGHFLVLRQWUHHUHSUHVHQWVWKHJXDUGRIDQ LI VWDWHPHQWRUDORRSWKDW

&RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG 5HYLVHG 6HSWHPEHU

Page 20: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.29 3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

Height = 3

a : b

b : c a : c

a : c b : c

(a)!Maximum decisions = 3. Number of leaves = 6. (b)!Maximum decisions = 3. Number of leaves = 8.

≤ >

≤ ≤

≤> >

>>

)LJXUH 7ZRGHFLVLRQWUHHV 3DUWDLVWKHGHFLVLRQWUHHIRUVRUWLQJWKUHHHOHPHQWV3DUWELVDIXOOWUHHFRQWDLQLQJWKHPD[LPXPQXPEHURIOHDYHVIRUDWUHHRIKHLJKW

FRPSDUHVYDOXHV a DQG b 7KHEUDQFKWRWKHOHIWLVIRUWKHSURFHVVLQJWKDWPXVWEHGRQHLI a ≤ b DQGWKHEUDQFKWRWKHULJKWLVWKHSURFHVVLQJWKDWPXVWEHGRQHLI a > b

7KHOHIWFKLOGRIWKHURRW b : c UHSUHVHQWVDFRPSDULVRQRI b DQG c ,WVOHIWFKLOGUHSUHVHQWVWKHRXWFRPHLI b ≤ c %HFDXVHWKHÀUVWWHVWGHWHUPLQHVWKDW a ≤ b DQGWKHVHFRQGWHVWGHWHUPLQHVWKDW b ≤ c WKHFRQFOXVLRQLVWKDWWKHVRUWHGRUGHULV ⟨a,b,c⟩ LQGLFDWHGE\WKHOHDI 2QWKHRWKHUKDQG LIWKHVHFRQGWHVWGHWHUPLQHVWKDW b > c WKHRQO\SRVVLEOHFRQFOXVLRQLVWKDW b KDVWKHPD[LPXPYDOXH 7RGHWHUPLQHZKHWKHUWKHFRUUHFWVRUWLV⟨a,c,b⟩ RU ⟨c,a,b⟩ UHTXLUHVWKHDGGLWLRQDOFRPSDULVRQRI a DQG c

,QJHQHUDO DQ\VRUWDOJRULWKPWKDWGHSHQGVRQSDLUZLVHFRPSDULVRQRIHOHPHQWVPXVWEHPRGHOHGE\DGHFLVLRQWUHHWKDWKDV n! OHDYHV EHFDXVHWKHUHDUH n! SRVVLEOHLQLWLDOSHUPXWDWLRQVRI n HOHPHQWVDQGWKHDOJRULWKPPXVWEHDEOHWRVRUWWKHHOHPHQWVFRUUHFWO\IRUDOOSRVVLEOHLQSXWSHUPXWDWLRQV 7KHUHIRUH WKHGHFLVLRQWUHHPXVWKDYH n! OHDYHV

)LJXUH VKRZVWKDWWKHKHLJKWRIWKHGHFLVLRQWUHHHTXDOVWKHPD[LPXPQXPEHURIFRPSDULVRQVWRVRUWWKHOLVW ,WFRXOGWDNHIHZHU ,QWKHDERYHH[DPSOH LI a ≤ b DQG b ≤ cWKHOLVWLVVRUWHGZLWKRQO\WZRFRPSDULVRQV %XW LI a ≤ b DQG b > c DWKLUGFRPSDULVRQLVUHTXLUHG

7KHΩ ERXQGH[LVWV EHFDXVHWRVRUW n HOHPHQWVWKHGHFLVLRQWUHHPXVWKDYH n! OHDYHV:KDWLVWKHVPDOOHVWKHLJKWDWUHHFDQKDYHLILWKDV n! OHDYHV" 3DUWERIWKHÀJXUHVVKRZVD SHUIHFW ELQDU\WUHHRIKHLJKWWKUHH $ SHUIHFWELQDU\WUHHRIKHLJKW h LVWKHWUHHZLWKWKHPD[LPXPQXPEHURIOHDYHV ,QJHQHUDO DKHLJKWh WUHHKDVDWPRVW 2h OHDYHV )RUH[DPSOH WKHKHLJKWWUHHLQ3DUWDKDVVL[OHDYHV DQGWKHKHLJKWWUHHLQ3DUWEKDVHLJKWOHDYHV ZKLFKLVWKHPD[LPXP

%HFDXVHWKHGHFLVLRQWUHHPXVWKDYH n! OHDYHV 2h ≥ n! +HUHLVDSURRIRIWKHFRPSDULVRQVRUWERXQGVWDUWLQJZLWKWKLVUHODWLRQVKLS

3URRI

2h ≥ n!= ⟨0DWK WDNHWKHORJEDVHRIERWKVLGHV⟩

h ≥ lg(n!)⇒ ⟨/HPPD n! ≥ (n/2)n/2 DQGPRQRWRQLFLW\RI lg⟩

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

23 68 6

Page 21: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures Figure 4.29 3HUIRUPDQFH0HWULFVDQG'HFRUDWRU3DWWHUQV

Height = 3

a : b

b : c a : c

a : c b : c

(a)!Maximum decisions = 3. Number of leaves = 6. (b)!Maximum decisions = 3. Number of leaves = 8.

≤ >

≤ ≤

≤> >

>>

)LJXUH 7ZRGHFLVLRQWUHHV 3DUWDLVWKHGHFLVLRQWUHHIRUVRUWLQJWKUHHHOHPHQWV3DUWELVDIXOOWUHHFRQWDLQLQJWKHPD[LPXPQXPEHURIOHDYHVIRUDWUHHRIKHLJKW

FRPSDUHVYDOXHV a DQG b 7KHEUDQFKWRWKHOHIWLVIRUWKHSURFHVVLQJWKDWPXVWEHGRQHLI a ≤ b DQGWKHEUDQFKWRWKHULJKWLVWKHSURFHVVLQJWKDWPXVWEHGRQHLI a > b

7KHOHIWFKLOGRIWKHURRW b : c UHSUHVHQWVDFRPSDULVRQRI b DQG c ,WVOHIWFKLOGUHSUHVHQWVWKHRXWFRPHLI b ≤ c %HFDXVHWKHÀUVWWHVWGHWHUPLQHVWKDW a ≤ b DQGWKHVHFRQGWHVWGHWHUPLQHVWKDW b ≤ c WKHFRQFOXVLRQLVWKDWWKHVRUWHGRUGHULV ⟨a,b,c⟩ LQGLFDWHGE\WKHOHDI 2QWKHRWKHUKDQG LIWKHVHFRQGWHVWGHWHUPLQHVWKDW b > c WKHRQO\SRVVLEOHFRQFOXVLRQLVWKDW b KDVWKHPD[LPXPYDOXH 7RGHWHUPLQHZKHWKHUWKHFRUUHFWVRUWLV⟨a,c,b⟩ RU ⟨c,a,b⟩ UHTXLUHVWKHDGGLWLRQDOFRPSDULVRQRI a DQG c

,QJHQHUDO DQ\VRUWDOJRULWKPWKDWGHSHQGVRQSDLUZLVHFRPSDULVRQRIHOHPHQWVPXVWEHPRGHOHGE\DGHFLVLRQWUHHWKDWKDV n! OHDYHV EHFDXVHWKHUHDUH n! SRVVLEOHLQLWLDOSHUPXWDWLRQVRI n HOHPHQWVDQGWKHDOJRULWKPPXVWEHDEOHWRVRUWWKHHOHPHQWVFRUUHFWO\IRUDOOSRVVLEOHLQSXWSHUPXWDWLRQV 7KHUHIRUH WKHGHFLVLRQWUHHPXVWKDYH n! OHDYHV

)LJXUH VKRZVWKDWWKHKHLJKWRIWKHGHFLVLRQWUHHHTXDOVWKHPD[LPXPQXPEHURIFRPSDULVRQVWRVRUWWKHOLVW ,WFRXOGWDNHIHZHU ,QWKHDERYHH[DPSOH LI a ≤ b DQG b ≤ cWKHOLVWLVVRUWHGZLWKRQO\WZRFRPSDULVRQV %XW LI a ≤ b DQG b > c DWKLUGFRPSDULVRQLVUHTXLUHG

7KHΩ ERXQGH[LVWV EHFDXVHWRVRUW n HOHPHQWVWKHGHFLVLRQWUHHPXVWKDYH n! OHDYHV:KDWLVWKHVPDOOHVWKHLJKWDWUHHFDQKDYHLILWKDV n! OHDYHV" 3DUWERIWKHÀJXUHVVKRZVD SHUIHFW ELQDU\WUHHRIKHLJKWWKUHH $ SHUIHFWELQDU\WUHHRIKHLJKW h LVWKHWUHHZLWKWKHPD[LPXPQXPEHURIOHDYHV ,QJHQHUDO DKHLJKWh WUHHKDVDWPRVW 2h OHDYHV )RUH[DPSOH WKHKHLJKWWUHHLQ3DUWDKDVVL[OHDYHV DQGWKHKHLJKWWUHHLQ3DUWEKDVHLJKWOHDYHV ZKLFKLVWKHPD[LPXP

%HFDXVHWKHGHFLVLRQWUHHPXVWKDYH n! OHDYHV 2h ≥ n! +HUHLVDSURRIRIWKHFRPSDULVRQVRUWERXQGVWDUWLQJZLWKWKLVUHODWLRQVKLS

3URRI

2h ≥ n!= ⟨0DWK WDNHWKHORJEDVHRIERWKVLGHV⟩

h ≥ lg(n!)⇒ ⟨/HPPD n! ≥ (n/2)n/2 DQGPRQRWRQLFLW\RI lg⟩

5HYLVHG 6HSWHPEHU &RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG

23 88 8

Page 22: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures

There are n! leaves in the decision treeto sort n elements.

A decision tree of height h has at most2h leaves.

2h n!

Page 23: Performance Metrics and Decorator Patterns

Design Patterns for Data Structures &KDSWHU &RPSDULVRQ6RUW$OJRULWKPV

3URRI

2h ≥ n!= ⟨0DWK WDNHWKHORJEDVHRIERWKVLGHV⟩

h ≥ lg(n!)⇒ ⟨/HPPD n! ≥ (n/2)n/2 DQGPRQRWRQLFLW\RI lg⟩

h ≥ lg(n/2)n/2

= ⟨0DWK lgab = b lga⟩h ≥ (n/2) lg(n/2)

= ⟨h = 7KHQXPEHURIGHFLVLRQV⟩7KHQXPEHURIGHFLVLRQV ≥ (n/2) lg(n/2)

= ⟨'HÀQLWLRQRI Ω⟩7KHQXPEHURIGHFLVLRQV = Ω((n/2) lg(n/2))

= ⟨3URSHUW\RI Ω GURSSLQJWKHFRQVWDQWV⟩7KHQXPEHURIGHFLVLRQV = Ω(n lgn)

7KHSURRIXVHVWKHFRUUHVSRQGHQFHEHWZHHQWKHQXPEHURIGHFLVLRQVLQWKHGHFLVLRQWUHHPRGHODQGWKHQXPEHURIFRPSDULVRQVLQWKHVRUWDOJRULWKP

&RPSDULVRQDQGDVVLJQPHQWPHWULFVZLWKSDUDPHWULFGHFRUDWLRQ>7REHZULWWHQ 7KHUHPDLQGHURIWKLVFKDSWHUFRQWDLQVSURMHFWFRGHIURPWKHGSGV'LVWULEXWLRQLQWHUVSHUVHGZLWKSDUDJUDSKVRIEOLQGWH[WDVÀOOHU@

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLVWH[WVKRXOGFRQWDLQDOOOHWWHUVRIWKHDOSKDEHWDQGLWVKRXOGEHZULWWHQLQRIWKHRULJLQDOODQJXDJH 7KHUHLVQRQHHGIRUDVSHFLDOFRQWHQWV EXWWKHOHQJWKRIZRUGVVKRXOGPDWFKWRWKHODQJXDJH

+HOOR KHUHLVVRPHWH[WZLWKRXWDPHDQLQJ 7KLVWH[WVKRXOGVKRZ KRZDSULQWHGWH[WZLOOORRNOLNHDWWKLVSODFH ,I\RXUHDGWKLVWH[W \RXZLOOJHWQRLQIRUPDWLRQ 5HDOO\",VWKHUHQRLQIRUPDWLRQ" ,VWKHUHDGLIIHUHQFHEHWZHHQWKLVWH[WDQGVRPHQRQVHQVHOLNH≫+XDUGHVWJHIEXUQ≪ .MLIW²1HYHUPLQG $ EOLQGWH[WOLNHWKLVJLYHV\RXLQIRUPDWLRQDERXWWKHVHOHFWHGIRQW KRZWKHOHWWHUVDUHZULWWHQDQGWKHLPSUHVVLRQRIWKHORRN 7KLV

&RS\ULJKW F⃝ 'XQJ;1JX\HQDQG-6WDQOH\:DUIRUG 5HYLVHG 6HSWHPEHU