ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ÓþÂãŮ) Śûťąďć (free tree "ćŘěŊ ťąďć’) ďøć öøÀŞ ø ÀĂŞÝû éŘÂð Œþ .ťĺŘ ñŚþ n − 1 ýŘďŘć fŚÖČìć ğŘď n ŚŞ üţąďć ßČĂİ Œþ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 1 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' E = V − 1 ÝþďŘć ,ÀłŚŞ (V ) ŚûğŘbď ćŘÀãŮ (E ) ŚûñŚþ ćŘÀãŮ ÂðŘ :Ýó $ ,E = 0 Ćî ťĺŘ üúþÀŞ n = 1 ýŘÂŞ :ŘÂÖţĺŘ ŚŞ :ŰŚśŹŘ E = k − 1 ÝþďŘć V = k ýŘÂŞ :ŔŘÂÖţĺŘ ŋÂê V = k + 1 ÂðŘ :ŔŘÂÖţĺŘ Ýا & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 2 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' ýćøďø ýĆ Żďć Ć îýďĄ ÏĆ Ş Ý Č ûć ďŘÂ ì ť ú Ż ćŘěŊ ť ąďć Œ þ ýŚ ûñŚ þ ýøď Â Ş Â ðŘ $ ßČŞ "ýÀœěÂê ďÀŢ’ ýĆÎŞŘď ŚŞ ťąďć ŚŞ ďŘćťúŻ ťąďć Œþ öŊ ĆŞ ,ÀłŚŞ Œþ ÂůîŘÀ§ .ÝČþĄð ğĄŐď ćďŘć ďÀŢ Œþ fŚÖČìć ĆÈþď ěŘ ÂČè ÂÊĂä Âû • É£ÈõŚœ öŘÀœěÂê ćŘÀãŮ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 3 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ üţÈð쌪 ŰďĄŃň ĆŞ ťąďć ÓþÂãŮ r r1 T1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 r2 T2 rk Tk 4 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ .ťĺŘ ťąďć Œþ üþŚúĂŮĆŞ ùÂð Œþ • ýĆÈþď ŚŞ Řď T ÂŮïďÃŞ ťąďć Œþ rk ŚŮ r1 ýŚûĆÈþď ŚŞ Tk ŚŮ T1 ÛÖţÆõ ťąďć k ěŘ • .ÀłŚŞ rk ŚŮ r1 ďÀŢ r ĆîýďĄÏĆŞ ÝþěŚÆŞ r .楪 ÀĂûŘĄą T "ýŚûťąďćÂþě’ T1, ..., Tk ŰďĄŃňßþŘ ďć • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 5 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ a c b f d g h j & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 e i k 6 l m ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ýÀœěÂê ďÀŢ ýŚûťąďć ďć ĆČóøŘ ÓþďŚãŮ ďŘćťúŻ ťąďć ďć (root) ĆÈþď .ťĺŘ ŚţØþ ďŘćťúŻ ťąďć Âû ďć ùÂð ßþŘ ,ťÆČœ ďÀŢ ýŘďŘć Ćî ťĺŘ ýŘùÂð (leaf) ïÂŞ .ÀœěÂê öøÀŞ ùÂð (sibling) (ŚČœÝû) ďćŘÂŞ .ÀĂţÆû Ýû ďćŘÂŞ ,ÀœďŘć ďÀŢ Œþ Ćî üþŚûùÂð & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 7 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (interior node) üÜąŘć ùÂð .ïÂŞ ÂČè ùÂð (height) v ùÂð áŚÔŮďŘ v ýĆÈþď ĆŞ üţąďćÂþě ěŘ ýŘùÂð w ĆîýďĄÏĆŞ w ïÂŞ ĆŞ v ěŘ ÂČÆõ ßþÂŮïďÃŞ ñĄÏ .ÀłŚŞ ťąďć áŚÔŮďŘ .ĆÈþď áŚÔŮďŘ (depth - level) ùÂð Œþ (ÕŃÞä) ijŃÎĺ .ùÂð öŊ ĆŞ ťąďć ĆÈþď ěŘ ýÂČÆõ ñĄÏ ŚŞ ťŃĺŘ ÂŞŘÂŞ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 8 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (k-ary tree) üþŚŮ k ťąďć .ÀŃłŚŞ k ťąďć Œþ ùÂð Âû öŘÀœěÂê ćŘÀãŮ ýĆĂČÈČŞ (complete k-ary tree) ÛõŚî üþŚŮ k ťąďć .ťĺŘ (ïÂŞ ýŘÂŞ ÍÖê) ÂÔň Śþ k ÂŞŘÂŞ ùÂð Âû öŘÀœěÂê ćŘÀãŮ öŊďć Ćî ťĺŘ üţąďć (balanced tree) öěŘĄţõ ťąďć .ÀłŚŞ ĆţłŘć éĚţąŘ ÝûŚŞ À§Řø Œþ ÂůîŘÀ§ öŊ ýŚûïÂŞ ijÎĺĆî üţąďć (completely balanced tree) öěŘĄţõ Ě f õŚî ťąďć . ÀŃłŚŞ öŚÆØþ öŊ ýŚûïÂŞ ijŃÎĺ Ćî üţąďć (ordered tree) řŮÂõ ťąďć & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 9 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' .ťĺŘ É£Èõ ùÂð Âû öŘÀœěÂê řČŮÂŮ öŊďć Ćî ťĺŘ üţąďć $ (labeled tree) ďŘćřÆİÂŞ ťąďć .ćďŘć řÆİÂŞ Œþ öŊ ùÂð Âû Ćî ťĺŘ üţąďć (binary tree) üþøćøć ťąďć šŃİ ÀœěÂê ýŚûôŚœ ĆŞ ÀœěÂê øć ýŘďŘć ÂůîŘÀ§ öŊÂŃÊĂä Âû Ćî ťĺŘ üśŮÂõ ťąďć Ćî 楳 É£ŃÈõ ÀþŚŞ ÀłŚŞ ĆţłŘć ÀœěÂê Œþ ÍÖê ùÂð Œþ ÂðŘ .ÀłŚŞ üõ ťĺŘď ø .ťĺŘď Śþ ťĺŘ šİ ÀœěÂê & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 10 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (descendents) v ùÂð Œþ (öŚðćŘĄœ) ćĎøŘ ÓŃþÂãŮ ßþŘ ŚŞ .ÝČþĄðüõ v ćĎøŘ Řď v ĆÈþď ĆŞ üţąďćÂþě ďć 楯Ąõ ýŚûùÂð ýĆČÜî .ťĺŘ ľćĄą ćĎøŘ ěŘ üØþ ùÂð Âû (ancestors) ùÂð Œþ (öŚîŚČœ) ćŘÀŻŘ .ÝČ þĄ ð ùÂð öŊ ćŘÀŻŘ Řď ùÂð Œ þ ĆŞ ĆŃÈþď ěŘ ýÂČ ŃÆõ ďć ćĄ ŻĄ õ ýŚûùÂð ýĆČ Üî .ťĺŘ ľćĄą ćŘÀŻŘ øÃŻ ýÂŃÊĂä Âû ßþŘÂŞŚĂŞ (proper descendents) üãìŘø ćĎøŘ .ÀĂþŊ üõ ŠŚÆ§ ĆŞ üãìŘø ćĎøŘ ùÂð öŊ 楹 ěŘ ÂČèĆŞ ùÂð Œþ ćĎøŘ ôŚÞŮ (proper ancestors) üãìŘø ćŘÀŻŘ .ÀĂţŃÆû üãìŘø ćŘÀŻŘ ğŘď öŊ 楹 ěŘ ÂČè ĆŞ ğŘď Œþ ćŘÀŻŘ ôŚÞŮ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 11 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (subtree) ťąďćÂþě ľŘüãìŘø ćĎøŘ ýĆÞû ŚŞ ùÂð Œþ (full tree) ÂŢ ťąďć öěŘĄţõ Ě f õŚî ø ÛõŚî ťąďć (forest) ÛÚĂŻ !ťąďć ýćŘÀãŮ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 12 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĆÜßÆõ öŊ ýŚ ûïÂ Ş ćŘÀ ã Ů ,À łŚ Ş k Ś þ Â Ô ň ù ð  û öŘÀ œě ê ćŘÀ ã Ů Ć î ù ð n Ś Ş ü ţ ąďć ďć ?ťĺŚŮÀĂİ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 13 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' :Û§ $ ŚûïÂŞ ćŘÀãŮ B • ŚûùÂð Ûî ćŘÀãŮ n • .n − 1 = (n − B) ∗ k ŚûñŚþ ćŘÀ㜠• Śþ B = n − (n − 1)/k ø n − B = (n − 1)/k ÅŢ • B = [(k − 1)n + 1]/k .ÀłŚŞ ÂþÁŢÇ£Ş k ÂŞ ÀþŚŞ (k − 1)n + 1 üĂãþ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 14 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Śûťąďć ÇþŚÞČŢ T1, ..., Tk ťąďć Âþě k ø r ĆÈþď ŚŞ T ťąďć :ŋÂŃê :(preorder) řČŮÂŮÇČŢ ÇþŚÞČŢ Preorder(T ) = r, Preorder(T1), Preorder(T2), . . . , Preorder(Tk ) :(inorder) řČŮÂŮöŚČõ ÇþŚÞČŢ Inorder(T ) = Inorder(T1), r, Inorder(T2), . . . , Inorder(Tk ) :(postorder) řČŮÂŮÅŢ ÇþŚÞČŢ Postorder(T ) = Postorder(T1), Postorder(T2), . . . , Postorder(Tk ), r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 15 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ a c b f d g e h j i k l m Preorder(T): a, b, c, f, g, h, j, k, d, e, i, l, m & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 16 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ a c b f d g e h j i k l m Preorder(T ): a, b, c, f, g, h, j, k, d, e, i, l, m Inorder(T ): b, a, f, c, g, j, h, k, d, l, i, m, e & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 17 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ a c b f d g e h j i k l m Preorder(T ): a, b, c, f, g, h, j, k, d, e, i, l, m Inorder(T ): b, a, f, c, g, j, h, k, d, l, i, m, e Postorder(T ): b, f, g, j, k, h, c, d, l, m, i, e, a & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 18 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ñćŚãõ üþøćøć ťąďć a c b f d g & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 i h j k 19 e l m ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ťąďć ýøď ÂŞ ñŚÞäŘ ,žČû :ýćøďø .ßî 挟þŘ Řď ùÀłÓþÂãŮ ýŚûüðÄþø ŚŞ T üúŮ ťąďć :Create(T ) • ťąďć :üŻøÂą ÀœŘćÂðüõÂŞ Řď T ťąďć ýĆÈþď :Root(T ) • ùÂð :üŻøÂą ,ťąďć :ýćøďø ÀœŘćÂðüõÂŞ T ťąďć ďć Řď v ýùÂð ďÀŢ :Parent(T, v) • null Śþ ùÂð :üŻøÂą ,ùÂð ø ťąďć :ýćøďø ÀœŘćÂðüõÂŞ T ťąďć ďć Řď v ýùÂð ÀœěÂê ßČóøŘ :Left-Most-Child(T, v) • null Śþ ùÂð :üŻøÂą ,ùÂð ø ťąďć :ýćøďø ÀœŘćÂðüõÂŞ T ťąďć ďć Řď v ťĺŘď ťÞĺ ďćŘÂŞ :Right-Sibling(T, v) • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 20 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' null Śþ ùÂð :üŻøÂą ,ùÂð ø ťąďć :ýćøďø $ ťąďć ďć 楯Ąõ ÂňŚĂä ćŘÀãŮ :Size(T ) • ijČ¡ň ćÀä Œþ :üŻøÂą ,ťąďć :ýćøďø ťĺŘ üóŚą ťąďć ŚþŊ Ćî ÀĂîüõ É£Èõ :isEmpty(T ) • ťĺďćŚœ Śþ ťĺďć :üŻøÂą ,ťąďć :ýćøďø ÀœŘćÂðüõÂŞ Řď n ùÂð ďć ÂÊĂä řÆİÂŞ :Element(T, n) • řÆİÂŞ :üŻøÂą ,ùÂð ø ťąďć :ýćøďø & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 21 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' p ùÂð ěŘ T ťąďć ÇþŚÞČŢ $ Preorder (T, p) 1 if p = null 2 then return 3 Element(T, p) 4 p ← Left-Most-Child(T, p) 5 while p 6= null 6 do Preorder(T, p) 7 p ← Right-Sibling(T, p) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 22 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Inorder (T, p) 1 if p = null 2 then return 3 n ← Left-Most-Child(T, p) 4 Inorder(T, n) 5 Element(T, p) 6 n ← Right-Sibling(T, n) 7 while n 6= null 8 do Inorder (T, n) 9 n ← Right-Sibling(T, n) 10 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 23 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postorder (T, p) 1 if p = null 2 then return 3 n ← Left-Most-Child(T, p) 4 while n 6= null 5 do Postorder(T, n) 6 n ← Right-Sibling(T, n) 7 Element(T, p) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 24 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÂÚþć ÛÞä ÀĂİ CountNodes (T, p) . ćďŚÞłüõ Řď p ýĆÈþď ŚŞ T ťąďć ďć 楯Ąõ ýŚûùÂð ćŘÀãŮ 1 if T = null 2 then return 0 3 count ← 1 4 p ← Left-Most-Child(T, p) 5 while p 6= null 6 do count ← count+ CountNodes(T, p) 7 p ← Right-Sibling (T, p) return count & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 25 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ NodeHeight (T, p) . ÀœŘćÂðüõÂŞ ŘďöŊ ø ÀĂîüõ ĆśĺŚ¡õ T ťąďć ďć Řď p ùÂð áŚÔŮďŘ . ÝþďŘÀœ üäĚÏŘ ťąďć ýěŚĺùćŚČŢ ýùĄ¡œ ěŘ 1 if isEmpty(T ) 2 then return -1 3 height ← 0 4 p ← Left-Most-Child(T, p) 5 while p 6= null 6 do height ← max{height, NodeHeight (T, p)} 7 p ← Right-Sibling(T, p) 8 return height + 1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 26 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' :ÂÚþć ýŚûÛÞä ŚŞ parent ýěŚĺùćŚČŢ :ßþÂÞŮ $ r ýĆÈþď ĆŞ üţąďćÂþě ďć T ťąďć ďć p ďÀŢ Find-Parent (T, r, p) . ÀœŘćÂðüõÂŞ r ýĆÈþď ĆŞ T ťąďć ďć Řď p ùÂð Œþ ďÀŢ ùÂð . ÀœŘćÂðüõÂŞ null ÀłŚśœ ťąďćÂþě ďć ÂÊĂä Ćî üŮďĄň ďć . ćďŘÀœ 楯ø "ďÀŢ’ ÂðùďŚłŘ Ćî ÝČĂîüõ ŋÂê 1 if p = r 2 then return null 3 q ← Left-Most-Child(T, r) 4 while q 6= null 5 do if p = q 6 then return r 7 s ← Parent(T, q, p) 8 if s 6= null 9 then return s 10 q ← Right-Sibling(T, q) 11 return null & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 27 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĆþŘďŊ ŚŞ Śûťąďć ýěŚĺùćŚČŢ .ťĺŘ ÂÔň öŊ Father ýĆÔóĄõ :ĆÈþď ýĆþŘďć .ććÂð ÐÔ§ ÀþŚŞ ŚûďćŘÂŞ řČŮÂŮ ? řŮÂõ ýŚûťąďć ýěŚĺùćŚČŢ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 28 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ a c b f d g e h j i k l m 1 2 3 4 5 6 7 8 9 10 11 12 13 key a b c d e f g h i j k l m parent 0 1 1 1 1 2 2 2 5 8 8 9 9 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 29 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' .ćÂî ýěŚĺùćŚČŢ ĆþŘďŊ Œþ ďć Řď ťąďć ÀĂİ öŘĄŮüõ ľøď ßþŘ ŚŞ a c b f g $ p d e q u i h w x z m r s t 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 a b c d e f p u g h i q m r s t w x z 0 1 1 1 1 2 0 7 2 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 5 5 30 7 7 13 13 13 8 8 8 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ŚûÂðùďŚłŘ ěŘ ùćŚÔţĺŘ ŚŞ :ÀŞ ľøď ùÂð Âû ,label ýŚûĆÔóĄõ • ùďŚ łŘ ù ð öŊ ôŘi À œě ê Ć Ş child[i] Ć î Child[1..max-child] ýĆ þŘďŊ Œ þ • .ÀĂîüõ .ťĺŘ ťąďć ďć ùÂð Œþ öŘÀœěÂê ćŘÀãŮ ÂůîŘÀ§ max_child ďŘÀÖõ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 31 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ A B & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 D C 32 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ñćŚãõ üþøćøć ťąďć :ŠĄą ýěŚĺùćŚČŢ ùÂð Âû ýŘÂŞ label ýĆÔóĄõ • parent ø right-sibling ,left-most-child ÂðùďŚłŘ Ćĺ • (üÜňŘ ťąďć ďć) ùÂð öŊ ďÀŢ ĆŞ ø ťĺŘď ťÞĺ ďćŘÂŞ ,šİťÞĺ ÀœěÂê ßČóøŘ ĆŞ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 33 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' a root[T ] b f c d g h e i k j & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 $ 34 l m ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ üÆþÀœŘ ýŚûÂðùďŚłŘ ěŘ ùćŚÔţĺŘ ŚŞ ýěŚĺùćŚČŢ ľøď øć ýĆÆþŚÖõ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 35 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ľøď ßþŘ ĆŞ ùÀł ýěŚĺùćŚČŢ ťąďć ľÂţÆð ø 挟þŘ Create2 (x, T1, T2) . ÀĂîüõ 挟þŘ ťĺŘ x öŊ řÆİÂŞ Ćî ýŘĆÈþď ĆŞ üţąďć . ÀĂłŚŞ öŊ ôøć ø ñøŘ ýŚûťąďćÂþě řČŮÂŮĆŞ T2 ø T1 ýŚûťąďć Âþě Ćî . ÀœŘùÀł ýěŚĺùćŚČŢ ľøď ßČÞû ŚŞ üţĺďćĆŞ ŚûťąďćÂþě ø ťÆČœ üúŮ T1 :ŋÂê r ← Allocate-Node (x, T1, null ) 1 parent[Root(T1)] ← r 2 parent[Root(T2)] ← r 3 right-sibling[Root(T1)] ← Root(T2) 4 return r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 36 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Create3 (x, T1, T2, T3) . Àûćüõ ôŚźœŘ T3 ø T2 ,T1 ťąďć Âþě Ćĺ ŚŞ Řď Create2 ďŚî öŚÞû r ← Allocate-Node (x, T1, null ) 1 parent[Root(T1)] ← r 2 parent[Root(T2)] ← r 3 parent[Root(T3)] ← r 4 right-sibling[Root(T1)] ← Root(T2) 5 right-sibling[Root(T2)] ← Root(T3) 6 return r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 37 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ üþøćøć ťąďć .À Ă îü õ ùďŚ łŘ ù ð öŊ ť ĺŘď ø š İ À œě ê Ć Ş Ć î ćďŘć right ø left ýĆ Ô óĄ õ øć ù ð  û .ÀłŚŞ ĆţłŘć Ýû parent ťĺŘ ßØÞõ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 38 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ùÂð n ŚŞ üþøćøć ýŚûťąďć ćŘÀãŮ i i−1 n−i T (0) = 1 n T (n) = T (n) = X T (i − 1)T (n − i), n ≥ 1 i=1 & üĺÀì ÀÞ¡õ (öĎŚŮŚî ôŘn ćÀä) T (n) = c ° 1389 öŚŞŊ 8 39 1 2n n+1 n µ ¶ üţÈð쌪 ýĆÎŞŘď ßþŘ ŠŘĄŻ ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Preorder (T, r) . r ýĆÈþď ĆŞ T ťąďć řČŮÂŮÇČŢ ÇþŚÞČŢ 1 if r = null 2 then return 3 meet element(T, r) 4 Preorder(T, left[r]) 5 Preorder(T, right[r]) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 40 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (Expression Tree) ŰďŚśä ťąďć :ŰďŚśä Œþ ÓÜţ£õ ýŚûľďŚÚœ (infix with complete paranthesis) ÛõŚî ýÃţœŘÂŢ ŚŞ ýÀœøöŚČõ E → (E hβi E ) → ( hαiE ) → hoperandi hαi → ¬ | ! | Sin | Log | · · · unary operators hβi → − | + | ∗ | / | ˆ | ∧ | ∨ | · · · & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 41 binary operators ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 42 $ ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' (postfix) ýÀœĄÆŢ ľďŚÚœ $ E → EEhβi → Ehαi → hoperandi & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 43 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' (prefix) ýÀœøÇČŢ ľďŚÚœ $ E → hβiEE → hαiE → hoperandi & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 44 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ a+(b-c*d)^e-f^g^(h /-i* k) − + a ∧ ∧ − b f ∧ g e / ∗ c ∗ h d k ¬ i & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 45 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' ŰďŚśä ľďŚÚœ $ ľøď ôŚœ a+(b-c*d)^e-f^g^(h/¬i*k) ýÀœøöŚČõ ((a+((b-(c*d))^e))-(f^(g^((h/(¬i))*k)))) ÛõŚî ÃţœŘÂŢ ŚŞ ýÀœøöŚČõ abcd*-e^+fghi¬/k*^^ýÀœøÅŢ -+a^-b*cde^f^g*/h¬ik ýÀœøÇČŢ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 46 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ŰďŚśä Œþ ÓÜţ£õ ýŚûľďŚÚœ ÛþÀśŮ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 47 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ŰďŚśä ťąďć ← ÛõŚî ÃţœŘÂŢ ŚŞ ýÀœøöŚČõ ( E1 β E2 l ) r l+1 k k+2 β E1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 E2 48 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' (α E $ ) l r l+2 α & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 49 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ P-Infix-to-Tree (l, r) . Řď ćďŘć ďŘÂì par-infix ýĆþŘďŊ ďć r ŚŮ l ÅþÀœŘ ěŘ Ćî ÛõŚî ÃţœŘÂŢ ŚŞ ýÀœøöŚČõ ŰďŚśä Œþ ÀĂîüõ ÛþÀśŮ öŊ ñćŚãõ ŰďŚśä ťąďć ĆŞ üţÈð쌪 ľøď ĆŞ 1 if l > r 2 then return null 3 if l = r 4 then return Allocate-Node (par-infix[l], null , null ) 5 if par-infix[l + 1] in an unary operator 6 then return Allocate-Node (par-infix[l + 1],null , P-Infix-to-Tree(l + 2, r − 1)) 7 k ← FindMatch(l + 1) 8 return Allocate-Node (par-infix[k + 1], P-Infix-to-Tree(l + 1, k), P-Infix-to-Tree(k + 2, r − 1)) O(n2) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 50 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ NR-P-Infix-to-Tree () . ÀœďŘć ďÀŢ ĆŞ ÂðùďŚłŘ ,ťąďć ýŚûùÂð Ćî 楳üõ ŋÂê 1 Create-Tree (T ) 2 p ← Root (T ) 3 for i = 1 to length[par-infix] 4 do switch 5 case par-infix[i] = ’(’ 6 do if par-infix[i + 1] 6= unary operator 7 then left[p] ← Alloc-N (null , null , p) 8 p ← left[p] 9 case par-infix[i] = ’)’ 10 do p ← parent[p] 11 case par-infix[i] is an operand 12 do label[p] ← par-infix[i]; p ← parent[p] 13 case par-infix[i] is a binary or unary operator 14 do label[p] ← par-infix[i] 15 right[p] ← Alloc-N (null , null , p) 16 p ← right[p] & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 51 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ((a+((b−(c*d))^e))−(f^(g^((h/−i))*k)))) ( − − ( + ) + a ( ^ ) ^ a ( − ) e e − b ( ∗ ) b * d c c & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 ) ( f ^ ) ^ ( ^ ) f g g ^ ( ∗ ) * ( / ) k k / h −¬ ) h i i d 52 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' ýÀœøÅŢ Űä ĆŞ (ÛõŚî ýÃţœŘÂŢ ŚŞ fŚõøÃó Ćœ) ýÀœøöŚČõ Űä ÛþÀśŮ $ üŻøÂą ĆţÈŢ → ← ýćøďø ýŚûĆÆþĄœ a a a ab ab abc abc abcd abcd ∗ − abcd ∗ − abcd ∗ −e & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 + +( +( +(− +(− +(−∗ +(−∗ + +∧ +∧ a + ( b − c ∗ d ) ∧ e − +(b − c ∗ d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) (b − c ∗ d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) b − c ∗ d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) −c ∗ d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) c ∗ d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) ∗d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) d) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) ) ∧ e − f ∧ g ∧ (h/¬ i ∗ k) ∧e − f ∧ g ∧ (h/¬ i ∗ k) e − f ∧ g ∧ (h/¬ i ∗ k) −f ∧ g ∧ (h/¬ i ∗ k) f ∧ g ∧ (h/¬ i ∗ k) 53 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' üŻøÂą abcd ∗ −e ∧ + abcd ∗ −e ∧ +f abcd ∗ −e ∧ +f abcd ∗ −e ∧ +f g abcd ∗ −e ∧ +f g abcd ∗ −e ∧ +f g abcd ∗ −e ∧ +f gh abcd ∗ −e ∧ +f gh abcd ∗ −e ∧ +f gh abcd ∗ −e ∧ +f ghi abcd ∗ −e ∧ +f ghi¬ / abcd ∗ −e ∧ +f ghi¬ /k abcd ∗ −e ∧ +f ghi¬ /k∗ abcd ∗ −e ∧ +f ghi¬ /k ∗ ∧ ∧ − & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 ĆţÈŢ → ← ýćøďø ýŚûĆÆþĄœ − − −∧ −∧ −∧∧ − ∧ ∧( − ∧ ∧( − ∧ ∧(/ − ∧ ∧(/¬ − ∧ ∧(/¬ − ∧ ∧(∗ − ∧ ∧(∗ −∧∧ 54 f ∧ g ∧ ( h / ¬ i ∗ k ) $ ∧g ∧ (h/¬ i ∗ k) g ∧ (h/¬ i ∗ k) ∧(h/¬ i ∗ k) (h/¬ i ∗ k) h/¬ i ∗ k) /¬ i ∗ k) ¬ i ∗ k) i ∗ k) ∗k) k) ) ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' t: ( − + c:ýćøďø ÂðÛÞä ∗ / ˆ ¬ ) ( Push Push Push Push Push Push Push Pop-more − Push Pop Pop Push Push Push Push Pop $ ťĺŘ ĆţÈŢ ýĎŚŞ Ćî ýÂðÛÞä + Push Pop Pop Push Push Push Push Pop × Push Pop Pop Pop Pop Push Push Pop / Push Pop Pop Pop Pop Push Push Pop ˆ Push Pop Pop Pop Pop Push Push Pop ¬ Push Pop Pop Pop Pop Pop Pop Pop Action[i,j] ñøÀŻ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 55 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Infix-to-Postfix (infix) Intialize-actions() 1 while there is token in infix 2 do read token c from infix 3 if c is an operand 4 then write c at the end of postfix 5 else done ← false 6 while not done 7 do if isEmpty(S) 8 then Push(c, S); done ← true 9 else t ← Top(S) 10 if action[c, t] =’Push’ 11 then Push (S, c); done ← true 12 else if t 6= ’(’ 13 then write t at postfix 14 Pop(S) 15 while not isEmpty(S) 16 do write Top(S) at the end of postfix; Pop(S) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 56 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ŰďŚśä ťąďć ← ýÀœøöŚČõ üþŚûŰä ýŚûťąďćÂþě ýŚûĆÈþď öŊ ďć Ćî ÝČûćüõ ďŘÂì ĆţÈŢ üŻøÂą ýŚŻĆŞ • ćÂČðüõ ďŘÂì ÀœŘùÀł ĆţąŚĺ öĄĂî ŚŮ Ćî ýĆ ţ È Ţ ďć öŊ Žďć ø À œøÛ Þ ä Ś Ş ùÂ ð Œ þ ćŚ ź þŘ ü Ă ã þ ü Żø ą ďć À œøÛ Þ ä ŤŚ İ • üŻøÂą Œþ 挟þŘ ø üŻøÂą ýĆţÈŢ ěŘ Pop  øć üĂãþ üŻøÂą ďć üþøćøć ÂðÛÞä ŤŚİ • üŻøÂą ýĆţÈŢ ďć ÀþÀŻ ťąďćÂþě Žďć ø ÂðÛÞä ßþŘ ŚŞ ťąďć Âþě öŊ ýŚŻĆŞ ÀþÀŻ ťąďćÂþě Žďć ø Pop  Œþ üĂãþ üœŚÚþ ÂðÛÞä ŤŚİ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 57 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ýÀœøÇČŢ ← ýÀœøÅŢ üţÈð쌪 ýĆþøď Œþ ďć ÛþÀśŮ prefix[? · · · j] ďć ýÀœøÇČŢ ľďŚÚœ ĆŞ Řď postfix[? · · · i] ýÀœøÅŢ ŰäÂþě • ÝČĂîüõ ÀĂţÆû ŰäÂþě øć ßþŘ áøÂł ýŚûÅþÀœŘ j ø i ,ŚúţœŘ ďć • ÀœĄłüõ ŋÂê ýÂĺŘÂĺ ýŚûĆþŘďŊ prefix ø postfix • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 58 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' E1 E2 $ β i β E20 E10 j & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 59 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postfix-to-Prefix (i, j) switch 1 case postfix[i] is an operand 2 do prefix[j] ← postfix[i] 3 case postfix[i] is a binary operator 4 do operator ← postfix[i] 5 i← i−1 6 Postfix-to-Prefix (i, j) 7 i ← i − 1; j ← j − 1 8 Postfix-to-Prefix (i, j) 9 prefix[j − 1] ← operator 10 j ← j−1 11 case postfix[i] is an unary operator 12 do operator ← postfix[i]; i ← i − 1 13 Postfix-to-Prefix (i, j) 14 prefix[j − 1] ← operator 15 j ← j−1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 60 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ôøć ùŘď) ýÀœøÇČŢ ← ýÀœøÅŢ E1 i E2 β j r β E20 E10 k & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 61 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postfix-to-Prefix (i, j, k) . converts postf ix[i..j] to pref ix[k..?] 1 if j < i 2 then return 3 if i = j 4 then pref ix[k] ← postf ix[i] 5 else pref ix[k] ← postf ix[j] 6 r ← FindR (postf ix, j − 1) 7 Postfix-to-Prefix (i, r − 1, k + 1) 8 Postfix-to-Prefix (r, j − 1, r − i + k + 1) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 62 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ FindR (A, j) 1 switch 2 case A[j] is a binary operator 3 do count ← 2 4 case A[j] is a unary operator 5 do count ← 1 6 default 7 do count ← 1 8 r← j 9 while Count > 0 10 do r ← r − 1 11 switch 12 case A[r] is a binary operator 13 do count ← count + 1 14 case A[r] is a unary operator 15 do nothing 16 case 17 do count ← count − 1 18 return r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 63 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ŰďŚśä ťąďć ← ýÀœøÅŢ E1 E2 β j β E1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 E2 64 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ α E j α E & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 65 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postfix-to-Tree-1 (j) . ÀĂîüõ 挟þŘ postfix[?..j] ýŘÂŞ ŰďŚśä ťąďć Œþ . 楪 ÀûŘĄą áøÂł ÅþÀœŘ ÂŞŘÂŞ ŚúţœŘ ďć ø ťĺŘ üĺďćŊ ÂČçţõ Œþ j Ćî 楳üõ ŋÂê 1 n ← Allocate-Node(A[j], null , null ) 2 switch 3 case postfix[j] is a binary operator 4 do j ← j − 1 5 right[n] ← Postfix-to-Tree-1(j) 6 j ← j−1 7 left[n] ← Postfix-to-Tree-1(j) 8 case postfix[j] is a unary operator 9 do j ← j − 1 10 right[n] ← Postfix-to-Tree-1(j) 11 return n & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 66 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postfix-to-Tree-2 (postfix) . ÀĂîüõ 挟þŘ postfix ýŘÂŞ ŰďŚśä ťąďć Œþ 1 Create-Stack(S) . ÀĂţÆû ťąďćÂþě Œþ ĆŞ ÂðùďŚłŘ ĆţÈŢ ÂňŚĂä 2 for i ← 1 to length[postfix] 3 do if postfix[i] is an operand 4 then Push(S, Allocate-Node(postfix[i], null , null )) 5 if postfix[i] is a unary operator 6 then r ← Allocate-Node(postfix[i], null ,Pop(S)) 7 Push(S, r) 8 if postfix[i] is a binary operator 9 then t ← Pop(S) 10 r ← Allocate-Node(postfix[i],Pop(S), t) 11 Push(S, r) 12 return Top(S) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 67 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postfix-to-Tree (i, j) . Creates a tree for postf ix[i..j] 1 if j < i 2 then return null 3 n ← Allocate-Node(A[j], null , null ) 4 if i < j 5 then r ← FindR(postf ix, j − 1) 6 lef t[n] ← Postfix-to-Tree (i, r − 1) 7 right[n] ← Postfix-to-Tree (r, j − 1) 8 return n & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 68 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Postfix-to-Tree (j) . Makes a tree for postfix[?..j] . j is assumed to be a reference variable 1 n ← Allocate-Node(A[j], null , null ) 2 switch 3 case postf ix[j] is a binary operator 4 do j ← j − 1 5 right[n] ← Postfix-to-Tree(j) 6 j ← j−1 7 lef t[n] ← Postfix-to-Tree(j) 8 case postf ix[j] is a unary operator 9 do j ← j − 1 10 right[n] ← Postfix-to-Tree(j) 11 return n & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 69 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (Trie) ýŘÂŮc :ñŚůõ Ć Þ Ü î ćŘÀ ã Ů ýùÂ Č ąč ýŘÂ Ş ýďŚ ţ ąŚ ĺùćŘć (retrieval ýĆ Þ Ü î ěŘ ùÀ łĆ ţ ê ð Ş) ýŘÂ Ů Â Č ą Ś þ ť Æ û öŊ ďć Ć Þ Ü î Œ þ Ć î ćŘć É Č £ È Ů ŘďŚ î ŰďĄ ňĆ Ş öŘĄ ţ Ş Ć î ýďĄ ÏĆ Ş (ŚûŠŚþÍÜè ýŘÂŞ) ćďŘć À œě ê 26 ,ýŘ cŮ ýù ð  û ,À Ă łŚ Ş ’z’ Ś Ů ’a’ éø § Ś Ş ü Æ Č Ü Ú œŘ ŰŚ Þ Ü î  ðŘ .é§ Œþ ýŘÂŞ ôŘÀîÂû & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 70 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' t $ w s character h i e i o a b c d */− z * i e * * n n * p * s * e * n m * e g * * .the ø ,then ,thin ,this ,tip ,see ,some ,so ,win ,wing ŰŚÞÜî ýŘÂŞ ýŘÂŮc Œþ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 71 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' type Lettertype = Node = ^ $ ’a’ .. ’z’; Nodetype; Nodetype = record letter : Lettertype; isword: (’*’, ’-’); children: array[Lettertype] of Node end; & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 72 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ýŘÂŮ ýøď ÂŞ ñŚÞäŘ ýŘÂŮ ďć Ćţłď Œþ Žďć ýŘÂŮ ěŘ Ćţłď Œþ éÁ§ ýŘÂŮ ďć Ćţłď Œþ öćÂîŘÀČŢ ýŘÂŞ ĄŻøťÆŻ ýŘÂŮ ďć 楯Ąõ ýŚûĆţłď ôŚÞŮ ßţłĄœ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 73 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ýŘÂŮ ďć Žďć Trie-Insert (T, x) . ÀĂîüõ Žďć T ýŘÂŮ ďć Řď x ýĆÞÜî 1 p ← Root(T ) 2 for i ← 1 to length[x] 3 do if the value of x[i]th link of p is null 4 then x[i]th link of p ← Allocate-Node(with x[i] as its value) 5 p ← x[i]th child of p 6 tag[p] ← ‘*’ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 74 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ÓþÂãŮ) ĄŻøťÆŻ üþøćøć ťąďć üþøćøć ťąďć -- & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 75 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ÓþÂãŮ) ĄŻøťÆŻ üþøćøć ťąďć üþøćøć ťąďć -- x řÆİÂŞ ŚŞ n ùÂð Âû ýŘÂŞ -- & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 76 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ÓþÂãŮ) ĄŻøťÆŻ üþøćøć ťąďć üþøćøć ťąďć -- x řÆİÂŞ ŚŞ n ùÂð Âû ýŘÂŞ -ø x ěŘ ÂŮÝî n šİ ťąďćÂþě ýŚûùÂð ýĆČÜî řÆİÂŞ ∗ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 77 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ÓþÂãŮ) ĄŻøťÆŻ üþøćøć ťąďć üþøćøć ťąďć -- x řÆİÂŞ ŚŞ n ùÂð Âû ýŘÂŞ -ø x ěŘ ÂŮÝî n šİ ťąďćÂþě ýŚûùÂð ýĆČÜî řÆİÂŞ ∗ ťĺŘ x ěŘ ÂŮÇČŞ öŊ ťĺŘď ťąďćÂþě ýŚûùÂð ýĆČÜî řÆİÂŞ ∗ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 78 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ goto x if begin <x label end then do >x else ĄŻøťÆŻ üþøćøć ťąďć Œþ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 79 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' ÂňŚĂä ýùÀłřŮÂõ ←− řČŮÂŮßČŞ ÇþŚÞČŢ $ :ťąďć 挟þŘ ďć Žďć řČŮÂŮ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 80 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' then $ then begin label if label do goto else end if else goto do end begin .áŚÔŮďŘ ßþÂŮÇČŞ ŚŞ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 81 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ goto else label end begin if then do .áŚÔŮďŘ ßþÂŮÝî ŚŞ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 82 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (?ŘÂİ) blg nc ≤ áŚÔŮďŘ ≤ n − 1 O(lg n) :áŚÔŮďŘ ßČÚœŚČõ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 83 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ?n − 1 áŚÔŮďŘ ŚŞ ĄŻøťÆŻ üþøćøć ýŚûťąďć ćŘÀãŮ Ćİ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 84 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ?n − 1 áŚÔŮďŘ ŚŞ ĄŻøťÆŻ üþøćøć ťąďć ćŘÀãŮ Ćİ 2n−1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 85 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĄŻøťÆŻ üþøćøć ýŚûťąďć ćŘÀãŮ ?ťąŚĺ öŘĄŮüõ ŰøŚÔţõ ťąďć ŚŮ ÀĂİ a1 < a2 < · · · < an ŚŞ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 86 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĄŻøťÆŻ üþøćøć ýŚûťąďć ćŘÀãŮ ?ťąŚĺ öŘĄŮüõ ŰøŚÔţõ ťąďć ŚŮ ÀĂİ a1 < a2 < · · · < an ŚŞ T (n) = n X i=1 T (i − 1)T (n − i), T (0) = 1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 87 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĄŻøťÆŻ üþøćøć ýŚûťąďć ćŘÀãŮ ?ťąŚĺ öŘĄŮüõ ŰøŚÔţõ ťąďć ŚŮ ÀĂİ a1 < a2 < · · · < an ŚŞ T (n) = n X i=1 T (i − 1)T (n − i), T (0) = 1 T (n) = & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 1 2n n+1 n 88 öĎŚŮŚî ćÀä ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ !ÀČĂî Û§ ŚŻßČÞû ť ąďć Ć î À Č ûć ť ś Æ œ ýďĄ Ï Â þě ť ąďć Ć Ş Řď {6, 22, 9, 14, 13, 1, 8} ćŘÀ äŘ .楳 ĄŻøťÆŻ üþøćøć & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 89 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ 13 6 1 14 9 22 8 ćěŚĺüõ Řď ëĄê ťąďć üúŮ ťąďć Œþ ďć Žďć ýŚûĆóŚśœć ßþŘ 13, 6, 9, 1, 14, 8, 22 13, 14, 6, 22, 1, 9, 8 13, 6, 1, 9, 8, 14, 22 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 90 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' ëĄê ťąďć ŚúţœŘ ďć ŚŮ ćÂî üúŮ ťąďć Œþ ćďŘø Řď ëĄê ćŘÀäŘ öŘĄŮüõ ťóŚ§ ÀĂİĆŞ $ .ÀČĂî ĆśĺŚ¡õ fŚÖČìć Řď ďŘÀÖõ ßþŘ ?楳 ÛňŚ§ 13, & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 6, 9, 1, ^ ^ 14 22 8 91 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ r ∪ l1 ∪ l2 . . . ∪ ln1 ∪ T (n) = T (n1)T (n2) (n1 + n2)! n1!n2! ťĺŘ šİ ťąďćÂþě ďć ŚûùÂð ćŘÀãŮ ťĺŘ ťĺŘď ťąďćÂþě ďć ŚûùÂð ćŘÀãŮ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 92 n1 n2 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĄŻøťÆŻ BST-Search (r, x) . ťĺŘ Ž.ć.ć Œþ (ýĆÈþď Śþ) ùÂð Œþ r 1 if r = null or x = key[r] 2 then return r 3 if x < key[r] 4 then return BST-Search(left[r], x) 5 else return BST-Search(right[r], x) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 93 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (üţÈð쌪 ÂČè) ĄŻøťÆŻ NR-BST-Search (r, x) . ťĺŘ Ž.ć.ć Œþ (ýĆÈþď Śþ) ùÂð Œþ r 1 while r 6= null and x 6= key[r] 2 do 3 4 5 return r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 94 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (üţÈð쌪 ÂČè) ĄŻøťÆŻ NR-BST-Search (r, x) . ťĺŘ Ž.ć.ć Œþ (ýĆÈþď Śþ) ùÂð Œþ r 1 while r 6= null and x 6= key[r] 2 do if x < key[r] 3 then r ← left[r] 4 else r ← right[r] 5 return r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 95 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ĆĂČÞî ÂÊĂä ßţêŚþ BST-Minimum (r) 1 if lef t[r] = null 2 then return r BST-Minimum(lef t[r]) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 96 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (üţÈð쌪 ÂČè) ĆĂČÞî ßţêŚþ BST-Minimum (r) 1 while lef t[r] 6= null 2 do r ← lef t[r] 3 return r & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 97 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ýÀãŞ ÂÊĂä y = Succ(x) x x Succ(x) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 98 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ BST-Successor (r) 1 if right[r] 6= null 2 then return BST-Minimum(right[r]) 3 y ← parent[r] 4 while y 6= null and r = right[y] 5 do r ← y 6 y ← parent[y] 7 return y & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 99 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ x Žďć r α>x x & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 100 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ BST-Insert (r, x) . ťĺŘ Ž.ć.ć (ýĆÈþď Śþ) ùÂð Œþ r . ÀłŚŞ üĺďćŊ ÂţõŘďŚŢ Œþ ÀþŚŞ r :Ýúõ . ćďŘÀœ 楯ø parent ýĆÔóĄbõ 楳üõ ŋÂê 1 if r = null 2 then r ← Allocate-Node(x, null , null ) 3 if x < key[r] 4 then BST-Insert(left[r], x) 5 else if x > key[r] 6 then BST-Insert(right[r], x) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 101 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ďÀŢ ýĆÔóĄõ ŚŞ üţÈð쌪 Žďć BST-Insert-2 (r, p, x) . Ž.ć.ć (ýĆÈþď Śþ) ùÂð Œþ r . ťĺŘ r ďÀŢ p . ÀłŚŞ üĺďćŊ ÂţõŘďŚŢ Œþ ÀþŚŞ r :Ýúõ 1 if r = null 2 then r ← Allocate-Node(x, null , null ) 3 parent[r] ← p 4 if x < key[r] 5 then BST-Insert-2(left[r], r, x) 6 else if x > key[r] 7 then BST-Insert-2(right[r], r, x) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 102 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ üţÈð쌪 ÂČè Žďć & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 103 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ NR-BST-Insert (T, x) 1 n ← Allocate-Node(x, null , null ) 2 prep ← null 3 p ← root[T ] 4 while p 6= null 5 do prep ← p 6 if x < key[p] 7 then p ← left[p] 8 else if x > key[p] 9 then p ← right[p] 10 else return 11 parent[n] ← prep 12 if prep = null 13 then root[T ] ← n 14 else if x < key[prep] 15 then left[prep] ← n 16 else right[prep] ← n & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 104 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÂÊĂä ßþÂŮŒİĄî éÁ§ r t & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 105 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÂÊĂä ßþÂŮŒİĄî éÁ§ BST-Deletemin (r) . ťĺŘ Ž.ć.ć (ýĆÈþď Śþ) ùÂð Œþ r . ÀłŚŞ üĺďćŊ ÂţõŘďŚŢ Œþ ÀþŚŞ r :Ýúõ 1 if r = null 2 then error tree is empty 3 if left[r] = null 4 then x ← label[r] 5 t← r 6 r ← right[r] 7 parent[r] ← parent[t] 8 Free-Node (t) 9 return x 10 else return BST-Deletemin(left[r]) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 106 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÂÊĂä Œþ éÁ§ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 107 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ r r r ← lef t[r] r ← right[r] x x (a) (b) r x label[r] ←BST-DeleteMin(right[r]) (c) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 108 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ BST-Delete (r, x) . r is a node (or the root) of a BST . r is a reference variable 1 if r = null 2 then error (“Tree is Empty”) 3 if x < label[r] 4 then BST-Delete(lef t[r], x) 5 if x > label[r] 6 then BST-Delete(right[r], x) 7 if x = label[r] 8 then & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 109 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ BST-Delete (r, x) .. 1 if x = label[r] 2 then temp ← r 3 if lef t[r] = null 4 then r ← right[r] 5 parent[r] ← parent[temp] 6 Freee-Node(temp) 7 else if right[r] = null 8 then r ← lef t[r] 9 parent[r] ← parent[temp] 10 Freee-Node(temp) 11 else label[r] ← BST-Deletemin (right[r]) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 110 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ !ÀČĂî Û§ ŚŻßČÞû Œ Ů ŰďĄ ňĆ Ş ŘďöŊ öŘĄ Ůü õ Žćć Œ þ  ňŚ Ă ä ěŘ ř Č Ů Ůß Č Ş ýĆ óŚ ś œć ß ţ łŘć Ś Ş Ś þŊ ?ťąŚĺ ?ďĄÏĆİ řČŮÂŮÅŢ ŚŞ ?ďĄÏĆİ řČŮÂŮÇČŢ ŚŞ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 111 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÂÊĂä Œþ üţÈð쌪 ÂČè éÁ§ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 112 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' 15 15 12 10 z 13 20 20 12 3 18 23 y 16 5 16 5 3 $ 18 23 10 6 6 7 7 (a) 15 5 10 5 20 12 3 15 z 16 y 12 3 18 23 13 20 18 23 10 6 6 7 7 (b) y 15 z 5 20 12 10 13 12 3 18 23 7 16 6 20 12 3 18 23 10 y 6 15 16 z 5 16 3 15 6 10 20 18 23 7 7 (c) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 113 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ NR-BST-Delete (T, z) 1 if lef t[z] = null or rigt[z] = null 2 then y ← z 3 else y ← BST-Successor(z) 4 if lef t[y] 6= null 5 then x ← lef t[y] 6 else x ← right[y] 7 if x 6= null 8 then parent[x] ← parent[y] 9 if parent[y] = null 10 then root[T ] ← x 11 else if y = lef t[parent[y]] 12 then lef t[parent[y]] ← x 13 else right[parent[y]] ← x 14 if y 6= z 15 then key[z] ← key[y] & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 114 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ýĄŻøťÆŻ üþøćøć ťąďć áŚÔŮďŘ ßČÚœŚČõ ťąďć Œþ ćďŘø öŚĺŒþ ñŚÞţ§Ř ŚŞ ø üêćŚÊŮ ŰďĄňĆŞ a1 < a2 · · · < an :ŋÂê .ÀœĄłüõ T üúŮ Ž.ć.ć .ťĺŘ O(log n) ÂŞŘÂŞ T áŚÔŮďŘ ßČÚœŚČõ Ćî ÝČĂîüõ ŰŚśŹŘ :üêćŚÊŮ ÂČçţõ Ćĺ .楳üõ 挟þŘ ÂÊĂä n ýŘÂŞ üêćŚÊŮ ŰďĄňĆŞ Ćî üţąďć áŚÔŮďŘ Xn -.Yn ŚŞ ďŚî üðćŚĺ ÂÏŚąĆŞ Yn = 2Xn -.ćÂČðüõ ďŘÂì ĆÈþď ďć ø 楳üõ T ćďŘø Ćî ýÂÊĂä ßČóøŘ ÅþÀœŘ Rn -- & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 115 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ n − i öŊ ťĺŘď ťąďćÂþě ÂÊĂä i − 1 fŚ Þţ§ ĆÈþď šİ ťąďćÂþě ,Rn = i ÂðŘ -.ćďŘć ÂÊĂä ýŚûáŚÔŮďŘ ýĆĂČÈČŞ ěŘ ÂŮÇČŞ À§Řø Œþ ÂŞŘÂŞ T áŚÔŮďŘ Ćî ťĺŘ ßłøď ßČĂİÝû -.ťĺŘ öŊ ťąďć Âþě øć .Y1 = 1 üţÈð쌪 ýĆÎŞŘď ßþŘ ýĆþŚŢ ø Yn = 2 max{Yi−1, Yn−i} ÅŢ -Åşĺ ø ÝþďøŊ ťĺćĆŞ E[Yn] Śþ ,Yn ßČÚœŚČõ ďŘÀÖõ ýŘÂŞ ýŘĆÎŞŘď ÝČĂîüõ üãĺ -.ÝČĂî ĆśĺŚ¡õ Řď E[Xn] ÇþŚÞœ Âþě ÂČçţõ ŚŞ ŘďöŊ ø ÀłŚŞ Rn = i Ćî ÝþÂČðüõ ÂÑœ ďć Řď üţóŚ§ ďŚîßþŘ ýŘÂŞ -.ÝČûćüõ Zn,i = {Rn = i} & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 116 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' Ćî ťĺŘ üúþÀŞ ,ťąďć ÂňŚĂä ýŘÂŞ öŚĺŒþ ŰĎŚÞţ§Ř ŋÂê ÕśÏ -- E[Zn,i] = 1/n. $ (1) ,ÝþďŘć ø -- Yn = & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 n X i=1 Zn,i(2. max{Yi−1, Yn−i}). 117 (2) ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' .ÝþďøŊüõ ťĺćĆŞ Âþě ÕŞŚÎõ Řď E[Yn] üêćŚÊŮ ýŚûÂČçţõ ýŚûüðÄþø E[Yn] = E = = = = ≤ n X i=1 n X i=1 n X E[Zn,i]E[(2. max{Yi−1, Yn−i})] 1 E[(2. max{Yi−1, Yn−i})] n X E[(max{Yi−1, Yn−i})] n X (E[Yi−1] + E[Yn−i]). n i=1 2 Zn,i(2. max{Yi−1, Yn−i}) E[Zn,i(2. max{Yi−1, Yn−i})] i=1 n 2 i=1 n X $ n i=1 .ťĺŘ ùÀł ùćŘć ßþÂÞŮ öŘĄĂäĆŞ ÂąŊ ýøŚÆõŚœ ŰŚśŹŘ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 118 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' :ťłĄœ Ýû Âþě ŰďĄňĆŞ öŘĄŮüõ Řď ýøŚÆõŚœ ßþŘ E[Yn] ≤ 4 n−1 X n i=1 $ (3) (E[Yi]) Űä üţÈð쌪 ýĆÎŞŘď ÛňŚ§ Ćî ćŘć öŚÈœ öŘĄŮüõ ýďŘÁðýŚŻ ľøď ěŘ ùćŚÔţĺŘ ŚŞ :ťĺŘ Âþě E[Yn] ≤ 1 n + 3 4 3 (4) Ćî ÝČûćüõ öŚÈœ ßþÂÞŮ ďć ,ñĄõÂê ßþŘ ŰŚśŹŘ ýŘÂŞ n−1 X i i=0 + 3 3 n + 3 = c ° 1389 öŚŞŊ 8 (5) 3 1 = Y1 = E[Y1] ≤ & üĺÀì ÀÞ¡õ 1 1 + 3 4 119 3 :ÝþďŘć Y1 ýŘÂŞ ŘÀţŞŘ ďć =1 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' ,ÝþďŘć üÜî ťóŚ§ ýŘÂŞ .ťĺŘ ŘÂÖţĺŘ ýĆþŚŢ ßþŘ ø E[Yn] ≤ = = = = 4 n−1 X n i=0 $ E[Yi] 4 n−1 i + 3 X 1 n i=0 4 3 1 n−1 i + 3 X n i=0 3 1 n + 3 n 3 1 (n + 3)! n 4!(n − 1)! 1 (n + 3)! = 4 3!n! 1 n + 3 . = 4 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 3 120 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' Ćî ÝČœŘćüõ éÂÏöŊ ěŘ $ 2E[xn ] ≤ E[2Xn ] = E[Yn] ÅŢ 2 E[xn ] ≤ = = 1 n + 3 4 3 1 (n + 3)(n + 2)(n + 1) 4 . 6 n3 + 6n2 + 11n + 6 24 . Ć îöŚ Þ û ,E[Xn] = O(lg n) ,ť łŘć Ý Č ûŘĄ ą Ý þÂ Č Ú Ş Ý ţ þďŚ Ú ó ß Č êÂ Ï ěŘ Â ðŘ Ć î ,ßþŘÂŞŚĂŞ .ÝČĂî ťŞŚŹ ÝČţĺŘĄąüõ n ŚŞ üêćŚÊŮ ŰďĄňĆŞ Ćî ĄŻøťÆŻ üþøćøć ťąďć Œþ áŚÔŮďŘ ßČÚœŚČõ 1 ýĆČÌì & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 121 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' & üĺÀì ÀÞ¡õ .ťĺŘ O lg n ÂŞŘÂŞ 楳üõ ĆţąŚĺ ÂÊĂä c ° 1389 öŚŞŊ 8 122 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć $ % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (Priority Queue) ťþĄóøŘ Óň CLRS ŠŚţî 6/ 5 Ç£Ş ěŘ ñŚÞäŘ ýŘÂŞ ýďŚţąŚĺùćŘć Žďć -ÂÊĂä (ßþÂŮŒİĄî) ßþÂŮïďÃŞ éÁ§ -ÂÊĂä Œþ ÀČÜî ďŘÀÖõ (ÇûŚî) ÇþŘÃêŘ -- O(lg n) ďć ĆÞû & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 123 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ÓþÂãŮ) ťþĄóøŘ Óň Œþ ŚŞ ÂÊĂä Œþ ÂůîŘÀ§ ÃŻĆŞ) (complete binary tree) ÛõŚî üþøćøć ťąďć Œþ (ÀœěÂê .ÀœŘùÀł ùÀČİ šİ ťÞĺ ěŘ öŊ ÂąŊ ijÎĺ ýŚûïÂŞ .ťÆČœ ÂŮŒİĄî ÇœŘÀœěÂê ýŚûÀČÜî ěŘ ÂÊĂä Âû ÀČÜî Ś þ ,max-heap ,(Partially Ordered Tree) ř Ů õĆ Þ Č œ ť ąďć ďŚ ţ ąŚ ĺùćŘć ß þŘ Ć Ş ÀĂþĄðüõ ÃČœ max-priority queue .ťĺŘ min-heap öŊ ŚŞ ÂÒŚĂţõ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 124 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ 1 16 2 3 14 10 4 5 8 7 8 7 2 9 10 9 2 6 1 4 1 2 3 4 5 6 7 8 9 10 16 14 10 8 7 9 2 2 4 1 ťþĄóøŘ Óň Œþ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 125 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ŚûüðÄþø) max-heap .ťĺŘ ÂÊĂä ßþÂŮïďÃŞ ĆÈþď • .ÀłŚŞüõ blg nc ÂÊĂä n ŚŞ max-heap ťąďć Œþ áŚÔŮďŘ • 楳üõ ôŚźœŘ lg n ýĆśŮÂõ ěŘ ÀČÜî ÇþŘÃêŘ ø ßþÂŮïďÃŞ éÁ§ ,Žďć ñŚÞäŘ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 126 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ k−1 2k − 1 ùÂð n ŚŞ ťþĄóøŘ Óň áŚÔŮďŘ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 127 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ (ŚûüðÄþø) min-heap .ťĺŘ ÂÊĂä ßþÂŮŒİĄî ĆÈþď • .ÀłŚŞüõ blg nc ÂÊĂä n ŚŞ min-heap ťąďć Œþ áŚÔŮďŘ • 楳üõ ôŚźœŘ lg n ýĆśŮÂõ ěŘ ÀČÜî ÇûŚî ø ßþÂŮŒİĄî éÁ§ ,Žďć ñŚÞäŘ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 128 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ max-heap ýěŚĺùćŚČŢ A[1..n] ýĆþŘďŊ • A[1] ďć ĆÈþď • (2i ≤ n ÂðŘ) A[2i]ďć ôŘi ÂÊĂä šİ ÀœěÂê • (2i + 1 ≤ n ÂðŘ) A[2i+1] ďć öŊ ťĺŘď ÀœěÂê • A[b i 2 c] ďć ľďÀŢ • & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 129 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Parent (i) 1 return b 2i c LeftChild (i) 1 return 2i RightChild (i) 1 return 2i + 1 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 130 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÀČÜî ÇþŘÃêŘ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 131 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ 1 16 2 3 14 10 4 5 8 8 1 15 1 7 2 9 10 9 2 6 7 2 3 16 14 10 4 5 6 7 8 9 10 8 7 9 2 2 15 1 1 16 2 3 15 10 4 5 14 8 1 8 1 2 3 4 16 15 10 14 & üĺÀì ÀÞ¡õ 7 2 9 10 9 2 6 7 5 6 7 8 9 10 7 9 2 2 8 1 ÀČÜî ÇþŘÃêŘ c ° 1389 öŚŞŊ 8 132 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Max-Heap-Increase-Key (A, i, key) 1 if key < A[i] 2 then error “new key is smaller than current key” 3 A[i] ← key 4 while i > 1 and A[i] > A[Parent(i)] 5 do swap(A[i], A[Parent(i)] ) 6 i ← Parent(i)] & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 133 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' & üĺÀì ÀÞ¡õ $ Žďć c ° 1389 öŚŞŊ 8 134 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ 1 16 2 3 14 10 4 5 8 8 2 11 15 1 4 3 16 14 10 7 2 9 10 9 2 1 6 7 4 5 6 7 8 9 10 11 8 7 9 2 2 4 1 15 1 16 2 3 15 10 4 8 8 9 2 1 3 16 15 10 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 6 9 10 7 2 11 7 1 4 2 5 14 4 5 6 7 8 9 10 11 8 14 9 2 2 4 1 7 135 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Max-Heap-Insert (A, key) 1 length[A] ← length[A] + 1 2 A[length[A]] ← −∞ 3 Max-Heap-Increase-Key(A, length[A], key) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 136 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ A[i..length[A]] öćďøŊ ďć max-heap ŰďĄňĆŞ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 137 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ A[i..length[A]] öćďøŊ ďć max-heap ŰďĄňĆŞ Max-Heapify (A, i) 1 l ← LeftChild (i) 2 r ← RightChild (i) 3 if l ≤ length[A] and A[l] > A[i] 4 then bigchild ← l 5 else bigchild ← i 6 if r ≤ length[A] and A[r] > A[bigchild] 7 then bigchild ← r 8 if bigchild 6= i 9 then swap(A[i], A[bigchild]) 10 Max-Heapify (A, bigchild) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 138 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ max-heap ĆŞ ĆþŘďŊ Œþ ÛþÀśŮ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 1 2 3 4 5 6 7 8 9 10 3 6 1 9 7 18 9 18 5 8 3 6 1 9 8 18 9 18 5 7 3 6 1 18 8 18 9 9 5 7 3 6 18 18 8 1 9 9 5 7 3 18 18 9 7 1 9 6 5 7 18 9 18 6 7 1 9 3 5 7 139 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ max-heap ĆŞ ĆþŘďŊ Œþ ÛþÀśŮ Build-Heap (A) 1 for i ← b length[A] c downto 1 2 2 do Heapify(A, i) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 140 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ max-heap ďć ÂÊĂä ßþÂŮïďÃŞ éÁ§ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 141 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ 1 1 2 3 14 10 4 5 8 6 7 8 7 2 9 9 2 4 1 2 3 14 10 1 4 5 6 7 8 9 8 7 9 2 2 4 1 14 2 3 10 8 4 5 8 c ° 1389 öŚŞŊ 8 7 2 9 9 1 & üĺÀì ÀÞ¡õ 6 7 2 4 1 2 3 4 5 6 7 8 9 14 8 10 2 7 9 2 1 4 142 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ max-heap ďć ÂÊĂä ßþÂŮïďÃŞ éÁ§ Heap-Delete-Max (A) 1 if length[A] < 1 2 then error “heap underflow” 3 max ← A[1] 4 A[1] ← A[length[A]] 5 A[length] ← A[length] − 1 6 Max-Heapify(A, 1) 7 return max & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 143 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ 1 2 3 4 5 6 7 8 9 10 ñŚůõ +--+--+--+--+--+--+--+--+--+--+ 18 18 16 9 7 1 9 3 7 5 initial heap 5 18 16 9 7 1 9 3 7 deletemax 18 5 16 9 7 1 9 3 7 after heapify (A,1) 18 9 16 5 7 1 9 3 7 after heapify (A,2) 18 9 16 7 7 1 9 3 5 after heapify (A,4) 1 2 3 4 5 6 7 8 9 10 11 +--+--+--+--+--+--+--+--+--+---+---+ 18 18 16 9 7 1 9 3 7 5 13 after Insert 13 18 18 16 9 13 1 9 3 7 5 7 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 144 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ ÛČÜ¡Ů O(lg n) ěŘ ø heap áŚÔŮďŘ ŚŞ řĺŚĂţõ Build-Heap ÃŻĆŞ ñŚÞäŘ ýĆÞû & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 145 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ Build-Heap ÛČÜ¡Ů b 8n c & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 bnc 4 n bnc 2 146 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' i = bn/22c + 1 . . . bn/2c i = bn/23c + 1 . . . bn/22c ... ... S(i) = k+1 k k i = bn/ 2 c + 1 . . . bn/ 2 c ... ... blg nc i = 1 & üĺÀì ÀÞ¡õ c ° 1 2 1389 öŚŞŊ 8 147 $ ćŘÀãŮ ćŘÀãŮ = bn/22c = bn/23c ćŘÀãŮ = bn/2k+1c ćŘÀãŮ =1 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' T (n) ≤ ∞ X i=1 blg nc X k=1 k $ n 2k+1 i/2i = (1/2) + (1/4 + 1/4) + (1/8 + 1/8 + 1/8) + ... = 2 1/2 + 1/4 + 1/8 + 1/16 + · · · = 1 1/4 + 1/8 + 1/16 + · · · = 1/2 1/8 + 1/16 + · · · = 1/8 · · · = .. .ťĺŘ O(n) ěŘ heap ťąŚĺ ÅŢ & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 148 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ !ÀČĂî Û§ ŚŻßČÞû .ÝþďøŊ ťĺćĆŞ řČŮÂŮĆŞ ÝČûŘĄąüõ Řď ÂÊĂä n ÂňŚĂä ßþÂŮŒİĄî ćÀä k & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 149 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ !ÀČĂî Û§ ŚŻßČÞû öŘĄŮüõ ŘďŚî ŰďĄňĆŞ ýŘĆśŮÂõ Ćİ ŚŞ Řď Âþě ýŚûďŚî heap ŰďĄňĆŞ ĆþŘďŊ Œþ ýŘÂŞ ?ćŘć ôŚźœŘ :ćŘÀäŘ ýĆÞû âÞŻ :ćÀä ßþÂŮïďÃŞ lg n ćŘÀãŮ âÞŻ :ïďÃŞ ćÀä 10 âÞŻ - & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 150 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ !ÀČĂî Û§ ŚŻßČÞû öŘĄŮüõ ŘďŚî ŰďĄňĆŞ ýŘĆśŮÂõ Ćİ ŚŞ Řď Âþě ýŚûďŚî heap ŰďĄňĆŞ ĆþŘďŊ Œþ ýŘÂŞ ?ćŘć ôŚźœŘ n :ćŘÀäŘ ýĆÞû âÞŻ lg2 n ďć :ćÀä ßþÂŮïďÃŞ lg n ćŘÀãŮ âÞŻ O(1) :ïďÃŞ ćÀä 10 âÞŻ - & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 151 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' $ heapsort Build-Heap (A) 1 for i ← b length[A] c downto 1 2 2 do Heapify(A, i) HeapSort (A) 1 Build-Heap(A) 2 for i ← length[A] downto 2 3 do swap(A[1], A[length[A]]) 4 length[A] ← length[A] − 1 5 Heapify (A, 1) & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 152 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' 1 2 3 4 5 6 7 8 9 $ 10 Swap(1,10) 18 9 18 6 7 1 9 3 5 7 Heapify(1,9)7 9 18 6 7 1 9 3 5 18 Swap(1,9) 18 9 9 6 7 1 7 3 5 18 Heapify(1,8)5 9 9 6 7 1 7 3 18 18 Swap(1,8) 9 7 9 6 5 1 7 3 18 18 Heapify(1,7)3 7 9 6 5 1 7 9 18 18 Swap(1,7) 9 7 3 6 5 1 7 9 18 18 Heapify(1,6) 7 7 3 6 5 1 9 9 18 18 Swap(1,6) 7 7 3 6 5 1 9 9 18 18 Heapify(1,5)1 7 3 6 5 7 9 9 18 18 Swap(1,5) 7 6 3 1 5 7 9 9 18 18 Heapify(1,4) 5 6 3 1 7 7 9 9 18 18 Swap(1,4) 6 5 3 1 7 7 9 9 18 18 Heapify(1,3)1 5 3 6 7 7 9 9 18 18 5 1 3 6 7 7 9 9 18 18 Swap(1,3) Heapify(1,2)3 1 5 6 7 7 9 9 18 18 Swap(1,2) 3 1 5 6 7 7 9 9 18 18 1 3 5 6 7 7 9 9 18 18 & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 153 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ' ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć $ heapify (A,i) 1 2 3 4 5 6 7 8 9 10 +--+--+--+--+--+--+--+--+--+--+ 3 6 1 9 7 18 9 18 5 7 initial array 3 6 1 9 7 18 9 18 5 7 i:=5 3 6 3 6 3 18 -3 18 1 18 -18 18 -18 6 -18 9 -18 9 18 3 -- -18 9 18 3 --18 9 18 9 -& üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 7 18 9 9 -9 9 5 7 i:=4 5 7 i:=3 7 1 -1 9 9 5 7 i:=2 7 1 9 5 7 7 6 -1 6 9 5 7 7 1 6 9 5 7 7 1 6 3 -- 5 7 7 i:=1 heap 154 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' 1 2 3 4 5 6 7 8 9 10 +--+--+--+--+--+--+--+--+--+--+ 18 9 18 9 7 1 6 3 5 7 7 18 9 18 . 7 9 . 7 . 1 . 6 . 3 . 5 9 . 9 5 9 7 . . 9 . 5 7 . . 1 . . 6 . . 3 |18 18 . . 3 9 . . 9 3 7 . 7 . 3 6 5 . . . 7 . . . 1 . . . 6 |9 . . 3 3 7 7 7 3 6 6 . 3 5 . . 7 . . 1 |9 . . & üĺÀì ÀÞ¡õ c ° 1389 öŚŞŊ 8 9 $ heap 5| 18 .| swap (1,10) swap (1,9) 18 18 swap(1,8) 18 18 swap(1,7) 155 ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć % ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć ' 1 6 . 6 1 7 3 . . 5 . . 1 7 . 7 1 5 3 . . 5 |6 . 1 1 5 5 1 3 |7 . 3 1 |5 1 |3 5 |1 3 & üĺÀì ÀÞ¡õ c ° 5 9 9 18 18 swap(1,6) 7 9 9 18 18 swap(1,5) 6 7 9 9 18 18 swap(1,4) 7 7 6 6 7 7 9 9 9 9 18 18 18 18 swap(1,3) swap(1,2) 7 6 7 9 9 18 18 sorted 1389 öŚŞŊ 8 7 |7 . 1 156 $ ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć %
© Copyright 2025 Paperzz