6 t9 Y! A' U- _. [/ g score=’中’;/ ~9 R/ J7 U. N( n+ B5 R* w
) p0 @1 R( h; D1 \. Telse if ( x<90)- n( s0 u& V' X
. L) {3 H+ F0 w
score=’良’; 8 L5 s9 Z& k: g4 k% A 3 A# k+ L' Y: qelse : h5 Z6 ?3 C* K* i+ |* j0 Z1 V/ J& j& u* O4 p; \2 P
score=’优’; 2 L9 i4 U4 z% Y" x+ O. { & a \+ a4 V$ e8 I6 T; u- w4 e此判定过程可以用图6.33(a)的判定树来表示。如果学生规模很大,该算法需反复多次执行,就应该考虑算法执行的时间问题。在实际应用中,学生的成绩呈正态分布,大部分在70~89分之间,优秀和不及格的概率较小。假设不及格、及格、中、良、优的百分比为5%、12%、40%、35%、8%,则上述算法80%以上的成绩需要进行三次或三次以上的比较才能得到结果。若以这些百分比值5,12,40,35,8为权值,使用哈夫曼算法来构造一棵判定树,则得到图6.33(b)所示的判定过程,可使多数成绩经过较少的比较即可得到结果。但由于每个判定框都有两次比较,将两次比较分开,得到如图6.33(c)所示的判定树,按此判定树构造程序,显然可以大大减少比较次数。5 R" f5 i9 d4 s( z" A+ L
# ~5 A+ ^6 A* F/ ~6 h" L" q
x x " w( q8 Y1 H8 ?; Y
7 O* x# u! l0 \/ S" r ! ~/ c& a: f8 p" H! Y7 \* E' Q+ ~ {! b' }4 R! {# _
5 M2 Z' j& m: d; X# H$ P( ~, T R % Y4 ^. L; c8 S0 g& C; z' ~+ [4 | x<60 70≤x<800 T; f3 X, q# G H6 T3 t+ k0 K
. a. E8 y1 W8 F6 Z# v1 P Y N Y N $ Z4 n% O7 T0 T u1 N/ a4 T9 x4 |0 ?( _4 D* y/ P* ]
不及格 x<70 中 80≤x<90 5 C- x- T6 i: a& h$ n' B/ j f* J2 U5 h; K9 J2 b. I
Y N Y N ! M) x; T8 t+ c. ] K2 F7 B) Q+ y0 c ] $ T3 t) T! z. O- i r% y% A0 U 及格 x<80 良 60≤x<706 k; C% F' [: g; @1 w2 N
/ g; g. n1 k- ~% J0 l3 _ Y N Y N * }8 i% B1 X: }3 N# }1 | ( c) f8 X, j9 V1 e! ], {8 a 中 x<90 x<60 及格/ i0 {6 Y# Q6 S$ z0 h
/ ?3 L8 ]0 _ [7 m0 \+ x% _9 W4 V
Y N Y N ) p+ N C' _. K3 u3 } ) b! [. t# i* ?' T& J0 L 良 优 不及格 优" F. k0 Z4 b, T( W
9 W3 N a1 Z# V% g6 L) A(a) (b) ) i& @0 @5 x; P - d. X: P* |! c, X n, c x7 ]7 E6 a+ i$ ]' x: H
/ ]' {+ x4 R; X% \( Y
?1 d: n X0 ?: p9 s( j- o2 m4 K( a& u
x<80$ I: |& M" M8 D5 J4 ~* r3 d2 u
4 O& H% i3 I! O# w Y 8 K2 F3 ^8 T5 A M, l# f+ `8 F9 _
x<70 x<90 4 |3 t+ x6 X' `' A( w; @" j5 B / W! D3 |# s0 Y' S4 z ~5 x3 {Y N Y N. ]. ~3 [) s! P5 j0 E
( L4 b% t7 t( {! ]( h x<60 中 良 优) V5 p6 ]6 x3 T1 J& K2 ?
; t3 c3 `4 j& V0 }
Y N 0 t5 f* j4 u/ E1 j+ Y1 N) L, ?" m. E# N! s
不及格 及格 ' X3 _1 M Q# {' U; X " j: P0 U+ J0 J m (c)1 s% d6 \" v! v: t: D9 s3 q7 i! _
3 j) J. k4 F+ |4 S" @ 图6.33 百分制转换五级制的判定过程 6 S& q4 `" y) ]! p: D, S; g' d# o3 S' S1 u8 b( J0 A) Q, B/ ?+ W
6 ]' P' z1 q- y8 z9 A5 \ score=’中’;' G* O, f9 U0 }+ ]- d' m5 h
' k" k' c' j/ P9 u* L y) p! delse if ( x<90) : t/ q% Y: I; k# W5 n5 W# H - I! U7 {& {. G2 F3 l. E* o score=’良’;, F$ C+ u3 n+ u$ {) R1 T
$ Q9 j! v# x4 F) V4 q" ielse3 t0 ?# j% X' m2 {5 I: m; k
5 D2 f2 L/ ^/ Z% E score=’优’;' l) K% \! J' ^7 w1 X+ C8 b4 k
0 h9 g; B+ v9 z. ?3 n此判定过程可以用图6.33(a)的判定树来表示。如果学生规模很大,该算法需反复多次执行,就应该考虑算法执行的时间问题。在实际应用中,学生的成绩呈正态分布,大部分在70~89分之间,优秀和不及格的概率较小。假设不及格、及格、中、良、优的百分比为5%、12%、40%、35%、8%,则上述算法80%以上的成绩需要进行三次或三次以上的比较才能得到结果。若以这些百分比值5,12,40,35,8为权值,使用哈夫曼算法来构造一棵判定树,则得到图6.33(b)所示的判定过程,可使多数成绩经过较少的比较即可得到结果。但由于每个判定框都有两次比较,将两次比较分开,得到如图6.33(c)所示的判定树,按此判定树构造程序,显然可以大大减少比较次数。& S H0 g% b' D: v- I
H" I( i! U( }( `( k# D2 V x x 4 ]8 X0 J5 s" \, [( A9 A, W1 U/ b
& d# n W" i0 X, w1 Q H0 {/ `
3 t' m- H9 h! W- O( X: g
, _/ \' q7 ]9 F; \9 ~