You are on page 1of 57

‫ﺩﺍﻧﺸﺠﻮﻱ ﮔﺮﺍﻣﻲ‬

‫ﻫﺪﻑ ﺍﺯ ﺗﺪﻭﻳﻦ ﺍﻳﻦ ﻣﺠﻤﻮﻋﻪ ﺑﺮﺭﺳﻲ ﻧﻜﺎﺕ ﻣﻬﻢ ﻣﺮﺑﻮﻁ ﺑﻪ ﺳﻮﺍﻻﺕ ﻛﻨﻜﻮﺭ ﺩﺭﺱ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﺩﺭ ﺳﺎﻝﻫﺎﻱ ﺍﺧﻴﺮ‬

‫ﺍﺳﺖ‪.‬‬

‫ﺍﻳﺪﻩ ﺍﺻﻠﻲ ﻃﺮﺍﺣﺎﻥ ﺳﻮﺍﻝ ﺩﺭ ﭼﻨﺪ ﺳﺎﻝ ﮔﺬﺷﺘﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﺴﺎﺋﻞ ﻛﺘﺎﺏ "ﻣﻘﺪﻣﻪﺍﻱ ﺑﺮ ﺍﻟﮕﻮﺭﻳﺘﻢﻫﺎ" ﻧﻮﺷﺘﻪ ﺗﻮﻣﺎﺱ ﻛﺮﻣﻦ‬

‫ﺩﺭ ﻣﺒﺎﺣﺚ ﺩﺭﺧﺖﻫﺎ‪ ،‬ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ‪ ،‬ﺑﺎﺯﮔﺸﺘﻲ ﻭ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺑﻮﺩﻩ ﺍﺳﺖ‪.‬‬

‫ﺍﻣﻴﺪ ﺍﺳﺖ ﺍﻳﻦ ﻣﺠﻤﻮﻋﻪ ﺑﺘﻮﺍﻧﺪ ﻛﻤﻜﻲ ﺩﺭ ﺟﻬﺖ ﻣﻮﻓﻘﻴﺖ ﺷﻤﺎ ﺩﺭ ﺁﺯﻣﻮﻥ ﻛﺎﺭﺷﻨﺎﺳﻲ ﺍﺭﺷﺪ ﺑﺎﺷﺪ‪.‬‬

‫ﻣﻮﻟﻒ‬
‫در ﺟﺪول ذﯾﻞ دروس ﺑﻪ ﺳﺮﻓﺼﻠﻬﺎي ﻣﻬﻢ آن ﻃﺒﻘﻪ ﺑﻨﺪي ﺷﺪه و ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ ﮐﻪ در ﻫﺮ ﺳﺎل از ﻫﺮ ﻣﺒﺤﺚ ﭼﻨﺪ ﺗﺴﺖ ﺳﻮال‬
‫ﺷﺪه اﺳﺖ و داﻧﺸﺠﻮي ﻣﺤﺘﺮم ﻣﯽ ﺗﻮاﻧﺪ زﻣﺎن ﺑﺎﻗﯿﻤﺎﻧﺪه ﺗﺎ ﮐﻨﮑﻮر را ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻫﻤﯿﺖ ﻣﺒﺎﺣﺚ ﻣﺪﯾﺮﯾﺖ ﻧﻤﺎﯾﺪ‪.‬‬

‫ﺩﺭﺱ‪ :‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﻫﺎ‬ ‫ﺭﺷﺘﻪ‪ :‬ﻣﻬﻨﺪﺳﻲ ﮐﺎﻣﭙﻴﻮﺗﺮ‬


‫ﻧﺴﺒﺖ‬ ‫ﻣﺠﻤﻮﻉ ‪۵‬‬ ‫‪۱۳۸۹‬‬ ‫‪۱۳۸۸‬‬ ‫‪۱۳۸۷‬‬ ‫‪۱۳۸۶‬‬ ‫‪۱۳۸۵‬‬
‫ﻣﺒﺤﺚ‬ ‫ﺭﺩﻳﻒ‬
‫ﺍﺯﮐﻞ‬ ‫ﺳﺎﻝ‬ ‫ﺗﻌﺪﺍﺩ ﺗﺴﺖ‬ ‫ﺗﻌﺪﺍﺩ ﺗﺴﺖ‬ ‫ﺗﻌﺪﺍﺩ ﺗﺴﺖ‬ ‫ﺗﻌﺪﺍﺩ ﺗﺴﺖ‬ ‫ﺗﻌﺪﺍﺩ ﺗﺴﺖ‬
‫‪29%‬‬ ‫‪10‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫آﻧﺎﻟﯿﺰ اﻟﮕﻮرﯾﺘﻢ ﻫﺎ و رواﺑﻂ ﺑﺎزﮔﺸﺘﯽ‬ ‫‪1‬‬
‫‪6%‬‬ ‫‪2‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫آراﯾﻪ ﻫﺎ و ﻣﺎﺗﺮﯾﺲ ﻫﺎ‬ ‫‪2‬‬
‫‪0%‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫ﭘﺸﺘﻪ و ﺻﻒ‬ ‫‪3‬‬
‫‪3%‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪي‬ ‫‪4‬‬
‫‪50%‬‬ ‫‪17‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪6‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫درﺧﺖ ﻫﺎ‬ ‫‪5‬‬
‫‪0%‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫ﮔﺮاف ﻫﺎ‬ ‫‪6‬‬
‫‪3%‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪Hash‬‬ ‫‪7‬‬
‫‪9%‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫روش ﻫﺎي ﻣﺮﺗﺐ ﺳﺎزي‬ ‫‪8‬‬
‫‪100%‬‬ ‫‪34‬‬ ‫‪7‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪6‬‬ ‫‪6‬‬ ‫ﺟﻤﻊ‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۱‬‬

‫ﺭﻭﺵ ﺍﺻﻠﻲ ﺑﺮﺍﻱ ﺣﻞ ﻣﺴﺎﺋﻞ ﺑﺎﺯﮔﺸﺘﻲ‬

‫ﺍﻳﻦ ﺭﻭﺵ ﺗﻜﻨﻴﻜﻲ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ ﺭﻭﺍﺑﻂ ﺑﺎﺯﮔﺸﺘﻲ ﺑﻪ ﻓﺮﻡ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫‪ænö‬‬
‫) ‪T ( n ) = aT ç ÷ + f ( n‬‬
‫‪èbø‬‬
‫ﮐﻪ ﺩﺭ ﺁﻥ‪:‬‬
‫‪b³2‬‬ ‫‪ a ³1 ü‬ﻭ‬

‫) ‪ f ( n‬ﻧﺸﺎﻧﮕﺮ ﺯﻣﺎﻥ ﺍﺟﺮﺍﻱ ﺍﻟﮕﻮﺭﻳﺘﻤﻲ ﺍﺳﺖ ﮐﻪ ﺯﻣﺎﻥ ﺣﻞ ﻳﮏ ﻧﻤﻮﻧﻪ ﻣﺴﺌﻠﻪ ﺑﻪ ﻃﻮﻝ ‪ n‬ﺩﺭ ﺁﻥ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ ﺯﻣﺎﻥ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﻱ‬ ‫‪ü‬‬
‫‪ænö‬‬
‫‪ a‬ﻣﺴﺌﻠﻪ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ÷ ‪T ç‬‬ ‫ﺣﻞ‬
‫‪èbø‬‬

‫‪ ü‬ﺣﺎﻻﺕ ‪ éê ùú ،‬ﻳﺎ ‪ êê úú‬ﻳﻜﺴﺎﻥ ﻫﺴﺘﻨﺪ‪.‬‬


‫‪n‬‬ ‫‪n n‬‬
‫‪ëbû êbú b‬‬

‫‪a‬‬
‫ﻗﻀﻴﻪ ﺍﺻﻠﯽ‪:‬ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ ﺭﺍﺑﻄﻪ ﺑﺎﺯﮔﺸﺘﻲ ﺑﺎ ﻣﻘﺎﻳﺴﻪ ) ‪ f ( n‬ﻭ ‪ n log b‬ﺑﻪ ﻳﻜﻲ ﺍﺯ ﺣﺎﻟﺘﻬﺎﻱ ﺯﻳﺮ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﺷﻮﺩ‪:‬‬
‫‪(I) :‬‬ ‫(‬
‫‪if f ( n ) = O n log b a -e‬‬ ‫)‬ ‫‪e> 0‬‬
‫‪¾¾¾¾¾¾¾¾¾® T ( n ) = q n log b a‬‬ ‫(‬ ‫)‬
‫‪a‬‬
‫)ﺍﮔﺮ ‪ n log b‬ﺑﺰﺭﮔﺘﺮ ﺑﺎﺷﺪ (‬ ‫·‬

‫‪( II ) :‬‬ ‫(‬


‫) ‪if f ( n ) = q n log b a ( log n‬‬
‫‪k‬‬
‫)‬ ‫‪k ³0‬‬
‫(‬
‫) ‪¾¾¾¾¾¾¾¾¾® T ( n ) = q n log b a ( log n‬‬
‫‪k +1‬‬
‫)‬
‫‪a‬‬
‫)ﺍﮔﺮ ) ‪ f ( n‬ﻭ ‪ n log b‬ﺻﺮﻑ ﻧﻈﺮ ﺍﺯ ﻳﻚ ﺿﺮﻳﺐ ‪ ( log n )k‬ﻣﺴﺎﻭﻱ ﺑﺎﺷﻨﺪ(‬ ‫·‬

‫‪( III ) :‬‬ ‫(‬


‫‪if f ( n ) = W n log b a +e‬‬ ‫)‬ ‫) ) ‪¾¾¾¾¾¾¾¾¾® T ( n ) = q ( f ( n‬‬
‫‪e> 0‬‬

‫)ﺍﮔﺮ ) ‪ f ( n‬ﺑﺰﺭﮔﺘﺮ ﺑﺎﺷﺪ(‬ ‫·‬

‫ﺩﻗﺖ ﻛﻨﻴﺪ‪:‬‬
‫‪log ab‬‬
‫‪ ، n‬ﻫﺪﻑ ﺍﺯ ﺫﻛﺮ ﺛﺎﺑﺖ ‪ e‬ﺁﻥ ﺍﺳﺖ ﻛﻪ ﻧﺸﺎﻥ ﺩﻫﻴﻢ ﺗﺎﺑﻊ ) ‪ f ( n‬ﺑﺎﻳﺪ ﺑﺼﻮﺭﺕ ﭼﻨﺪ ﺟﻤﻠﻪ ﺍﻱ ﻛﻮﭼﻜﺘﺮ )ﺣﺎﻟﺖ ) ‪( ( I‬‬ ‫ﻫﻨﮕﺎﻡ ﻣﻘﺎﻳﺴﻪ ﺗﺎﺑﻊ ) ‪ f ( n‬ﻭ‬
‫ﻳﺎ ﺑﺰﺭﮔﺘﺮ)ﺣﺎﻟﺖ ) ‪ ( ( III‬ﺍﺯ ‪ n log b‬ﺑﺎﺷﺪ ‪ .‬ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﻲ ﻛﻪ ﻣﺮﺗﺒﻪ ﺑﺰﺭﮔﻲ ﻳﺎ ﻛﻮﭼﻜﻲ ﺑﺎﻳﺪ ﺍﺯ ‪ n e‬ﺑﺎﺷﺪ ﻭ ﻧﻪ ﺍﺯ ﻣﺮﺗﺒﻪ ﻫﺎﻱ ‪ log n‬ﻳﺎ ‪ cos n‬ﻳﺎ ‪ ...‬ﭼﺮﺍ ﻛﻪ‬
‫‪a‬‬

‫ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻀﻴﻪ ﺍﺻﻠﻲ ﺻﺤﻴﺢ ﻧﻴﺴﺖ‪.‬‬

‫ﻣﺜﺎﻝ ‪ :۱‬ﺟﻮﺍﺏ ﺭﺍﺑﻄﻪ ﺑﺎﺯﮔﺸﺘﻲ ﺯﻳﺮ ﺭﺍ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﮐﻨﻴﺪ‪.‬‬


‫‪ænö‬‬
‫‪T(n) = 9T ç ÷ + n‬‬
‫‪è3ø‬‬
‫ﺣﻞ ‪:‬‬
‫‪ìï f(n) = n‬‬ ‫‪case I : e > 0‬‬ ‫‪a‬‬

‫‪í logab‬‬ ‫¾¾¾¾¾¾¾¾¾¾‬ ‫) ‪® T(n) = θ(n logb ) = θ(n 2‬‬


‫‪ïîn‬‬
‫‪9‬‬
‫‪= n log3 = n 2‬‬ ‫‪f ( n ) =O n logba-ε‬‬‫(‬ ‫)‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۲‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﻣﺜﺎﻝ‪ :۲‬ﺟﻮﺍﺏ ﺭﺍﺑﻄﻪ ﺑﺎﺯﮔﺸﺘﻲ ﺯﻳﺮ ﺭﺍ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﮐﻨﻴﺪ‪.‬‬


‫‪æ 2n ö‬‬
‫‪T(n) = T ç ÷ +1‬‬
‫‪è 3 ø‬‬
‫ﺣﻞ ‪:‬‬
‫‪ì f(n) = 1‬‬
‫‪ï‬‬
‫‪í a‬‬
‫‪ïîn‬‬ ‫‪log b‬‬
‫‪log13‬‬
‫‪= n 2 = n0 = 1‬‬
‫¾¾¾¾¾¾¾¾¾¾‬
‫‪case II : k=0‬‬
‫‪log ba‬‬ ‫‪k‬‬
‫(‬
‫) ‪® T(n) = θ n logba ( logn‬‬
‫‪f(n)=θ n‬‬ ‫) ‪( logn‬‬ ‫)‬ ‫(‬ ‫‪k‬‬
‫) ‪) = θ ( logn‬‬
‫ﻣﺜﺎﻝ ‪ :۳‬ﺟﻮﺍﺏ ﺭﺍﺑﻄﻪ ﺑﺎﺯﮔﺸﺘﻲ ﺯﻳﺮ ﺭﺍ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﮐﻨﻴﺪ‪.‬‬
‫‪ænö‬‬
‫‪T(n) = 3T ç ÷ + nlogn‬‬
‫‪è4ø‬‬
‫ﺣﻞ ‪:‬‬

‫‪ìïf(n) = nlogn‬‬
‫‪í logab‬‬
‫‪case III : e > 0‬‬
‫¾¾¾¾¾¾¾¾¾¾‬ ‫)‪® T(n) = θ ( f(n) ) = θ(nlogn‬‬
‫¾‬
‫‪ïî n‬‬
‫‪3‬‬
‫‪= n log4‬‬ ‫‪f ( n ) = W n logba+ε‬‬ ‫(‬ ‫)‬

‫‪æ n‬‬ ‫‪ö‬‬


‫‪ T ( n ) = 4T çç‬ﻛﺪﺍﻡ ﺍﺳﺖ؟ )ﺳﺮﺍﺳﺮﻱ ‪(۸۸‬‬ ‫‪2‬‬
‫‪÷÷ + log n‬‬ ‫ﻣﺜﺎﻝ‪ :‬ﺟﻮﺍﺏ ﺭﺍﺑﻄﻪﻱ ﺑﺎﺯﮔﺸﺘﻲ‬
‫‪è 3‬‬ ‫‪ø‬‬
‫(‬
‫‪Q log 2 n log log n‬‬ ‫‪) (۴ Q ( log3 n ) (۳ Q ( log2 n ) (۲ Q ( n ) (۱‬‬
‫ﺣﻞ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺻﺤﻴﺢ ﺍﺳﺖ‪.‬‬
‫ﺍﺑﺘﺪﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﻚ ﺗﻐﻴﻴﺮ ﻣﺘﻐﻴﺮ ﻓﺮﻡ ﺗﺎﺑﻊ ﺭﺍ ﺑﻪ ﺷﻜﻞ ﻗﺎﺑﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ﺍﺻﻠﻲ ﺩﺭ ﻣﻲ ﺁﻭﺭﻳﻢ ‪:‬‬
‫‪æ nö‬‬ ‫‪æ m2 ö‬‬ ‫‪æmö‬‬
‫‪T ( n ) = 4T çç‬‬ ‫÷÷‬ ‫‪+‬‬ ‫‪log‬‬ ‫‪2‬‬
‫‪n‬‬ ‫‪n=2m‬‬
‫¾¾¾‬ ‫®‬ ‫‪T‬‬ ‫‪2‬‬ ‫‪m‬‬
‫=‬ ‫) (‬
‫‪4T‬‬ ‫‪ç 2 ÷ + m ¾¾¾¾® S ( m ) = 4S ç ÷ + m‬‬
‫‪2‬‬ ‫) ‪s(m)=T(2m‬‬ ‫‪2‬‬

‫‪è 3 ø‬‬ ‫‪è ø‬‬ ‫‪è2ø‬‬


‫ﺣﺎﻝ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺑﺮﺍﻱ ﺭﺍﺑﻄﻪ ﺑﺪﺳﺖ ﺁﻣﺪﻩ ﺍﺯ ﺣﺎﻟﺖ ‪ II‬ﻗﻀﻴﻪ ﺍﺻﻠﻲ ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ ‪:‬‬
‫‪ìï f(m) = m 2‬‬
‫‪í logab‬‬
‫‪ïîm‬‬
‫‪4‬‬
‫‪= m log2 = m 2‬‬
‫¾¾¾¾¾¾¾‬
‫‪case II: for k=0‬‬
‫(‬
‫‪f ( m ) =θ m‬‬
‫‪log ba‬‬ ‫) ‪k ® T ( m ) = θ m ( logm‬‬
‫) ‪( logm‬‬ ‫)‬
‫‪2‬‬
‫(‬ ‫‪k+1‬‬
‫)‬
‫(‬
‫‪= θ m 2 logm‬‬ ‫)‬
‫ﮐﻪ ﺑﺎ ﺗﺒﺪﻳﻞ ﻣﻌﮑﻮﺱ ﺟﻮﺍﺏ ﺭﺍﺑﻄﻪ ﺑﺎﺯﮔﺸﺘﻲ ﺍﻭﻟﻴﻪ ﺑﺼﻮﺭﺕ ﺯﻳﺮ ﺑﺪﺳﺖ ﻣﻲ ﺁﻳﺪ ‪:‬‬
‫(‬ ‫)‬
‫¾¾¾¾¾¾¾¾¾¾ ‪T ( m ) = θ m 2 logm‬‬ ‫‪® T ( n ) = θ log 2 nloglogn‬‬ ‫(‬ ‫)‬
‫‪m‬‬
‫‪2 =n ® m=logn‬‬

‫ﺩﻗﺖ ﻛﻨﻴﺪ ‪:‬‬


‫‪1‬‬ ‫‪m‬‬
‫‪m‬‬ ‫‪æ m2 ö‬‬ ‫‪æ nö‬‬
‫ﻭ ﺍﺯ ﺛﺎﺑﺖ ‪ ۳‬ﺻﺮﻑ‬ ‫‪n =n =22‬‬
‫‪2‬‬ ‫‪ n = 2‬ﺩﺭ ﻧﻈﺮﮔﺮﻓﺘﻪ ﺑﻮﺩﻳﻢ ﺩﺭ ﻧﺘﻴﺠﻪ‬ ‫‪ T çç‬ﺑﻪ ÷ ‪ T ç 2‬ﺍﺯ ﺁﻧﺠﺎﺋﻴﻜﻪ‬ ‫ﻫﻨﮕﺎﻡ ﺗﺒﺪﻳﻞ ÷÷‬
‫‪è ø‬‬ ‫‪è 3 ø‬‬
‫ﻧﻈﺮ ﻛﺮﺩﻳﻢ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۳‬‬

‫ﺩﺭﺧﺖ‪:‬‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻱ ﻏﻴﺮ ﺧﻄﻲ‬ ‫·‬
‫ﻧﻤﺎﻳﺶ ﺩﺭﺧﺖ‪ :‬ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ‪ ،‬ﺁﺭﺍﻳﻪ‬ ‫·‬
‫ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﺩﻟﺨﻮﺍﻩ ﺑﺎ ‪ n‬ﮔﺮﻩ ﻭ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺩﺍﺭﻳﻢ‪:‬‬
‫ﺍﺗﺼﺎﻻﺕ ﺧﺎﻟﻲ‬ ‫ﻛﻞ ﺍﺗﺼﺎﻻﺕ ﺍﺗﺼﺎﻻﺕ ﭘﺮ‬ ‫‪۱‬ـ‬
‫)‪nk - ( n - 1‬‬ ‫‪n -1‬‬ ‫‪nk‬‬
‫‪n +1‬‬ ‫‪n -1‬‬ ‫‪2n‬‬ ‫)‪: ( k = 2‬‬ ‫ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ‬

‫‪n = n k + n k -1 + . . . + n 2 + n1 + n 0‬‬ ‫ﺗﻌﺪﺍﺩ ﻛﻞ ﮔﺮﻩﻫﺎ‪:‬‬ ‫‪۲‬ـ‬


‫‪n = n 2 + n1 + n 0‬‬ ‫)‪: ( k = 2‬‬ ‫ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ‬

‫‪ -۳‬ﺗﻌﺪﺍﺩ ﺑﺮﮒﻫﺎﻱ ﺩﺭﺧﺖ‪:‬‬


‫‪n 0 = ( k - 1) n k + ( k - 2 ) n k -1 + . . . + 2n 3 + n 2 + 1‬‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪n 0= n 2 + 1‬‬
‫ﻧﺘﻴﺠﻪ ‪ :‬ﺗﻌﺪﺍﺩ ﺑﺮﮒﻫﺎ ﺩﺭ ﻫﺮ ﺩﺭﺧﺖ ﻣﺴﺘﻘﻞ ﺍﺯ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺍﺳﺖ‪.‬‬
‫‪۴‬ـ ﻛﺮﺍﻥ ﭘﺎﺋﻴﻦ ﻭ ﺑﺎﻻﻱ ﺗﻌﺪﺍﺩ ﺑﺮﮔﻬﺎ‪:‬‬
‫ﺍﻟﻒ (ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺩﺭﺟﻪ ﻭ ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﻫﺎﻱ ﺩﺭﺧﺖ‪:‬‬
‫‪ê nk - ( n - 1) ú‬‬
‫‪1 £ n0 £ ê‬‬ ‫‪ú‬‬
‫‪êë‬‬ ‫‪k‬‬ ‫‪úû‬‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪ê n + 1ú‬‬
‫‪1 £ n0 £ ê‬‬ ‫‪ú‬‬
‫‪ë 2 û‬‬
‫ﺏ(ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺩﺭﺟﻪ ﻭ ﻋﻤﻖ ﺩﺭﺧﺖ‪:‬‬
‫‪1 £ n 0 £ k h -1‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪1 £ n0 £ k‬‬ ‫‪h‬‬
‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪1 £ n 0 £ 2h -1‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪1 £ n0 £ 2‬‬ ‫‪h‬‬
‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬

‫‪ ۶‬ـ ﻛﺮﺍﻥ ﭘﺎﺋﻴﻦ ﻭ ﺑﺎﻻﻱ ﺍﺭﺗﻔﺎﻉ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ‪:‬‬
‫‪ê log n ( k -1) ú + 1 £ h £ n‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪êë k‬‬ ‫‪úû‬‬
‫‪ê n ( k -1) ú £ h £ n - 1‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪êë log k‬‬ ‫‪úû‬‬ ‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۴‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬


‫‪ê‬‬ ‫‪nú‬‬
‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪êë log 2 úû + 1 £ h £ n‬‬
‫‪ê log n ú £ h £ n - 1‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪ëê‬‬ ‫‪2 ûú‬‬

‫‪ ۷‬ـ ﻛﺮﺍﻥ ﭘﺎﺋﻴﻦ ﻭ ﺑﺎﻻﻱ ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪:h‬‬
‫‪h‬‬
‫‪1- k‬‬
‫‪h£n£‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪1- k‬‬
‫‪1 - k h +1‬‬
‫‪h +1 £ n £‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪k -1‬‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪h‬‬
‫‪h £ n £ 2 -1‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬ ‫‪.‬‬
‫‪h + 1 £ n £ 2h +1 - 1‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪ ۸‬ـ ﻛﺮﺍﻥ ﭘﺎﺋﻴﻦ ﻭ ﺑﺎﻻﻱ ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﺩﺭ ﺳﻄﺢ ‪ i‬ﺍﻡ‪ m) :‬ﺗﻌﺪﺍﺩ ﮔﺮﻩ(‬
‫‪i -1‬‬
‫‪1£ m £ k‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪1 £ m £ ki‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪i -1‬‬
‫‪1£ m £ 2‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪1 £ m £ 2i‬‬ ‫)ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪ ۹‬ـ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻔﺎﻭﺕ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪1 æ 2n ö‬‬ ‫‪4n‬‬ ‫‪æ‬‬ ‫‪æ 1 öö‬‬
‫= ‪ = å bk bn -1-k‬ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻔﺎﻭﺕ ﺑﺎ ‪ n‬ﮔﺮﻩ‬ ‫=÷ ‪ç‬‬ ‫÷ ÷ ‪ç1 + O ç‬‬
‫‪n +1 è n ø‬‬ ‫‪3‬‬
‫‪è‬‬ ‫‪è n øø‬‬
‫‪pn 2‬‬
‫‪ ۱۰‬ـ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪) : n - 1‬ﺣﺘﻤﺎﹰ ﻭ ﺣﺘﻤﺎﹰ ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪2n -1‬‬
‫‪ ۱۱‬ـ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻤﺎﻳﺰ ﻣﺤﺾ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪æ 2k ö‬‬
‫÷ ‪ç‬‬
‫‪k‬‬
‫‪n = 2k + 1 Þ è ø‬‬
‫‪k +1‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۵‬‬

‫ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻭ ﭘﺮ ﺑﺎ ‪ n‬ﮔﺮﻩ ﻭ ﺍﺭﺗﻔﺎﻉ ‪:h‬‬


‫‪ ۱‬ـ ﺍﺭﺗﻔﺎﻉ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻳﺎ ﭘﺮ ﺑﺎ ‪ n‬ﮔﺮﻩ‪:‬‬
‫‪n ( k -1) ú‬‬
‫‪h = êêlog k‬‬ ‫‪úû + 1‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪ë‬‬
‫‪n ( k -1) ú‬‬
‫‪h = êêlog k‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪ë‬‬ ‫‪ûú‬‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪h = êêlog n2 úú + 1‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ(‬
‫‪ë‬‬ ‫‪û‬‬
‫‪h = êêlog n2 úú‬‬ ‫)ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪ë‬‬ ‫‪û‬‬
‫‪ ۲‬ـ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻭ ﭘﺮ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪:h‬‬
‫ﺩﺭﺧﺖ ﻛﺎﻣﻞ‬ ‫ﺩﺭﺧﺖ ﭘﺮ‬
‫‪1 - k h -1‬‬ ‫‪1 - kh‬‬ ‫‪1 - kh‬‬ ‫ﺳﻄﺢ ﺭﻳﺸﻪ ﻳﻚ‬
‫‪+1 £ n £‬‬ ‫=‪n‬‬
‫‪1- k‬‬ ‫‪1- k‬‬ ‫‪1- k‬‬
‫‪1 - kh‬‬ ‫‪1 - k h +1‬‬ ‫‪1 - k h +1‬‬ ‫ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ‬
‫‪+1 £ n £‬‬ ‫=‪n‬‬
‫‪1- k‬‬ ‫‪1- k‬‬ ‫‪1- k‬‬

‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬


‫ﺩﺭﺧﺖ ﻛﺎﻣﻞ‬ ‫ﺩﺭﺧﺖ ﭘﺮ‬
‫‪2h -1 £ n £ 2h - 1‬‬ ‫‪n = 2h - 1‬‬ ‫ﺳﻄﺢ ﺭﻳﺸﻪ ﻳﻚ‬
‫‪2h £ n £ 2h +1 - 1‬‬ ‫‪n = 2h +1 - 1‬‬ ‫ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ‬

‫‪ ۳‬ـ ﺗﻌﺪﺍﺩ ﺑﺮﮒﻫﺎﻱ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻳﺎ ﭘﺮ‪:‬‬


‫‪ê nk - ( n - 1) ú‬‬
‫‪n0 = ê‬‬ ‫‪ú‬‬
‫‪ëê‬‬ ‫‪k‬‬ ‫‪ûú‬‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪ê n + 1ú é n ù‬‬
‫‪n0 = ê‬‬ ‫‪ú=ê ú‬‬
‫‪ë 2 û ê2ú‬‬
‫‪ ۴‬ـ ﺷﻤﺎﺭﺓ ﺍﻧﺪﻳﺲ ﺑﺮﮒﻫﺎﻱ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻳﺎ ﭘﺮ‪:‬‬
‫‪é n -1ù‬‬ ‫‪é n -1ù‬‬
‫‪ê k ú + 1 , ê k ú + 2, . . , n‬‬
‫‪ê‬‬ ‫‪ú‬‬ ‫‪ê‬‬ ‫‪ú‬‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬
‫‪ênú‬‬ ‫‪ênú‬‬
‫‪ê 2 ú + 1, ê 2 ú + 2 , . . . , n‬‬
‫‪ë û‬‬ ‫‪ë û‬‬
‫‪۵‬ـ ﺍﻧﺪﻳﺲ ﭘﺪﺭ ﮔﺮﻩﺍﻱ ‪ i‬ﺍﻡ ﺩﺭ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻳﺎ ﭘﺮ‪:‬‬
‫‪é i -1ù‬‬
‫‪parent ( i ) = ê‬‬ ‫‪ú‬‬
‫‪ê k ú‬‬ ‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۶‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪ -۶‬ﺍﻧﺪﻳﺲ ﻓﺮﺯﻧﺪﺍﻥ ﮔﺮﻩﻱ ‪ i‬ﺍﻡ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻳﺎ ﭘﺮ‪:‬‬


‫‪. . . , k i -1 , k i , k i +1‬‬
‫‪‬‬ ‫‪‬‬ ‫‪‬‬
‫‪ k‬ﺗﺎ‬
‫ﺣﺎﻟﺖ ﺧﺎﺹ‪ :‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ) ‪: ( k = 2‬‬

‫ﺍﻧﺪﻳﺲ ﭘﺪﺭ ﮔﺮﻩﻱ ‪ i‬ﺍﻡ‪:‬‬


‫‪êiú‬‬
‫‪Parent ( i ) = ê ú‬‬
‫‪ë2û‬‬
‫ﺍﻧﺪﻳﺲ ﻓﺮﺯﻧﺪﺍﻥ ﮔﺮﻩﻱ ‪ i‬ﺍﻡ‪:‬‬
‫‪Leftchild ( i ) = 2i‬‬
‫‪Rightchild ( i ) = 2i + 1‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۷‬‬

‫ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺑﺎ ‪ n‬ﮔﺮﻩ‪:‬‬


‫‪ ۱‬ـ ﻫﺮ ﻳﻚ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ ،postorder ،preorder ،inorder‬ﺯﻣﺎﻥ ) ‪ q ( n‬ﺻﺮﻑ ﻣﻲﻛﻨﻨﺪ‪.‬‬

‫ﻧﻜﺘﻪ ‪ :‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ﺩﺭﺧﺖ‪ ،‬ﻫﺮ ﮔﺮﻩ ﺣﺪﺍﻗﻞ ﻳﻚﺑﺎﺭ ﺑﺮﺭﺳﻲ ﻣﻲﺷﻮﺩ‪ ،‬ﺍﻟﮕﻮﺭﻳﺘﻤﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ ﻛﻪ ﻳﻚ ﺩﺭﺧﺖ ﺭﺍ ﺩﺭ ﺯﻣﺎﻥ ﻛﻤﺘﺮ ﺍﺯ‬
‫) ‪ q ( n‬ﭘﻴﻤﺎﻳﺶ ﻛﻨﺪ‪.‬‬
‫‪ìinorder‬‬ ‫‪ìinorder‬‬ ‫‪ìinorder‬‬
‫‪ í‬ﻣﻲﺗﻮﺍﻥ ﻫﺮ ﺩﺭﺧﺖ ﺩﻟﺨﻮﺍﻩ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬ ‫‪،í‬‬ ‫‪،í‬‬ ‫‪ ۲‬ـ ﺑﺎ ﻫﺮ ﻳﻚ ﺍﺯ ﺯﻭﺝ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ‬
‫‪îlevelorder îpostorder îpreorder‬‬
‫ﻛﻪ ﺑﺮﺍﻱ ﺍﻳﻦ ﻣﻨﻈﻮﺭ ﺍﺑﺘﺪﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻫﺮ ﻳﻚ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ postorder ،preorder‬ﻭ ‪ levelorder‬ﻣﻲﺗﻮﺍﻥ ﺭﻳﺸﻪ ﺭﺍ ﻣﺸﺨﺺ ﻛﺮﺩ‪ .‬ﺳﭙﺲ ﺑﺎ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﺯﻳﺮ ﺩﺭﺧﺖﻫﺎﻱ ﭼﭗ ﻭ ﺭﺍﺳﺖ ﺭﻳﺸﻪ ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ‪ .‬ﺍﻳﻦ ﺭﻭﻧﺪ ﻣﺠﺪﺩﺍﹰ ﺑﻪﺻﻮﺭﺕ ﺑﺎﺯﮔﺸﺘﻲ ﺑﺮﺍﻱ ﺯﻳﺮ ﺩﺭﺧﺖﻫﺎﻱ‬
‫ﭼﭗ ﻭ ﺭﺍﺳﺖ ﺭﻳﺸﻪ ﺗﻜﺮﺍﺭ ﻣﻲﺷﻮﺩ‪.‬‬
‫‪ ۳‬ـ ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎﺷﺪ‪ ،‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺷﻜﻞ ﺩﺭﺧﺖ ﻣﺸﺨﺺ ﺍﺳﺖ‪ ،‬ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺸﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ ۴‬ـ ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺶ ‪ postorder ،preorder‬ﻭ ‪ levelorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ ۵‬ـ ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﻛﻠﻴﺪﻫﺎ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺑﺮﻣﻲﮔﺮﺩﺍﻧﺪ‪.‬‬
‫‪ ۶‬ـ ﺍﺯ ﺁﻧﺠﺎﻛﻪ ‪ Heap‬ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺍﺳﺖ‪ ،‬ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺸﻲ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ ۷‬ـ ﻫﻴﭻ ﭘﻴﻤﺎﻳﺸﻲ ﺍﺯ ‪ Heap‬ﺍﻟﺰﺍﻣﺎﹰ ﮔﺮﻩﻫﺎ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻣﺮﺗﺐ ﺑﺮﻧﻤﻲﮔﺮﺩﺍﻧﺪ‪.‬‬
‫‪ ۸‬ـ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ ،preorder‬ﺭﻳﺸﻪ ﺍﻭﻟﻴﻦ ﻭ ﺳﻤﺖ ﺭﺍﺳﺖﺗﺮﻳﻦ ﺑﺮﮒ‪ ،‬ﺁﺧﺮﻳﻦ ﮔﺮﻩﺍﻱ ﺍﺳﺖ ﻛﻪ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ ،postorder‬ﺳﻤﺖ ﭼﭗﺗﺮﻳﻦ ﺑﺮﮒ ﺍﻭﻟﻴﻦ ﻭ ﺭﻳﺸﻪ ﺁﺧﺮﻳﻦ ﮔﺮﻩﺍﻱ ﺍﺳﺖ ﻛﻪ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫‪ ۹‬ـ ﺩﺭ ﺷﺮﺍﻳﻄﻲ ﻛﻪ ﺩﺭ ﻫﺮ ﺳﻄﺢ ﻳﻚ ﺩﺭﺧﺖ ﺗﻨﻬﺎ ﻳﻚ ﮔﺮﻩ ﺑﺎﺷﺪ‪ ،‬ﻳﻌﻨﻲ ﺍﺭﺗﻔﺎﻉ ﻳﻚ ﺩﺭﺧﺖ ﺑﺎ ‪ n‬ﮔﺮﻩ‪ n ،‬ﺑﺎﺷﺪ‪ ،‬ﺁﻥﮔﺎﻩ ﺍﻭﻟﻴﻦ ﮔﺮﻩﺍﻱ ﻛﻪ ﺩﺭ‬
‫ﭘﻴﻤﺎﻳﺶ ‪ Postorder‬ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ ﺑﺎ ﺁﺧﺮﻳﻦ ﮔﺮﻩﺍﻱ ﻛﻪ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ‪ ،‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ‬
‫‪ ۱۰‬ـ ﺗﺮﺗﻴﺐ ﻣﻼﻗﺎﺕ ﺑﺮﮒﻫﺎ ﺩﺭ ﻫﺮ ﺳﻪ ﭘﻴﻤﺎﻳﺶ ‪ inorder ،Preorder‬ﻭ ‪ Postorder‬ﻳﻜﻲ ﺍﺳﺖ‪.‬‬
‫‪n‬‬
‫‪ ۱۱‬ـ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﻛﻪ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﻭ ‪ Postorder‬ﺁﻥﻫﺎ ﺑﺮﺍﺑﺮ ﺑﺎ ﺭﺷﺘﻪﻫﺎﻱ ﻣﺸﺨﺺ ﺑﺎﺷﺪ‪ ،‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ ‪ 2 1‬ﻛﻪ ﺩﺭ ﺁﻥ‬
‫‪ n1‬ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﻫﺎﻱ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺩﺭ ﺩﺭﺧﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﻱ ﺑﻪﺩﺳﺖ ﺁﻭﺭﺩﻥ ﮔﺮﻩﻫﺎﻱ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺑﺪﻳﻦ ﺻﻮﺭﺕ ﻋﻤﻞ ﻣﻲﻛﻨﻴﻢ‪ :‬ﺍﺯ ﺳﻤﺖ ﭼﭗ ﻳﻜﻲ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎ )ﺑﺮﺍﻱ ﻣﺜﺎﻝ ‪ (Preorder‬ﺣﺮﻛﺖ‬
‫ﻣﻲﻛﻨﻴﻢ ﻭ ﻫﺮ ﺗﺮﺗﻴﺐ ﺩﻭﺗﺎﻳﻲ ﺍﺯ ﮔﺮﻩﻫﺎ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ )ﺗﺮﺗﻴﺐﻫﺎﻱ ﺩﻭﺗﺎﻳﻲ ﺩﻗﻴﻘﺎﹰ ﻛﻨﺎﺭ ﻫﻢ( ﻭ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ﺩﻳﮕﺮ ﺑﺮﺭﺳﻲ ﻣﻲﻛﻨﻴﻢ‪ ،‬ﺍﮔﺮ ﻫﻤﻴﻦ‬
‫ﺗﺮﺗﻴﺐ ﺩﻭﺗﺎﻳﻲ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻣﻌﻜﻮﺱ ﻋﻴﻨﺎﹰ ﻣﺸﺎﻫﺪﻩ ﻛﺮﺩﻳﻢ‪ ،‬ﮔﺮﺓ ﺍﻭﻝ ﺗﺮﺗﻴﺐ ﺍﻧﺘﺨﺎﺑﻲ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺍﺳﺖ‪.‬‬
‫ﻫﻢﭼﻨﻴﻦ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺑﺮﮒﻫﺎ‪ ،‬ﺑﺎ ﺩﻭ ﭘﻴﻤﺎﻳﺶ ‪ preorder‬ﻭ ‪ postorder‬ﺍﺑﺘﺪﺍ ﮔﺮﻩﻫﺎﻱ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺳﭙﺲ‪ ،‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ‬
‫ﺗﺮﺗﻴﺐ ﻣﻼﻗﺎﺕ ﺑﺮﮒﻫﺎ ﺩﺭ ﺩﻭ ﭘﻴﻤﺎﻳﺶ ﻳﻜﻲ ﺍﺳﺖ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻭ ﭘﻴﻤﺎﻳﺶ ﺳﻤﺖ ﺭﺍﺳﺖﺗﺮﻳﻦ ﻭ ﺳﻤﺖ ﭼﭗﺗﺮﻳﻦ ﺑﺮﮒ ﺭﺍ ﻣﺸﺨﺺ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫ﮔﺮﻩﻫﺎﻱ ﻗﺒﻞ ﺍﺯ ﺳﻤﺖ ﭼﭗﺗﺮﻳﻦ ﺑﺮﮒ )ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ (Preorder‬ﻭ ﮔﺮﻩﻫﺎﻱ ﺑﻌﺪ ﺍﺯ ﺳﻤﺖ ﺭﺍﺳﺖﺗﺮﻳﻦ ﺑﺮﮒ )ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ (Postorder‬ﻗﻄﻌﺎﹰ ﺑﺮﮒ‬
‫ﻧﻴﺴﺘﻨﺪ‪ .‬ﻟﺬﺍ ﺑﻪ ﺭﺍﺣﺘﻲ ﺑﺮﮒﻫﺎ ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۸‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪(BST) :‬‬


‫ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮ ﺩﻭﺩﻭﻳﻲ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺁﻥ ﻛﻠﻴﺪ ﻫﺮ ﮔﺮﻩ ﺍﺯ ﺗﻤﺎﻡ ﻛﻠﻴﺪﻫﺎﻱ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ ﺑﺰﺭﮒﺗﺮ ﻭ ﺍﺯ ﺗﻤﺎﻡ ﻛﻠﻴﺪﻫﺎﻱ ﺯﻳﺮ‬
‫ﺩﺭﺧﺖ ﺭﺍﺳﺖ ﻛﻮﭼﻚﺗﺮ ﺍﺳﺖ‪.‬‬
‫ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺶ ‪ Levelorder ،Postorder ،Preorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﻫﺮ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻛﻠﻴﺪﻫﺎ ﺭﺍ ﻣﺮﺗﺐ ﺑﺮ ﻣﻲﮔﺮﺩﺍﻧﺪ‪.‬‬
‫ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻔﺎﻭﺕ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺎ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻔﺎﻭﺕ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ) ‪ bn‬ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺩﻭﺩﻭﻳﻲ‬
‫ﻣﺘﻔﺎﻭﺕ(‬
‫‪n -1‬‬
‫‪1 æ 2n ö‬‬ ‫‪4n‬‬ ‫‪æ‬‬ ‫‪æ 1 öö‬‬
‫= ‪bn‬‬ ‫‪å‬‬ ‫= ‪b k b n -1- k‬‬ ‫=÷ ‪ç‬‬
‫‪n +1 è n ø‬‬ ‫‪3‬‬ ‫÷ ÷ ‪ç1 + O ç‬‬
‫‪è‬‬ ‫‪è n øø‬‬
‫‪k =0‬‬
‫‪pn 2‬‬
‫‪2n -1‬‬ ‫ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻔﺎﻭﺕ ﺑﺎ ‪ n‬ﮔﺮﻩ ﻭ ﺑﺎ ﺍﺭﺗﻔﺎﻉ‪ ) n‬ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ(ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫ﺍﻋﻤﺎﻝ ﻣﺨﺘﻠﻒ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮ‪ h) :‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ(‬
‫‪ -۱‬ﺩﺭﺝ‪ :‬ﺑﺎ ﭘﻴﻤﺎﻳﺶ ﻳﻚ ﻣﺴﻴﺮ ﻣﺸﺨﺺ ﺍﺯ ﺭﻳﺸﻪ ﺗﺎ ﻳﻚ ﺑﺮﮒ‪ ،‬ﮔﺮﺓ ‪ x‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻓﺮﺯﻧﺪ ﺁﻥ ﺑﺮﮒ ﺩﺭﺝ ﻣﻲﺷﻮﺩ‪ .‬ﺩﺭﺝ ﻫﻤﻮﺍﺭﻩ ﺩﺭ ﺑﺮﮒ ﺍﺳﺖ‪ .‬ﺯﻣﺎﻥ‬
‫ﺩﺭﺝ ) ‪ O ( h‬ﺍﺳﺖ‪.‬‬
‫‪ -۲‬ﺣﺬﻑ‪ :‬ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﮔﺮﻩﺍﻱ ﻣﻲﺧﻮﺍﻫﺪ ﺣﺬﻑ ﺷﻮﺩ‪ ،‬ﺑﺮﮒ ﺑﺎﺷﺪ‪ ،‬ﺣﺬﻑ ﺑﻪ ﺭﺍﺣﺘﻲ ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪ .‬ﺍﮔﺮ ﮔﺮﺓ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺑﺎﺷﺪ‪ ،‬ﺯﻳﺮ ﺩﺭﺧﺖ ﺁﻥ‬
‫ﺟﺎﻳﮕﺰﻳﻦ ﮔﺮﺓ ﻣﻮﺭﺩ ﻧﻈﺮ ﻣﻲﺷﻮﺩ ﻭ ﺍﮔﺮ ﮔﺮﺓ ﺩﻭ ﻓﺮﺯﻧﺪﻱ ﺑﺎﺷﺪ‪ ،‬ﻋﻨﺼﺮ ﻣﺎﺑﻌﺪ ﻳﺎ ﻋﻨﺼﺮ ﻣﺎﻗﺒﻞ ﺁﻥ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﺟﺎﻳﮕﺰﻳﻦ ﺁﻥ ﻣﻲﺷﻮﺩ‪ .‬ﺯﻣﺎﻥ‬
‫ﺍﺟﺮﺍ ) ‪ O ( h‬ﺍﺳﺖ‪.‬‬
‫‪ -۳‬ﺟﺴﺘﺠﻮ‪ :‬ﺑﺎ ﺍﻧﺘﺨﺎﺏ ﻳﻚ ﻣﺴﻴﺮ ﻣﺸﺨﺺ ﺍﺯ ﺭﻳﺸﻪ ﺗﺎ ﺣﺪﺍﻛﺜﺮ ﺑﺮﮒ‪ ،‬ﺟﺴﺘﺠﻮ ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪ .‬ﺯﻣﺎﻥ ) ‪ O ( h‬ﺍﺳﺖ‪.‬‬
‫‪ -۴‬ﺟﺴﺘﺠﻮﻱ ﻣﺎﻛﺰﻳﻤﻢ ﻳﺎ ﻣﻴﻨﻴﻤﻢ ) ‪ : ( TREE _ MAXIMUM,TREE _ MINIMUM‬ﺯﻣﺎﻥ ) ‪ O ( h‬ﺍﺳﺖ‪.‬‬
‫‪ -۵‬ﺟﺴﺘﺠﻮﻱ ﻋﻨﺼﺮ ﺑﻌﺪﻱ ﻳﺎ ﻗﺒﻠﻲ ) ‪ : ( TREE _ SUCCESSOR,TREE _ PREDCCESSOR‬ﺯﻣﺎﻥ ) ‪ O ( h‬ﺍﺳﺖ‪.‬‬

‫ﺗﺤﻠﻴﻞ ﻋﻤﻠﻴﺎﺕ ﻣﺨﺘﻠﻒ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‬


‫ﺍﺯ ﺁﻧﺠﺎﻳﻲ ﮐﻪ ﺗﻤﺎﻡ ﻋﻤﻠﻴﺎﺕ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﺭﻭﺍﻝ ﺟﺴﺘﺠﻮ ﻭ ﺟﺴﺘﺠﻮ ﻧﻴﺰ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﻋﻤﻖ )‪ (h‬ﺩﺭﺧﺖ ﺍﺳﺖ ‪،‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺁﻥﮐﻪ )‪ (log 2n < h < n‬ﻣﻲﺑﺎﺷﺪ ﻭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺯﻣﺎﻧﻲ ﺭﺥ ﻣﻲﺩﻫﺪ ﻛﻪ ﺩﺭ ﻫﺮ ﺳﻄﺢ ﻳﻚ ﮔﺮﻩ ﺑﺎﺷﺪ‪ ،‬ﻣﺎﻧﻨﺪ ﺩﺭﺧﺖﻫﺎﻱ‬
‫ﺍﺭﻳﺐ ﺑﻪ ﺭﺍﺳﺖ ﻭ ﭼﭗ)ﺑﺎ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ( ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻋﻤﺎﻝ ﮔﻔﺘﻪ ﺷﺪﻩ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n‬ﺍﺟﺮﺍ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﭘﺲ ﻫﺮ ﻳﻚ ﺍﻋﻤﺎﻝ ﮔﻔﺘﻪ ﺷﺪﻩ ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ ﻭ ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( log n‬ﻭ ﺩﺭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n‬ﺍﺟﺮﺍ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﻧﺘﻴﺠﻪ‪ :‬ﺯﻣﺎﻥ ﻫﺮﮐﺪﺍﻡ ﺍﺯ ﻋﻤﻠﻴﺎﺕ ﻓﻮﻕ ﺣﺘﻤﺎﹰ ﺍﺯ ﻣﺮﺗﺒﻪ )‪ Ω(log 2n‬ﻳﺎ )‪ O(n‬ﻣﻲ ﺑﺎﺷﺪ‪.‬‬

‫ﺳﺎﺧﺘﻦ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‬


‫ﺑﺮﺍﻱ ﺳﺎﺧﺘﻦ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﻛﻠﻴﺪﻫﺎ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺗﻬﻲ ﺩﺭﺝ ﻣﻲﺷﻮﻧﺪ‪ .‬ﻛﻪ ﺯﻣﺎﻥ ﺁﻥ‬
‫ﻣﺘﻨﺎﺳﺐ ﺑﺎ ﺩﺭﺝ ‪ n‬ﻛﻠﻴﺪ ﺩﺭ ﻳﻚ ‪ BST‬ﺍﺳﺖ‪ .‬ﻳﻌﻨﻲ ) ‪ O ( nh‬ﻛﻪ ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ ﻭ ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ ) ‪ O ( n log n‬ﻭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺯﻣﺎﻥ‬
‫) (‬
‫‪ O n 2‬ﺍﺳﺖ‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۹‬‬

‫ﻧﺘﻴﺠﻪ‪ :‬ﺯﻣﺎﻥ ﺳﺎﺧﺘﻦ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻟﺨﻮﺍﻩ ﺑﺎ ‪ n‬ﻛﻠﻴﺪ ﺣﺘﻤﺎﹰ ﺍﺯ ﻣﺮﺗﺒﻪ )‪ Ω(nlog 2n‬ﻳﺎ ) ‪ O(n 2‬ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺩﺭﺧﺘﻲ‪:‬‬
‫ﺑﺮﺍﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ‪ n‬ﻛﻠﻴﺪ‪ ،‬ﺍﺑﺘﺪﺍ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﻳﻚ ‪ BST‬ﺗﻬﻲ ﺩﺭﺝ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺳﭙﺲ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﻛﻠﻴﺪﻫﺎ ﺭﺍ ﻣﺮﺗﺐ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ‪ ،‬ﻛﻠﻴﺪﻫﺎ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( nh‬ﻣﺮﺗﺐ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫) ‪O ( nh ) + q ( n ) = O ( nh‬‬

‫ﺯﻣﺎﻥ ﺩﺭﺝ ‪ n‬ﻛﻠﻴﺪ‬ ‫ﺯﻣﺎﻥ ﭘﻴﻤﺎﻳﺶ ‪inorder‬‬

‫) (‬
‫ﻛﻪ ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ ) ‪ O ( n log n‬ﻭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ‪ O n 2‬ﺍﺳﺖ‪.‬‬

‫ﻧﻜﺘﻪ ‪ :‬ﺑﺪﻭﻥ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻨﻜﻪ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺍﺯ ﭼﻪ ﮔﺮﻩﺍﻱ ﺷﺮﻭﻉ ﻛﻨﻴﻢ‪ k ،‬ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ‬
‫‪ TREE – SUCCESSOR‬ﺯﻣﺎﻥ ) ‪ O ( k + h‬ﺭﺍ ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪.‬‬

‫ﺩﺭ ﻳﻚ ‪ BST‬ﻫﻤﻮﺍﺭﻩ‪:‬‬
‫] ‪a = key [ x‬‬
‫] ‪b = key [ y‬‬
‫] ‪c = key [ z‬‬

‫‪ìïSUCCESSOR ( x ) = y‬‬ ‫‪ìï PREDECESSOR ( z ) = y‬‬


‫‪í‬‬ ‫‪í‬‬
‫‪îïSUCCESSOR ( y ) = z‬‬ ‫‪îï PREDECESSOR ( y ) = x‬‬
‫‪inorder‬‬ ‫‪ :‬ﭘﻴﻤﺎﻳﺶ‬ ‫‪... a b c ...‬‬

‫ﻧﻜﺘﻪ ‪ :‬ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺭﺍ ﻣﻲﺗﻮﺍﻥ ﺍﺑﺘﺪﺍ ﺑﺎ ﻳﻚ ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ TREE – MINIMUM‬ﻭ ﺳﭙﺲ ‪ n - 1‬ﻓﺮﺍﺧﻮﺍﻧﻲ‬
‫‪ TREE SUCCESSOR‬ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﻛﺮﺩ ﻛﻪ ﺯﻣﺎﻥ ﺁﻥ ) ‪ q ( n‬ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۱۰‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺩﺭﺧﺖ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﻣﺘﻮﺍﺯﻥ‬


‫ﺩﺭﺧﺘﻲ ﻛﻪ ﺩﺭ ﺁﻥ ﺍﺧﺘﻼﻑ ﺍﺭﺗﻔﺎﻉ ﺩﻭ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ ﻭ ﺭﺍﺳﺖ ﻫﺮ ﮔﺮﻩ ﺩﻟﺨﻮﺍﻩ ﺣﺪﺍﻛﺜﺮ ‪ 1‬ﺑﺎﺷﺪ‪ ،‬ﺩﺭﺧﺖ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﻣﺘﻮﺍﺯﻥ ﻧﺎﻣﻴﺪﻩ ﻣﻲﺷﻮﺩ‪.‬‬

‫ﺣﺪﺍﻗﻞ ﮔﺮﻩ ﺑﺮﺍﻱ ﺩﺭﺧﺖ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﻣﺘﻮﺍﺯﻥ ‪h‬‬


‫ﺍﮔﺮ ) ‪ AVL ( h‬ﺣﺪﺍﻗﻞ ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﻱ ﺳﺎﺧﺘﻦ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﻣﺘﻮﺍﺯﻥ ‪) h‬ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ ﻓﺮﺽ ﻣﻲﺷﻮﺩ( ﺑﺎﺷﺪ‪ ،‬ﺁﻥﮔﺎﻩ‪:‬‬
‫‪AVL ( h ) = AVL ( h - 1) + AVL ( h - 2 ) + 1‬‬

‫‪AVL(0) = 1‬‬

‫‪AVL(1) = 2‬‬

‫ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﻣﺘﻮﺍﺯﻥ )‪(AVL‬‬


‫ﻫﺮ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﻣﺘﻮﺍﺯﻥ‪ ،‬ﺩﺭﺧﺖ ‪ AVL‬ﻧﺎﻣﻴﺪﻩ ﻣﻲﺷﻮﺩ‪.‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺑﻬﺘﺮ ﺩﺭﺧﺘﺎﻥ ﺟﺴﺘﺠﻮ ﺑﺎ ﺑﻴﺸﺘﺮﻳﻦ ﻋﻤﻖ‬
‫) ‪ ، O ( log 2 n‬ﺩﺭﺧﺘﺎﻥ ﺟﺴﺘﺠﻮﻱ ﻣﺘﻌﺎﺩﻝ ﻧﺎﻣﻴﺪﻩ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﺍﺯ ﺁﻧﺠﺎﻳﻲﮐﻪ ﻋﻤﻠﻴﺎﺕ‪ -۱ :‬ﺟﺴﺘﺠﻮ ‪ -۲ ،‬ﺣﺬﻑ ‪ -۳ ،‬ﺩﺭﺝ ‪ -۴ ،‬ﺟﺴﺘﺠﻮﻱ ﻣﺎﮐﺰﻳﻤﻢ ﻭ ﻣﻴﻨﻴﻤﻢ ‪ ۵ ،‬ـ ﺟﺴﺘﺠﻮﻱ ﻋﻨﺼﺮ ﺑﻌﺪﻱ )‪ (succ‬ﻭ‬
‫ﻋﻨﺼﺮ ﻗﺒﻠﻲ )‪ (pred‬ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﺯﻣﺎﻥ )‪ O(h‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﮐﻠﻴﻪ ﺍﻋﻤﺎﻝ ﻓﻮﻕ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‬
‫ﻣﺘﻮﺍﺯﻥ )‪ (AVL‬ﺩﺭ ﺯﻣﺎﻥ )‪ O(log 2n‬ﻭ ﺑﻬﺘﺮ ﺍﺯ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻳﻲ )‪ (BST‬ﺍﻧﺠﺎﻡ ﺧﻮﺍﻫﺪ ﺷﺪ‪.‬‬

‫ﻣﺘﻮﺍﺯﻥ ﮐﺮﺩﻥ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﻧﺎﻣﺘﻮﺍﺯﻥ‬


‫ﺑﺮﺍﻱ ﻣﺘﻮﺍﺯﻥ ﮐﺮﺩﻥ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻧﺎﻣﺘﻮﺍﺯﻥ ﺍﺯ ﺩﻭﺭﺍﻥ )ﭼﺮﺧﺶ( ﺩﺭﺧﺖ ﺣﻮﻝ ﮔﺮﻩ ﻣﺤﻮﺭ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﮔﺮﻩ ﻣﺤﻮﺭ‪ :‬ﺑﻪ ﺍﻭﻟﻴﻦ ﮔﺮﻩ ﻧﺰﺩﻳﮏ ﺑﻪ ﻣﻮﻗﻌﻴﺖ ﺩﺭﺝ ﮐﻪ ﺍﺧﺘﻼﻑ ﺍﺭﺗﻔﺎﻉ ﺩﻭ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ ﻭ ﺭﺍﺳﺖ ﺁﻥ ﺑﻴﺸﺘﺮ ﺍﺯ ‪ 1‬ﻣﻲﺑﺎﺷﺪ‪.‬‬
‫ﺩﻭﺭﺍﻥ )ﭼﺮﺧﺶ(‬
‫ﺑﻪ ﻃﻮﺭ ﮐﻠﻲ ﭼﻬﺎﺭﻧﻮﻉ ﺩﻭﺭﺍﻥ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻗﺮﺍﺭﮔﺮﻓﺘﻦ ﮔﺮﻩ ﺟﺪﻳﺪ ﺩﺭ ﺳﻤﺖ ﭼﭗ ﻳﺎ ﺭﺍﺳﺖ ﻓﺮﺯﻧﺪﺍﻥ ﭼﭗ ﻭ ﺭﺍﺳﺖ ﮔﺮﻩ ﻣﺤﻮﺭ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪:‬‬

‫ﻭﺿﻌﻴﺖ ﺩﻭﺭﺍﻥ‬ ‫ﺗﻌﺪﺍﺩ ﺩﻭﺭﺍﻥ‬ ‫ﺩﻭﺭﺍﻥ)ﭼﺮﺧﺶ(‬

‫‪ ۱‬ﺩﻭﺭﺍﻥ‬ ‫ﭼﺮﺧﺶ ﺭﺍﺳﺖ ـ ﺭﺍﺳﺖ ) ‪( RR‬‬

‫‪ ۱‬ﺩﻭﺭﺍﻥ‬ ‫ﭼﺮﺧﺶ ﭼﭗ ـ ﭼﭗ ) ‪( LL‬‬

‫‪ ۲‬ﺩﻭﺭﺍﻥ‬ ‫ﭼﺮﺧﺶ ﻣﻀﺎﻋﻒ ﭼﭗ ـ ﺭﺍﺳﺖ ) ‪( LR‬‬

‫‪ ۲‬ﺩﻭﺭﺍﻥ‬ ‫ﭼﺮﺧﺶ ﻣﻀﺎﻋﻒ ﺭﺍﺳﺖ ـ ﭼﭗ ) ‪( RL‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۱۱‬‬

‫‪:Heap‬‬
‫‪ :Max – Heap‬ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﻛﺎﻣﻞ ﻛﻪ ﻛﻠﻴﺪ ﻫﺮ ﮔﺮﻩ ﺍﺯ ﻓﺮﺯﻧﺪﺍﻧﺶ ﺑﺰﺭﮒﺗﺮ ﺍﺳﺖ‪.‬‬
‫‪ :Min – Heap‬ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﻛﺎﻣﻞ ﻛﻪ ﻛﻠﻴﺪ ﻫﺮ ﮔﺮﻩ ﺍﺯ ﻓﺮﺯﻧﺪﺍﻧﺶ ﻛﻮﭼﻚﺗﺮ ﺍﺳﺖ‪.‬‬
‫ﺍﺯ ﺁﻧﺠﺎ ‪ Heap‬ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺍﺳﺖ ﺩﺍﺭﻳﻢ‪:‬‬
‫‪ ۱‬ـ ﺍﺭﺗﻔﺎﻉ ‪Heap‬‬

‫‪) h = êêlog n2 úú + 1‬ﺳﻄﺢ ﺭﻳﺸﻪ ﻳﻚ(‬


‫‪ë‬‬ ‫‪û‬‬
‫‪) h = êêlog n2 úú‬ﺳﻄﺢ ﺭﻳﺸﺔ ﺻﻔﺮ(‬
‫‪ë‬‬ ‫‪û‬‬
‫‪ ۲‬ـ ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺶ ‪ postorder ،preorder ،inorder‬ﻭ ‪ levelorder‬ﻣﻲﺗﻮﺍﻥ ﺩﺭﺧﺖ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ ۳‬ـ ﺑﺮﺍﻱ ﻧﻤﺎﻳﺶ ‪ Heap‬ﺍﺯ ﺁﺭﺍﻳﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ ﻛﻪ ﻳﻚ ﺗﻨﺎﻇﺮ ﻳﻚﺑﻪ ﻳﻚ ﺑﻴﻦ ﺧﺎﻧﻪﻫﺎﻱ ﺁﺭﺍﻳﻪ ﻭ ﺍﻧﺪﻳﺲ ﮔﺮﻩﻫﺎ ‪ Heap‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬
‫‪êiú‬‬
‫‪parent ( i ) = ê ú‬‬ ‫‪ ۴‬ـ ﺍﻧﺪﻳﺲ ﭘﺪﺭ ﮔﺮﺓ ‪: i‬‬
‫‪ë2û‬‬
‫‪Left child ( i ) = 2i‬‬ ‫ﺍﻧﺪﻳﺲ ﻓﺮﺯﻧﺪ ﭼﭗ‪:‬‬
‫‪Right child ( i ) = 2i + 1‬‬ ‫ﺍﻧﺪﻳﺲ ﻓﺮﺯﻧﺪ ﺭﺍﺳﺖ‪:‬‬
‫‪ ۵‬ـ ﺍﻧﺪﻳﺲ ﺑﺮﮒﻫﺎ‪:‬‬
‫‪ênú‬‬ ‫‪ênú‬‬
‫‪ê 2 ú +1 , ê 2 ú + 2 , . . . , n‬‬
‫‪ë û‬‬ ‫‪ë û‬‬
‫‪n‬‬
‫ﻣﻘﺎﻳﺴﻪ ﺩﺭ ﻳﻚ ‪ Max – Heap‬ﻭ ‪ Min Heap‬ﻣﻲﺗﻮﺍﻥ ﺑﻪ ﺗﺮﺗﻴﺐ ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ ﻭ ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ ﺭﺍ ﺑﻪﺩﺳﺖ ﺁﻭﺭﺩ‪.‬‬ ‫ﻟﺬﺍ ﺑﺎ‬
‫‪2‬‬
‫ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ ﻭ ﺩﺭ‬ ‫ﺩﺭ ﻳﻚ ‪ Max – Heap‬ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ ﻫﻤﻮﺍﺭﻩ ﺩﺭ ﺭﻳﺸﻪ ﻭ ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ ﻫﻤﻮﺍﺭﻩ ﺩﺭ ﺑﺮﮒ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﭘﺲ ﺩﺭ ﺯﻣﺎﻥ )‪O (1‬‬
‫ﺯﻣﺎﻥ ) ‪ O ( n‬ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲﺍﻧﺪ‪.‬‬
‫ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﻓﺮﺯﻧﺪﺍﻥ ﻳﻚ ﮔﺮﻩ ﺩﺭ ﺗﺮﺗﻴﺐ ﻣﺸﺨﺼﻲ ﻗﺮﺍﺭ ﻧﻤﻲﮔﻴﺮﻧﻨﺪ‪ ،‬ﻫﻴﭻ ﭘﻴﻤﺎﻳﺸﻲ ﺍﺯ ‪ ،Heap‬ﺍﻟﺰﺍﻣﺎﹰ ﮔﺮﻩﻫﺎ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻣﺮﺗﺐ ﺑﺎﺯ ﻧﻤﻲﮔﺮﺩﺍﻧﺪ‪ .‬ﺩﺭ‬
‫ﻳﻚ ‪ ، Max – Heap‬ﻣﺎﻛﺰﻳﻤﻢ ‪ r‬ﺍﻡ ﻭ ﺩﺭ ﻳﻚ ‪ ، Min – Heap‬ﻣﻴﻨﻴﻤﻢ ‪ r‬ﺍﻡ ﻫﻤﻮﺍﺭﻩ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺧﺎﻧﻪﻫﺎﻱ ‪ éë 2 . . . 2r - 1ùû‬ﻗﺮﺍﺭ ﮔﻴﺮﺩ‪.‬‬
‫‪é n ù‬‬ ‫‪é n ù‬‬
‫‪ê h +1 ú‬‬ ‫‪ ê‬ﻛﻪ ﺍﮔﺮ ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ ﻓﺮﺽ ﺷﻮﺩ ﺁﻥﮔﺎﻩ‬ ‫‪ú‬‬ ‫ﺩﺭ ﻳﻚ ‪ ،Heap‬ﺣﺪﺍﻛﺜﺮ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎ ﺑﺎ ﻋﻤﻖ ‪) H‬ﺳﻄﺢ ﺭﻳﺸﺔ ﻳﻚ( ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‬
‫‪ê2 ú‬‬ ‫‪ê 2h ú‬‬
‫ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﺍﻋﺪﺍﺩ ﻣﺘﻤﺎﻳﺰ ‪ 1 , 2 , . . . , n‬ﺩﺭ ﻳﻚ ‪ Min – Heap‬ﻗﺮﺍﺭ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪ ،‬ﻛﻮﭼﻚﺗﺮﻳﻦ ﻋﺪﺩﻱ ﻛﻪ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺳﻄﺢ ﺁﺧﺮ ﻣﺸﺎﻫﺪﻩ‬
‫ﺷﻮﺩ‪ êêlog n2 úú + 1 ،‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬
‫‪ë‬‬ ‫‪û‬‬
‫ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﺍﻋﺪﺍﺩ ﻣﺘﻤﺎﻳﺰ ‪ 1 , 2 , . . . , n‬ﺩﺭ ﻳﻚ ‪ Max – Heap‬ﻗﺮﺍﺭ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪ ،‬ﺑﺰﺭﮒﺗﺮﻳﻦ ﻋﺪﺩﻱ ﻛﻪ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺳﻄﺢ ﺁﺧﺮ ﻣﺸﺎﻫﺪﻩ ﺷﻮﺩ‪،‬‬
‫‪ n - êêlog n2 úú‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬
‫‪ë‬‬ ‫‪û‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۱۲‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺍﻟﮕﻮﺭﻳﺘﻢﻫﺎ‪:‬‬
‫) ‪MAX - HEAPIFY ( A , i‬‬ ‫‪ -۱‬ﺍﻟﮕﻮﺭﻳﺘﻢ‬
‫ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﺎ ﻓﺮﺽ ﺍﻳﻨﻜﻪ ﺯﻳﺮ ﺩﺭﺧﺖﻫﺎﻱ ﭼﭗ ﻭ ﺭﺍﺳﺖ ﮔﺮﻩ ‪ i‬ﺍﻡ ﺩﺭ ﺁﺭﺍﻳﺔ ‪ ،A‬ﻫﺮ ﻛﺪﺍﻡ ﻳﻚ ‪ Max – Heap‬ﻫﺴﺘﻨﺪ‪ ،‬ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ ‪ A‬ﺭﺍ ﺑﻪ‬
‫ﮔﻮﻧﻪﺍﻱ ﺟﺎﺑﻪﺟﺎ ﻣﻲﻛﻨﺪ ﻛﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﻣﺸﺘﻖ ﺷﺪﻩ ﺍﺯ ] ‪ ، A [i‬ﻳﻚ ‪ Max – Heap‬ﺷﻮﺩ‪ .‬ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺩﺭﺟﺎ ﺍﺳﺖ ﻭ ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﺁﻥ‬
‫) ‪ O ( log n‬ﺍﺳﺖ ‪.‬‬
‫)ﺑﺮﺍﻱ ﺍﻳﻦ ﻣﻨﻈﻮﺭ ﻫﺮ ﮔﺮﻩ ﺭﺍ ﺑﺎ ﻓﺮﺯﻧﺪﺍﻧﺶ ﻣﻘﺎﻳﺴﻪ ﻛﺮﺩﻩ ﻭ ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﻛﻮﭼﻚﺗﺮ ﺑﺎﺷﺪ ﺑﺎ ﻓﺮﺯﻧﺪ ﺑﺰﺭﮒﺗﺮ ﺟﺎﺑﻪﺟﺎ ﻣﻲﻛﻨﺪ ﻭ ﻣﺠﺪﺩﺍﹰ ﺍﻟﮕﻮﺭﻳﺘﻢ‬
‫ﺑﻪﺻﻮﺭﺕ ﺑﺎﺯﮔﺸﺘﻲ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲﺷﻮﺩ‪(.‬‬
‫)ﺍﻟﮕﻮﺭﻳﺘﻢ ‪ ،MIN – HEAPIFY‬ﻣﺸﺎﺑﻪ ﺑﺎﻻ ﺍﺳﺖ‪(.‬‬
‫)‪BUILD - MAX - HEAP(A‬‬ ‫‪ -۲‬ﺍﻟﮕﻮﺭﻳﺘﻢ‬
‫ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﻪﺻﻮﺭﺕ ﺩﺭﺟﺎ ﻳﻚ ﺁﺭﺍﻳﺔ ﻭﺭﻭﺩﻱ ‪ A‬ﺭﺍ ﺑﻪ ﻛﻤﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ‪ MAX – HEAPIFY‬ﺑﻪ ‪ Max – Heap‬ﺗﺒﺪﻳﻞ ﻣﻲﻛﻨﺪ‪ .‬ﻛﻪ ﻣﺮﺗﺒﺔ‬
‫ﺯﻣﺎﻧﻲ ﺁﻥ ) ‪ O ( n‬ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n‬ﻣﻲﺗﻮﺍﻥ ﻣﺸﺨﺺ ﻛﺮﺩ ﺁﻳﺎ ﻳﻚ ﺁﺭﺍﻳﻪ‪ Max – Heap ،‬ﺍﺳﺖ ﻳﺎ ﺧﻴﺮ‪) .‬ﺑﻪ ﻃﻮﺭ ﻣﺸﺎﺑﻪ ﺑﺮﺍﻱ – ‪Min‬‬
‫‪ Heap‬ﻧﻴﺰ ﺻﺎﺩﻕ ﺍﺳﺖ‪(.‬‬
‫‪ -۳‬ﺟﺴﺘﺠﻮ‪ :‬ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮ ﺩﺭ ‪ ،Heap‬ﺑﺎﻳﺪ ﺍﺯ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻛﻪ ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﺁﻥ ) ‪ O ( n‬ﺍﺳﺖ‪.‬ﺩﺭ ﻋﻴﻦ ﺣﺎﻝ ﺍﺯ ﺁﻧﺠﺎﺋﻴﻜﻪ ﻋﻨﺼﺮ‬
‫‪n + 1ú‬‬
‫‪ êê‬ﺍﺳﺖ ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮﻱ ﺁﻧﻬﺎ ﻧﻴﺰ ) ‪ O ( n‬ﺍﺳﺖ‪.‬‬ ‫ﻣﻴﻨﻴﻤﻢ ﺩﺭ ‪ MAXHEAP‬ﻭ ﻣﺎﻛﺰﻳﻤﻢ ﺩﺭ ‪ MINHEAP‬ﺩﺭ ﺑﺮﮔﻬﺎ ﻗﺮﺍﺭﺩﺍﺭﻧﺪ ﻭ ﺗﻌﺪﺍﺩ ﺑﺮﮔﻬﺎ ‪ú‬‬
‫‪ë 2 û‬‬
‫‪ -۴‬ﺩﺭﺝ‪ :‬ﺍﺑﺘﺪﺍ ﮔﺮﻩ ﺩﺭ ﺁﺧﺮﻳﻦ ﺧﺎﻧﺔ ﺁﺭﺍﻳﻪ ﺍﺿﺎﻓﻪ ﻣﻲﺷﻮﺩ ﺳﭙﺲ ﺗﺎ ﺭﻳﺸﻪ‪ ،‬ﭘﺸﺖ ﺳﺮ ﻫﻢ ﺑﺎ ﺍﺟﺪﺍﺩﺵ ﻣﻘﺎﻳﺴﻪ ﻣﻲﺷﻮﺩ ﻭ ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﺍﺯ ﺁﻧﻬﺎ‬
‫ﺑﺰﺭﮒﺗﺮ ﺑﺎﺷﺪ‪،‬ﺟﺎﺑﻪﺟﺎ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﺯﻣﺎﻥ ) ‪ O ( log n‬ﺍﺳﺖ‪.‬‬
‫‪ : MAXIMUM(A) -۵‬ﻋﻨﺼﺮ ﻱ ﺍﺯ ‪ A‬ﺑﺎ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻛﻠﻴﺪﻳﻌﻨﻲ ﺭﻳﺸﻪ ﺭﺍ )ﺩﺭ ‪(MAXHEAP‬ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﻛﻪ ﺯﻣﺎﻥ )‪ O (1‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪ :MINIMUM(A) -۶‬ﻋﻨﺼﺮ ﻱ ﺍﺯ ‪ A‬ﺑﺎ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻛﻠﻴﺪ ﻳﻌﻨﻲ ﺭﻳﺸﻪ ﺭﺍ )ﺩﺭ ‪(MINHEAP‬ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﻛﻪ ﺯﻣﺎﻥ )‪ O (1‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪ :EXTRACT_MAX(A) -۷‬ﻋﻨﺼﺮ ﻱ ﺍﺯ ‪ A‬ﺑﺎ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻛﻠﻴﺪ ﺭﺍ )ﺩﺭ ‪(MAXHEAP‬ﺣﺬﻑ ﻛﺮﺩﻩ ﻭ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﻛﻪ ﺯﻣﺎﻥ ) ‪ O ( log n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‬
‫‪ :EXTRACT_MIN(A) -۸‬ﻋﻨﺼﺮ ﻱ ﺍﺯ ‪ A‬ﺑﺎﻛﻮﭼﻜﺘﺮﻳﻦ ﻛﻠﻴﺪ ﺭﺍ )ﺩﺭ ‪(MINHEAP‬ﺣﺬﻑ ﻛﺮﺩﻩ ﻭ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ ﻛﻪ ﺯﻣﺎﻥ ) ‪ O ( log n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‬
‫‪ :INCREASE(A , x , k)-۹‬ﻣﻘﺪﺍﺭ ﻛﻠﻴﺪ ﻋﻨﺼﺮ ‪ x‬ﺭﺍ ﺑﻪ ﻣﻘﺪﺍﺭ ﺟﺪﻳﺪ ‪ k‬ﺍﻓﺰﺍﻳﺶ ﻣﻲﺩﻫﺪ ﻛﻪ ﺯﻣﺎﻥ ) ‪ O ( log n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪) .‬ﻛﻪ ﻓﺮﺽ ﺷﺪﻩ‬
‫ﻣﻘﺪﺍﺭ ‪ x‬ﺣﺪﺍﻗﻞ ﺑﻪ ﺑﺰﺭﮔﻲ ﻣﻘﺪﺍﺭ ﻓﻌﻠﻲ ﻛﻠﻴﺪ ﻋﻨﺼﺮ ‪ x‬ﺍﺳﺖ(‬
‫‪ :DECREASE(A , x , k) -۱۰‬ﻣﻘﺪﺍﺭ ﻛﻠﻴﺪ ﻋﻨﺼﺮ ‪ x‬ﺭﺍ ﺑﻪ ﻣﻘﺪﺍﺭ ﺟﺪﻳﺪ ‪ k‬ﻛﺎﻫﺶ ﻣﻲﺩﻫﺪ ﻛﻪ ﺯﻣﺎﻥ ) ‪ O ( log n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪) .‬ﻛﻪ ﻓﺮﺽ ﺷﺪﻩ‬
‫ﻣﻘﺪﺍﺭ ‪ x‬ﺣﺪﺍﻗﻞ ﺑﻪ ﻛﻮﭼﻜﻲ ﻣﻘﺪﺍﺭ ﻓﻌﻠﻲ ﻛﻠﻴﺪ ﻋﻨﺼﺮ ‪ x‬ﺍﺳﺖ(‬

‫ﻧﻜﺘﻪ ‪ Heap :‬ﻳﻚ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﺓ ﻫﻤﻪ ﻣﻨﻈﻮﺭﻩ ﻧﻴﺴﺖ ﻭ ﺩﺭ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺁﺭﺍﻳﻪ‪ ،‬ﺻﻒ ﺍﻭﻟﻮﻟﻴﺖ ﻭ ﺍﺩﻏﺎﻡ ﻟﻴﺴﺖﻫﺎﻱ ﻣﺮﺗﺐ )ﺑﻪ ﻛﻤﻚ ﺩﺭﺧﺖ‬
‫ﺍﻧﺘﺨﺎﺑﻲ ‪ (Min – Heap‬ﻛﺎﺭﺑﺮﺩ ﺩﺍﺭﺩ‪.‬‬

‫‪-۱۱‬ﻣﺮﺗﺐ ﺳﺎﺯﻱ ‪ :Heap‬ﺍﺑﺘﺪﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺍﻝ ‪ BUILD - MAX – HEAP‬ﺁﺭﺍﻳﻪ ﺑﻪ ‪ Heap‬ﺗﺒﺪﻳﻞ ﻣﻲﺷﻮﺩ )ﺩﺭ ﺯﻣﺎﻥ ) ‪ ( O ( n‬ﺳﭙﺲ‬
‫ﻋﻨﺎﺻﺮ ﻳﻜﻲﻳﻜﻲ ﺍﺯ ‪ Heap‬ﺣﺬﻑ ﻣﻲﺷﻮﺩ ﻛﻪ ﺣﺬﻑ ‪ n‬ﻋﻨﺼﺮ ﺯﻣﺎﻥ ) ‪ O ( n log n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪ .‬ﭘﺲ ﺯﻣﺎﻥ ﻛﻞ ) ‪ O ( n log n‬ﺍﺳﺖ‪.‬‬
‫‪ -۱۲‬ﺍﺩﻏﺎﻡ ‪ k‬ﻟﻴﺴﺖ ﻣﺮﺗﺐ‪ :‬ﻛﻪ ﺍﮔﺮ ﻣﺠﻤﻮﻉ ﻋﻨﺎﺻﺮ ﻫﻤﺔ ﻟﻴﺴﺖﻫﺎ ‪ n‬ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n log k‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۱۳‬‬

‫‪: Treap‬‬
‫ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺁﻥ ﻫﺮ ﻧﻮﺩ ﻳﻚ ﻛﻠﻴﺪﻭ ﻳﻚ ﺍﻭﻟﻮﻳﺖ ﺩﺍﺭﺩ‪ .‬ﺩﺭ ﺍﻳﻦ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﻓﺮﺽ ﻣﻲﻛﻨﻴﻢ ﻫﻤﺔ ﺍﻭﻟﻮﻳﺖﻫﺎ ﻭ ﻛﻠﻴﺪﻫﺎ‬
‫ﻣﺘﻤﺎﻳﺰ ﻫﺴﺘﻨﺪ‪ .‬ﻳﻌﻨﻲ ﺍﻭﻟﻮﻳﺖ ﻳﺎ ﻛﻠﻴﺪ ﻫﻴﭻ ﺩﻭ ﮔﺮﻩﺍﻱ ﻳﻜﺴﺎﻥ ﻧﻴﺴﺖ‪ .‬ﭘﻴﻤﺎﻳﺶ ﻣﻴﺎﻥ ﺗﺮﺗﻴﺐ ﺑﺮ ﺭﻭﻱ ﻛﻠﻴﺪﻫﺎﻱ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ‪ ، treap‬ﻛﻠﻴﺪﻫﺎ ﺭﺍ ﺑﻪ‬
‫ﺻﻮﺭﺕ ﻣﺮﺗﺐ ﺷﺪﻩ ﺑﺮ ﻣﻲﮔﺮﺩﺍﻧﺪ ﻭ ﺍﻭﻟﻮﻳﺖ ﻫﺮ ﮔﺮﻩ ﺍﺯ ﺍﻭﻟﻮﻳﺖ ﻓﺮﺯﻧﺪﺍﻧﺶ ﺑﺰﺭﮔﺘﺮ ﺍﺳﺖ ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ‪ ،‬ﻛﻠﻴﺪﻫﺎﻱ ﻳﻚ ‪ treap‬ﺍﺯ ﻭﻳﮋﮔﻲ ﺩﺭﺧﺖ‬
‫ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻭ ﺍﻭﻟﻮﻳﺖ ﻳﻚ ‪ treap‬ﺍﺯ ﻭﻳﮋﮔﻲ ‪ Heap‬ﭘﻴﺮﻭﻱ ﻣﻲﻛﻨﻨﺪ )‪. (Max Heap‬‬
‫ﺩﺭ ‪ treap‬ﮔﺮﻩﻫﺎ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺯﻭﺝ ﻣﺮﺗﺐ )‪ (k,p‬ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ‪ K‬ﻧﺸﺎﻥ ﺩﻫﻨﺪﺓ ﻛﻠﻴﺪ ﻭ ‪ P‬ﺍﻭﻟﻮﻳﺖ ﺍﺳﺖ‪) .‬ﺍﮔﺮ ‪Max Heap ، Heap‬‬

‫ﺑﺎﺷﺪ‪(.‬‬

‫) ‪( k 2 , p2‬‬
‫‪‬‬ ‫‪‬‬
‫) ‪( k1 , p1‬‬ ‫) ‪( k3 , p 3‬‬
‫‪ìp > p‬‬
‫‪ í 2 1‬ﺍﺳﺖ‪.‬‬ ‫ﺗﺮﺗﻴﺐ ﻛﻠﻴﺪﻫﺎ‪ k1 < k 2 < k 3 :‬ﻭ ﺗﺮﺗﻴﺐ ﺍﻭﻟﻮﻳﺘﻬﺎ ‪:‬‬
‫‪î p 2 > p3‬‬

‫ﺍﺯ ﺁﻥ ﺟﺎ ﻛﻪ ﻓﺮﺽ ﻛﺮﺩﻳﻢ ﻛﻪ ﻫﻤﺔﻛﻠﻴﺪﻫﺎ ﻭ ﺍﻭﻟﻮﻳﺖ ﻣﺘﻤﺎﻳﺰ ﻫﺴﺘﻨﺪ‪ ،‬ﺷﻜﻞ ‪ treap‬ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ .‬ﺷﻜﻞ ‪ treap‬ﺗﻨﻬﺎ ﺑﻪ ﻛﻠﻴﺪﻫﺎ ﻭ‬
‫ﺍﻭﻟﻮﻳﺖ ﺑﺴﺘﮕﻲ ﺩﺍﺭﺩ ﻭ ﺑﻪﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻭ ﺣﺬﻑ ﻛﻠﻴﺪ ﻭﺍﺑﺴﺘﻪ ﻧﻴﺴﺖ‪ .‬ﺑﻴﺸﺘﺮ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ﺍﻳﻦ ﻭﻳﮋﮔﻲ ﺭﺍ ﻧﺪﺍﺭﺩ ﻭ ﺳﺎﺧﺘﺎﺭ ﺁﻥﻫﺎ ﺑﻪ ﺗﺮﺗﻴﺐ ﺩﺭﺝ‬
‫ﻭ ﺣﺬﻑ ﻋﻨﺎﺻﺮ ﺑﺴﺘﮕﻲ ﺩﺍﺭﺩ‬
‫ﻛﺎﺭﺑﺮﺩ‪ :‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ treap‬ﻣﻲﺗﻮﺍﻥ ﻣﺸﺨﺺ ﻛﺮﺩ‪،‬ﺍﮔﺮ ‪ A‬ﻭ ‪ B‬ﺩﻭ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﻨﺪ‪ ،‬ﺁﻳﺎ ‪ A=B‬ﺍﺳﺖ ﻳﺎ ﺧﻴﺮ‪ .‬ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﺎﺭ ﺑﺮﺍﻱ ﻋﻨﺎﺻﺮ ﺩﺭ‬
‫ﻣﺠﻤﻮﻋﺔ ‪ B , A‬ﺑﻪ ﻃﻮﺭ ﺟﺪﺍﮔﺎﻧﻪ ‪ treap‬ﻣﻲﺳﺎﺯﻳﻢ‪ .‬ﻭ ﺳﭙﺲ ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻣﻲﻛﻨﻴﻢ ﺍﮔﺮ ‪ treap‬ﻫﺎ ﻳﻜﺴﺎﻥ ﺑﻮﻧﺪ‪ ،‬ﺁﻥ ﮔﺎﻩ ﻣﺠﻤﻮﻋﻪﻫﺎ ﻳﻜﻲﺍﻧﺪ‪.‬‬
‫ﺟﺴﺘﺠﻮ‪(Search) :‬‬
‫ﺟﺴﺘﺠﻮ ﺩﺭ ‪ treap‬ﻣﺎﻧﻨﺪ ﺟﺴﺘﺠﻮ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺍﺳﺖ‪ .‬ﺯﻣﺎﻥ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻱ ﻣﻮﻓﻖ ﻳﻚ ﮔﺮﻩ ﺑﺎ ﻋﻤﻖ ﺁﻥ ﮔﺮﻩ ﻣﺘﻨﺎﺳﺐ ﺍﺳﺖ‬
‫ﺯﻣﺎﻥ ﺑﺮﺍﻱ ﻳﻚ ﺟﺴﺘﺠﻮﻱ ﻧﺎﻣﻮﻓﻖ ﺑﺎ ﻋﻤﻖ ﻋﻨﺼﺮ ﻣﺎﺑﻌﺪ ﻳﺎ ﻋﻨﺼﺮ ﻣﺎﻗﺒﻞ ﺁﻥ ﻣﺘﻨﺎﺳﺐ ﺍﺳﺖ‪.‬‬
‫ﺩﺭﺝ‪(INSERT) :‬‬

‫ﺑﺮﺍﻱ ﺩﺭﺝ ﻋﻨﺼﺮ ﺟﺪﻳﺪ ‪ ، z‬ﺍﺑﺘﺪﺍ ﻣﺎﻧﻨﺪ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺩﺭﺝ ﻋﻨﺼﺮ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻋﻤﻞ ﻛﺮﺩﻩ ﻭ ﻋﻨﺼﺮ ﺭﺍ ﺩﺭ ﭘﺎﻳﻴﻦ ﺩﺭﺧﺖ‬
‫ﺩﺭﺝ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺣﺎﻝ ﺩﺭﺧﺖ ﺣﺎﺻﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﻭﻳﮋﮔﻲ ‪ Heap‬ﺭﺍ ﺣﻔﻆ ﻧﻜﻨﺪ‪ ،‬ﺑﺮﺍﻱ ﺍﻳﻦ ﻣﻨﻈﻮﺭ ﺯﻣﺎﻧﻲ ﻛﻪ ﮔﺮﺓ ‪ z‬ﻣﺎﻧﻨﺪ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ‬
‫ﺩﻭﺩﻭﻳﻲ ﺩﺭﺝ ﺷﺪ‪ ،‬ﺍﮔﺮ ﺍﻭﻟﻮﻳﺖ ﺁﻥ ﮔﺮﻩ ﺍﺯ ﭘﺪﺭﺵ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ‪،‬ﺁﻥ ﮔﺎﻩ ﻳﻚ ﺩﻭﺭﺍﻥ ﺭﻭﻱ ﮔﺮﺓ ‪ z‬ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﻴﻢ‬

‫ﺣﺬﻑ ‪(DELETE) :‬‬


‫ﺣﺬﻑ ﻳﻚ ﮔﺮﻩ ﺩﻗﻴﻘﺎﹰ ﺑﺮﻋﻜﺲ ﺩﺭﺝ ﺁﻥ ﺍﺳﺖ‪ .‬ﻓﺮﺽ ﻛﻨﻴﺪ‪ ،‬ﻣﻲﺧﻮﺍﻫﻴﻢ ﮔﺮﺓ ‪ z‬ﺭﺍ ﺣﺬﻑ ﻛﻨﻴﻢ‪ .‬ﺍﺯ ﺁﻥ ﺟﺎ ﻛﻪ ‪ z‬ﺑﺮﮒ ﻧﻴﺴﺖ‪ ،‬ﺑﺮ ﺭﻭﻱ ﻓﺮﺯﻧﺪ ‪ z‬ﻛﻪ‬
‫ﺍﻭﻟﻮﻳﺖ ﻛﻤﺘﺮﻱ ﺩﺍﺭﺩ‪ ،‬ﻳﻚ ﺩﻭﺭﺍﻥ ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﻴﻢ‪ .‬ﺍﻳﻦ ﻛﺎﺭ ﺑﺎﻋﺚ ﻣﻲﺷﻮﺩ ‪ z‬ﻳﻚ ﻭﺍﺣﺪ ﺑﻪ ﺳﻤﺖ ﭘﺎﺋﻴﻦ ﺑﺮﻭﺩ ﻭ ﻓﺮﺯﻧﺪ ﺑﺎ ﺍﻭﻟﻮﻳﺖ ﻛﻤﺘﺮﺵ ﻳﻚ ﻭﺍﺣﺪ‬
‫ﺑﻪ ﺳﻤﺖ ﺑﺎﻻ ﺑﻴﺎﻳﺪ‪ .‬ﻣﺎ ﺑﺎﻳﺪ ﺁﻥ ﻓﺮﺯﻧﺪﻱ ﺍﺯ ‪ z‬ﺭﺍ ﺑﺮﺍﻱ ﺩﻭﺭﺍﻥ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﻢ ﻛﻪ ﺧﻮﺍﺹ ‪ Heap‬ﺭﺍ ﺣﻔﻆ ﻛﻨﺪ‪.‬‬
‫ﺳﭙﺲ ﺯﻣﺎﻧﻲ ﻛﻪ ‪ z‬ﺑﺮﮒ ﺷﺪ‪ ،‬ﺍﺯ ﺩﺭﺧﺖ ﺣﺬﻑ ﻣﻲﺷﻮﺩ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۱۴‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪) Hash‬ﺩﺭ ﻫﻢﺳﺎﺯﻱ(‪:‬‬


‫ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﻛﺮﺩﻩ ﻛﻠﻴﺪﻫﺎ ﺩﻭ ﺭﺍﻩ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪:‬‬
‫‪ (۲‬ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ‬ ‫‪ (۱‬ﺟﺪﻭﻝ ﺁﺩﺭﺱﺩﻫﻲ ﻣﺴﺘﻘﻴﻢ‬
‫ﺟﺪﻭﻝ ﺁﺩﺭﺱﺩﻫﻲ ﻣﺴﺘﻘﻴﻢ‪ :‬ﺩﺭ ﺟﺪﻭﻝ ﺁﺩﺭﺱﺩﻫﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺍﺯﺍﻱ ﻫﺮ ﻛﻠﻴﺪ ﺩﺭ ﻣﺠﻤﻮﻋﺔ ﻣﺮﺟﻊ‪ ،‬ﻣﺘﻨﺎﻇﺮﺍﹰ ﻳﻚ ﺧﺎﻧﻪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﻫﻤﺔ ﺍﻋﻤﺎﻝ ﺩﺭﺝ‪ ،‬ﺣﺬﻑ ﻭ ﺟﺴﺘﺠﻮ ﺩﺭ ﺯﻣﺎﻥ )‪ O (1‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﻣﻌﺎﻳﺐ‪ ۱:‬ـ ﺍﮔﺮ ﺗﻌﺪﺍﺩ ﻛﻠﻴﺪﻫﺎﻳﻲ ﻛﻪ ﻗﺮﺍﺭ ﺍﺳﺖ ﺫﺧﻴﺮﻩ ﺷﻮﻧﺪ ﻛﻢ ﺑﺎﺷﺪ‪ ،‬ﺣﺎﻓﻈﻪ ﻫﺪﺭ ﻣﻲﺭﻭﺩ‪.‬‬
‫‪ ۲‬ـ ﺑﺮﺍﻱ ﻣﺠﻤﻮﻋﻪﻫﺎﻱ ﻣﺮﺟﻊ ﺧﻴﻠﻲ ﺑﺰﺭﮒ ﺍﻣﻜﺎﻥﭘﺬﻳﺮ ﻧﻴﺴﺖ‪.‬‬

‫ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ‪:‬‬
‫ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻚ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﺓ ﻫﻤﻪ ﻣﻨﻈﻮﺭﻩ ﻧﻴﺴﺖ ﻭ ﺗﻨﻬﺎ ﺑﺮﺍﻱ ﺫﺧﻴﺮﺓ ﺍﻃﻼﻋﺎﺕ ﺑﻪ ﻛﺎﺭ ﻣﻲﺭﻭﺩ ﻭ ﺍﻋﻤﺎﻝ ﻗﺎﺑﻞ ﺍﺟﺮﺍ ﺭﻭﻱ ﺁﻥ ﺩﺭﺝ‪ ،‬ﺣﺬﻑ‬
‫ﻭ ﺟﺴﺘﺠﻮ ﺍﺳﺖ‪.‬‬
‫ﻫﺮ ﻛﻠﻴﺪ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﻚ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺑﻪ ﻳﻚ ﻣﻜﺎﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻣﻲﺷﻮﺩ‪ .‬ﻛﻠﻴﺪ ‪ k‬ﺑﻪ ﻣﻜﺎﻥ ) ‪ h ( k‬ﺩﺭﻫﻢﺳﺎﺯﻱ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﻣﻌﺎﻳﺐ‪ :‬ﺯﻣﺎﻧﻲ ﻛﻪ ﺩﻭ)ﺑﻴﺸﺘﺮ( ﻋﻨﺼﺮ ﺑﻪ ﻳﻚ ﻣﻜﺎﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺷﻮﻧﺪ‪ .‬ﺗﺼﺎﺩﻡ ﺭﺥ ﻣﻲﺩﻫﺪ ﻛﻪ ﺑﺮﺍﻱ ﺣﻞ ﺍﻳﻦ ﻣﺸﻜﻞ ﺩﻭ ﺭﺍﻩ ﺯﻳﺮ ﭘﻴﺸﻨﻬﺎﺩ ﻣﻲﺷﻮﺩ‪:‬‬
‫‪۱‬ـ ﺣﻞ ﺗﺼﺎﺩﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ‬
‫‪۲‬ـ ﺣﻞ ﺗﺼﺎﺩﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ‬

‫ﺩﺭ ﺗﺤﻠﻴﻞ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺍﺯ ﻓﺎﻛﺘﻮﺭ ﻟﻮﺩ ‪ a‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ ﻛﻪ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪n‬‬ ‫ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮ ﺫﺧﻴﺮﻩ ﺷﺪﻩ‬
‫=‪a‬‬ ‫=‬
‫‪m‬‬ ‫ﺗﻌﺪﺍﺩ ﻛﻞ ﻋﻨﺎﺻﺮ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ‬
‫ﺩﺭ ﺗﻮﺯﻳﻊ ﻳﻜﻨﻮﺍﺧﺖ ﻛﻠﻴﺪﻫﺎ ﺑﻪ ‪ m‬ﻣﻜﺎﻥ‪:‬‬
‫‪1‬‬
‫= ﺍﺣﺘﻤﺎﻝ ﺣﻀﻮﺭ ﻫﺮ ﻛﻠﻴﺪ ﺩﺭ ﻳﻚ ﻣﻜﺎﻥ‬
‫‪m‬‬
‫‪n‬‬
‫= ﻣﻴﺎﻧﮕﻴﻦ ﺗﻌﺪﺍﺩ ﺧﺎﻧﻪﻫﺎﻱ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﻱ ‪ n‬ﻛﻠﻴﺪ‬ ‫‪=a‬‬
‫‪m‬‬
‫ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻜﻨﻮﺍﺧﺖ ﺳﺎﺩﻩ‪ :‬ﻫﺮ ﻛﻠﻴﺪ ﺑﺎ ﺍﺣﺘﻤﺎﻝ ﻣﺴﺎﻭﻱ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﻳﻜﻲ ﺍﺯ ﺧﺎﻧﻪﻫﺎﻱ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺷﻮﺩ‪.‬‬

‫ﺣﻞ ﺗﺼﺎﺩﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ‪:‬‬


‫ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﻫﻤﺔ ﻋﻨﺎﺻﺮﻱ ﻛﻪ ﺑﻪ ﻳﻚ ﻣﻜﺎﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻣﻲﺷﻮﻧﺪ ﺩﺭ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ ﺧﺎﺭﺝ ﺍﺯ ﺟﺪﻭﻝ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﻧﺪ ﻛﻪ ﺩﺭ ﺧﺎﻧﺔ ﻣﺘﻨﺎﻇﺮ‬
‫ﺁﻥ ﺩﺭ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻚ ﺍﺷﺎﺭﮔﺮ ﺑﻪ ﺍﺑﺘﺪﺍﻱ ﻟﻴﺴﺖ ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۱۵‬‬

‫‪. q æç‬‬
‫‪nö‬‬
‫÷‬ ‫ﻗﻀﻴﻪ‪ :‬ﺑﺎ ﻓﺮﺽ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻜﻨﻮﺍﺧﺖ ﺳﺎﺩﻩ‪ ،‬ﻣﺘﻮﺳﻂ ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮﻱ ﻣﻮﻓﻖ ﻭ ﻧﺎﻣﻮﻓﻖ )‪ q ( a + 1‬ﺍﺳﺖ‪ .‬ﻳﻌﻨﻲ‬
‫‪m‬‬
‫‪è ø‬‬
‫)‪q (1‬‬ ‫‪ (۱ ü‬ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ‪ :‬ﻫﺮ ﻋﻨﺼﺮ ﺑﻪ ﻳﻚ ﻣﻜﺎﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺷﻮﺩ‪.‬‬
‫‪ï‬‬
‫‪ænö‬‬ ‫‪ï‬‬
‫÷ ‪qç‬‬ ‫‪۲‬ـ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ‪:‬‬ ‫‪ïï‬‬
‫‪èmø‬‬ ‫‪ý‬‬ ‫ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮ‬
‫‪۳‬ـ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ‪ :‬ﻫﻤﺔ ﻋﻨﺎﺻﺮ ﺑﻪ ﻳﻚ ﻣﻜﺎﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺷﻮﻧﺪ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮ ﻳﻚ ﻋﻨﺼﺮ ﻣﺘﻨﺎﺳﺐ ﺑﺎ‬ ‫‪ï‬‬
‫‪ï‬‬
‫ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮﻱ ﻳﻚ ﻋﻨﺼﺮ ﺩﺭ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ ‪ n‬ﻋﻨﺼﺮﻱ ﺍﺳﺖ‪q ( n ) .‬‬ ‫‪ï‬‬
‫‪ïþ‬‬
‫ﺍﮔﺮ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ‪ ،‬ﻳﻚﻃﺮﻓﻪ ﺑﺎﺷﺪ ﺯﻣﺎﻥ ﺣﺬﻑ ﺑﺎ ﺟﺴﺘﺠﻮ ﺑﺮﺍﺑﺮ ﻣﻲﺷﻮﺩ‪ .‬ﺍﮔﺮ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ ﺩﻭﻃﺮﻓﻪ ﺑﺎﺷﺪ‪ ،‬ﺯﻣﺎﻥ ﺣﺬﻑ )‪ q (1‬ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺯﻣﺎﻥ ﺩﺭﺝ‪ ،‬ﻫﻤﻮﺍﺭﻩ )‪ q (1‬ﺍﺳﺖ‪) .‬ﺩﺭﺝ ﺍﺑﺘﺪﺍﻱ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ(‬
‫ﺩﺭ ﺭﻭﺵ ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ‪ ،‬ﺍﺯ ﺁﻧﺠﺎﻛﻪ ﻫﺮ ﻋﻨﺼﺮ ﺧﺎﺭﺝ ﺍﺯ ﺟﺪﻭﻝ ﻧﮕﻪﺩﺍﺭﻱ ﻣﻲﺷﻮﺩ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻓﺎﻛﺘﻮﺭ ﻟﻮﺩ‪ ، a ،‬ﻣﻲﺗﻮﺍﻧﺪ ﺑﻴﺸﺘﺮ‪ ،‬ﻣﺴﺎﻭﻱ ﻳﺎ ﻛﻤﺘﺮ ﺍﺯ ‪1‬‬
‫ﺑﺎﺷﺪ‪.‬‬

‫ﺣﻞ ﺗﺼﺎﺩﻡ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ‪:‬‬


‫ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ‪ ،‬ﻫﻤﺔ ﻛﻠﻴﺪﻫﺎﻱ ﻭﺍﻗﻌﻲ ﺩﺭ ﺧﻮﺩ ﺟﺪﻭﻝ ﺫﺧﻴﺮﻩ ﻣﻲﺷﻮﻧﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺭ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﺎ ﻳﻚ ﻛﻠﻴﺪ ﻭﺍﻗﻌﻲ ﺍﺳﺖ ﻳﺎ ‪ .NIL‬ﻟﺬﺍ ﺩﺭ‬
‫‪n‬‬
‫= ‪ a‬ﻣﻲﺗﻮﺍﻧﺪ ﺣﺪﺍﻛﺜﺮ ‪ 1‬ﺷﻮﺩ‪ .‬ﺯﻣﺎﻧﻲﻛﻪ ‪ a = 1‬ﺟﺪﻭﻝ ﭘﺮ ﺍﺳﺖ‪.‬‬ ‫ﺍﻳﻦ ﺭﻭﺵ ﻓﺎﻛﺘﻮﺭﻟﻮﺩ‬
‫‪m‬‬
‫ﺩﺭ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﺑﺮﺍﻱ ﺩﺭﺝ ﻳﻚ ﻛﻠﻴﺪ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻭﺍﺭﺳﻲ ﺧﻄﻲ‪ ،‬ﺍﺑﺘﺪﺍ ﻣﻜﺎﻧﻲ ﻛﻪ ﺑﻪ ﺁﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺷﺪﻩ ﺍﺳﺖ ﺑﺮﺭﺳﻲ ﻣﻲﮔﺮﺩﺩ ﻭ ﺍﮔﺮ ﭘﺮ‬
‫ﺑﺎﺷﺪ ﺁﻥﮔﺎﻩ ﺧﺎﻧﻪﻫﺎﻱ ﺑﻌﺪﻱ ﺁﻥﻗﺪﺭ ﻣﻮﺭﺩ ﺑﺮﺭﺳﻲ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﻧﻨﺪ ﺗﺎ ﺍﻭﻟﻴﻦ ﺧﺎﻧﺔ ﺧﺎﻟﻲ ﭘﻴﺪﺍ ﺑﺸﻮﺩ ﻛﻪ ﻛﻠﻴﺪ ﺩﺭ ﺁﻥ ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ‪.‬‬

‫‪1‬‬
‫ﺍﺳﺖ‪.‬‬ ‫ﺩﺭ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﺑﺎ ﻓﺮﺽ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻜﻨﻮﺍﺧﺖ ﺳﺎﺩﻩ‪ ،‬ﻣﺘﻮﺳﻂ ﺑﺮﺭﺳﻲﻫﺎ ﺩﺭ ﻳﻚ ﺟﺴﺘﺠﻮﻱ ﻧﺎﻣﻮﻓﻖ ﺣﺪﺍﻛﺜﺮ‬
‫‪1- a‬‬
‫‪1‬‬
‫ﺑﺮﺭﺳﻲ‬ ‫ﺩﺭ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﺑﺎ ﻓﺮﺽ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻜﻨﻮﺍﺧﺖ ﺳﺎﺩﻩ‪ ،‬ﺩﺭﺝ ﻳﻚ ﻋﻨﺼﺮ ﺑﺎ ﻓﺎﻛﺘﻮﺭ ﻟﻮﺩ ‪ ، a‬ﺣﺎﻟﺖ ﻣﻴﺎﻧﮕﻴﻦ ﺣﺪﺍﻛﺜﺮ ﺑﻪ‬
‫‪1- a‬‬
‫ﻧﻴﺎﺯ ﺩﺍﺭﺩ‪.‬‬
‫ﺩﺭ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﺑﺎ ﻓﺮﺽ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻜﻨﻮﺍﺧﺖ ﺳﺎﺩﻩ ﻭ ‪ ، a < 1‬ﺗﻌﺪﺍﺩ ﺑﺮﺭﺳﻲﻫﺎ ﺩﺭ ﻳﻚ ﺟﺴﺘﺠﻮﻱ ﻣﻮﻓﻖ ﺣﺪﺍﻛﺜﺮ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‬
‫‪1‬‬ ‫‪1‬‬
‫‪. Ln‬‬
‫‪a‬‬ ‫‪1- a‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۱۶‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﻣﺮﺗﺐﺳﺎﺯﻱ‬
‫ﺗﻮﺿﻴﺤﺎﺕ‬ ‫ﺗﻌﺪﺍﺩ ﮔﺬﺭ‬ ‫ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ‬ ‫ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ‬ ‫ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ‬ ‫ﺭﻭﺵ ﻣﺮﺗﺐﺳﺎﺯﻱ‬

‫ﻣﺘﻌﺎﺩﻝ ـ ﺩﺭﺟﺎ‬
‫) (‬
‫‪O n2‬‬
‫) (‬
‫‪O n‬‬ ‫‪2‬‬ ‫) (‬
‫‪O n2‬‬
‫‪ -۱‬ﺣﺒﺎﺑﻲ‬
‫‪n -1‬‬
‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ ﻣﻌﻜﻮﺱ‬ ‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ‬

‫ﻧﺎﻣﺘﻌﺎﺩﻝ ـ ﺩﺭﺟﺎ‬
‫) (‬
‫‪O n2‬‬
‫) (‬
‫‪O n‬‬ ‫‪2‬‬ ‫) (‬
‫‪O n2‬‬
‫‪ -۲‬ﺍﻧﺘﺨﺎﺑﻲ‬
‫‪n -1‬‬
‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ ﻣﻌﻜﻮﺱ‬ ‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ‬

‫ﻣﺘﻌﺎﺩﻝ ـ ﺩﺭﺟﺎ‬
‫) (‬
‫‪O n2‬‬
‫) (‬
‫‪O n2‬‬
‫)‪O(n‬‬
‫‪ -۳‬ﺩﺭﺟﻲ‬
‫‪n -1‬‬ ‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ‬
‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ ﻣﻌﻜﻮﺱ‬

‫ﺑﺮﺍﻱ ﺁﺭﺍﻳﻪﻫﺎﻱ ﻛﻮﭼﻚ ﻭ ﺗﻘﺮﻳﺒﺎﹰ ﻣﺮﺗﺐ‪ ،‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﺩﺭﺟﻲ ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ ﺍﺳﺖ‪.‬‬ ‫·‬

‫ﺣﺎﻟﺖ‬ ‫ﺭﻭﺵ‬
‫ﺗﻮﺿﻴﺤﺎﺕ‬ ‫ﻣﻌﺎﺩﻟﻪ ﺑﺎﺯﮔﺸﺘﻲ‬ ‫ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ‬ ‫ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ‬
‫ﻣﺘﻮﺳﻂ‬ ‫ﻣﺮﺗﺐﺳﺎﺯﻱ‬
‫ﻏﻴﺮ ﺩﺭﺟﺎ ـ‬ ‫) ‪O ( n log n‬‬
‫‪ænö‬‬ ‫) ‪O ( n log n‬‬ ‫) ‪O ( n log n‬‬
‫ﻣﺘﻌﺎﺩﻝ‬ ‫) ‪T ( n ) = 2T ç ÷ + O ( n‬‬ ‫‪n‬‬ ‫‪ -۴‬ﺍﺩﻏﺎﻣﻲ‬
‫‪è2ø‬‬ ‫‪n log n - n + 1‬‬ ‫ﺗﻌﺪﺍﺩ ﻣﻘﺎﻳﺴﻪ‪:‬‬ ‫‪log n‬‬ ‫ﺗﻌﺪﺍﺩ ﻣﻘﺎﻳﺴﻪ‪:‬‬
‫ﺗﻘﺴﻴﻢ ﻭ ﻏﻠﺒﻪ‬ ‫‪2‬‬

‫ﺩﺭﺟﺎ ـ‬
‫) (‬
‫‪O n2‬‬ ‫) ‪O ( n log n‬‬
‫) ‪T ( n ) = T ( n - 1) + O ( n‬‬ ‫) ‪O ( n log n‬‬ ‫‪ænö‬‬
‫ﻣﺘﻌﺎﺩﻝ‬ ‫) ‪T ( n ) = 2T ç ÷ + O ( n‬‬ ‫‪ -۵‬ﺳﺮﻳﻊ‬
‫ﺁﺭﺍﻳﻪﻱ ﻭﺭﻭﺩﻱ ﻣﺮﺗﺐ ﻳﺎ ﻣﺮﺗﺐ‬ ‫‪è2ø‬‬
‫ﺗﻘﺴﻴﻢ ﻭ ﻏﻠﺒﻪ‬
‫ﻣﻌﻜﻮﺱ‬

‫ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺳﺮﻳﻊ ﺍﺯ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺑﻬﺘﺮ ﺍﺳﺖ‪.‬‬ ‫·‬
‫ﺍﺯ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﻣﻲﺗﻮﺍﻥ ﺑﺮﺍﻱ ﻟﻴﺴﺖ ﻭﺭﻭﺩﻱ ﻳﻜﻄﺮﻓﻪ ﻭ ﺩﻭﻃﺮﻓﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻣﺮﺗﺒﻪﻱ ﺯﻣﺎﻧﻲ ﺁﻥ‬ ‫·‬
‫) ‪ O ( n log n‬ﻣﻲﺑﺎﺷﺪ‪.‬‬
‫ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺳﺮﻳﻊ ﺍﺯ ‪ PARTITION‬ﻭ ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺍﺯ ‪ MERGE‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ ﻛﻪ ﻣﺮﺗﺒﻪﻱ‬ ‫·‬
‫ﺯﻣﺎﻧﻲ ﻫﺮ ﺩﻭ ) ‪ O ( n‬ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۱۷‬‬

‫ﺗﻮﺿﻴﺤﺎﺕ‬ ‫ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ‬ ‫ﺷﺮﺍﻳﻂ ﻭﺭﻭﺩﻱ‬ ‫ﺭﻭﺵ ﻣﺮﺗﺐﺳﺎﺯﻱ‬

‫ﻏﻴﺮ ﺩﺭﺟﺎ ـ ﺑﺎ ﺑﺮﻗﺮﺍﺭﻱ ﺷﺮﺍﻳﻂ ﻭﺭﻭﺩﻱ ﺩﺭ ﺯﻣﺎﻥ ﺧﻄﻲ‬


‫ﻋﻨﺎﺻﺮ ﻭﺭﻭﺩﻱ ﺍﻋﺪﺍﺩ ﺻﺤﻴﺢ ﺩﺭ‬
‫ﺍﺟﺮﺍ ﻣﻲﺷﻮﺩ‪.‬‬ ‫)‪O(n + k‬‬ ‫‪ -۶‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﺷﻤﺎﺭﺷﻲ‬
‫ﺑﺎﺯﻩﻱ ] ‪ [ 0, k‬ﻛﻪ ) ‪k = O ( n‬‬
‫ﭘﺎﻳﺪﺍﺭ‬

‫ﻏﻴﺮ ﺩﺭﺟﺎ ـ ﭘﺎﻳﺪﺍﺭ‬ ‫ﻋﻨﺎﺻﺮ ﻭﺭﻭﺩﻱ ﺍﻋﺪﺍﺩ ﺻﺤﻴﺢ ‪d‬‬


‫)) ‪O (d ( n + k‬‬
‫ﺑﺎ ﺑﺮﻗﺮﺍﺭﻱ ﺷﺮﺍﻳﻂ ﻭﺭﻭﺩﻱ ﻭ ﺍﮔﺮ ) ‪k = O ( n‬‬ ‫ﺭﻗﻤﻲ ﺩﺭ ﻣﺒﻨﺎﻱ ‪k‬‬ ‫‪ -۷‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﻣﺒﻨﺎﻳﻲ‬
‫ﺁﻥﮔﺎﻩ ﺩﺭ ﺯﻣﺎﻥ ﺧﻄﻲ ﺍﺟﺮﺍ ﻣﻲﺷﻮﺩ‪.‬‬

‫ﻋﻨﺎﺻﺮ ﻭﺭﺩﻱ ﺍﻋﺪﺍﺩ ﺩﺭ ﺑﺎﺯﻩ‬


‫ﺑﺎ ﻓﺮﺽ ﺷﺮﺍﻳﻂ ﻭﺭﻭﺩﻱ ﺩﺭ ﺯﻣﺎﻥ ﺧﻄﻲ ﺍﺟﺮﺍ ﻣﻲﺷﻮﻧﺪ‬
‫)‪O(n‬‬ ‫]‪ [ 0,1‬ﻛﻪ ﺑﺎ ﺗﻮﺯﻳﻊ ﻳﻜﻨﻮﺍﺧﺖ ﺩﺭ‬ ‫‪ -۸‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﭘﻴﻤﺎﻧﻪﺍﻱ‬
‫ﻏﻴﺮ ﺩﺭﺟﺎ ـ ﭘﺎﻳﺪﺍﺭ‬
‫ﭘﻴﻤﺎﻧﻪﻫﺎ‪ ،‬ﺗﻮﺯﻳﻊ ﻣﻲﺷﻮﻧﺪ‬

‫ﺩﺭ ﻣﺮﺗﺐﺳﺎﺯﻱ ﻣﺒﻨﺎﻳﻲ‪ ،‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﻣﻴﺎﻧﻲ ﺣﺘﻤﺎﹰ ﺑﺎﻳﺪ ﭘﺎﻳﺪﺍﺭ ﺑﺎﺷﺪ‪ ،‬ﻟﺬﺍ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺷﻤﺎﺭﺷﻲ ﺍﻧﺘﺨﺎﺏ ﻣﻨﺎﺳﺒﻲ ﻫﺴﺘﻨﺪ‪.‬‬ ‫·‬
‫ﻣﺮﺗﺐﺳﺎﺯﻱﻫﺎ ‪ 1‬ﺗﺎ ‪ ،5‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﻣﻘﺎﻳﺴﻪﺍﻱ ﻫﺴﺘﻨﺪ‪ ،‬ﻳﻌﻨﻲ ﺑﺮﺍﻱ ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﻋﻨﺎﺻﺮ ﻭﺭﻭﺩﻱ ﺍﺯ ﻋﻤﻠﮕﺮ ﻣﻘﺎﻳﺴﻪ ﺍﺳﺘﻔﺎﺩﻩ‬ ‫·‬
‫) ‪W ( n log n‬‬ ‫ﻣﻲﺷﻮﺩ‪ .‬ﺛﺎﺑﺖ ﻣﻲﺷﻮﺩ ﻛﻪ ﺣﺪ ﭘﺎﻳﻴﻦ ﺗﻌﺪﺍﺩ ﻣﻘﺎﻳﺴﻪ‪ ،‬ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ﻣﻘﺎﻳﺴﻪﺍﻱ ﺩﺭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ‬
‫ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﻣﺮﺗﺐﺳﺎﺯﻱﻫﺎﻱ ‪ 8 ،7 ،6‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﻣﻘﺎﻳﺴﻪﺍﻱ ﻧﻴﺴﺘﻨﺪ ﺍﻳﻦ ﻣﺮﺗﺐﺳﺎﺯﻱﻫﺎ ﺍﺯ ﻋﻤﻠﻲ ﻏﻴﺮ ﺍﺯ ﻣﻘﺎﻳﺴﻪ‪ ،‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﻨﺪ‪،‬‬
‫ﻟﺬﺍ ﻗﺎﺑﻞ ﺍﺟﺮﺍ ﺩﺭ ﺯﻣﺎﻥ ﺧﻄﻲ ﻫﺴﺘﻨﺪ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۱۸‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺗﺴﺖ ﻫﺎﻱ ﺳﺎﻝ ﻫﺎﻱ ﮔﺬﺷﺘﻪ ﻛﻨﻜﻮﺭ ﺳﺮﺍﺳﺮﻱ‬

‫ﺩﺭﺧﺖ ﻭ ﮔﺮﺍﻑ‬
‫‪ ۱‬ـ ﺩﺭ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ‪ ،T‬ﺍﮔﺮ ‪ x‬ﮔﺮﻩﻱ ﺑﺮﮒ ﻭ ‪ y‬ﭘﺪﺭ ‪ x‬ﺑﺎﺷﺪ‪ ،‬ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺩﺭ ﻣﻮﺭﺩ ] ‪ b = key [ y ] , a = key [ x‬ﺻﺤﻴﺢ ﺍﺳﺖ؟‬
‫‪ a (۲‬ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ ﺩﺭ ‪ T‬ﺍﺳﺖ ﻛﻪ ﺑﺰﺭﮒﺗﺮ ﺍﺯ ‪ b‬ﺑﺎﺷﺪ‪.‬‬ ‫‪ b (۱‬ﺑﺰﺭﮒﺗﺮﻳﻦ ﻛﻠﻴﺪ ﺩﺭ ‪ T‬ﺍﺳﺖ ﻛﻪ ﻛﻮﭼﻚﺗﺮ ﺍﺯ ‪ a‬ﺑﺎﺷﺪ‪.‬‬
‫‪ (۴‬ﻫﻴﭻﻛﺪﺍﻡ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎﻱ ﺑﺎﻻ ﻫﻤﻮﺍﺭﻩ ﺻﺤﻴﺢ ﻧﻴﺴﺖ‪.‬‬ ‫‪ b (۳‬ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ ﺩﺭ ‪ T‬ﺍﺳﺖ ﻛﻪ ﺑﺰﺭﮒﺗﺮ ﺍﺯ ‪ a‬ﺑﺎﺷﺪ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪.‬‬

‫ﺍﮔﺮ ﮔﺮﻩ ‪ x‬ﻓﺮﺯﻧﺪ ﺭﺍﺳﺖ ﺑﺎﺷﺪ ﺁﻧﮕﺎﻩ ﮔﺰﻳﻨﻪ ﻫﺎﻱ ‪۱‬ﻭ‪ ۲‬ﺻﺤﻴﺢ ﺧﻮﺍﻫﻨﺪ ﺑﻮﺩ ﻭ ﺍﮔﺮ ﮔﺮﻩ ‪ x‬ﻓﺮﺯﻧﺪ ﭼﭗ ﺑﺎﺷﺪ ﮔﺰﻳﻨﻪ ‪ ۳‬ﺻﺤﻴﺢ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ ،‬ﺣﺎﻝ ﺍﺯ‬
‫ﺁﻧﺠﺎﺋﻴﻜﻪ ﺩﺭ ﺳﻮﺍﻝ ﻣﻮﻗﻌﻴﺖ ﮔﺮﻩ ‪ x‬ﻧﺴﺒﺖ ﺑﻪ ﭘﺪﺭ ﻣﺸﺨﺺ ﻧﻴﺴﺖ ﺟﻮﺍﺏ ﺻﺤﻴﺢ ﮔﺰﻳﻨﻪ ‪ ۴‬ﺍﺳﺖ‬
‫‪ ۲‬ـ ﮔﺰﻳﻨﺔ ﻧﺎﺩﺭﺳﺖ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ؟‬
‫‪ (۱‬ﺑﺎ ﺩﺍﺷﺘﻦ ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺩﺭﺧﺖ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ (۲‬ﺑﺎ ﺩﺍﺷﺘﻦ ﻫﺮ ﻳﻚ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ preorder‬ﻳﺎ ‪ postorder‬ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ (۳‬ﺑﺎ ﺩﺍﺷﺘﻦ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ inorder‬ﻭ ‪ preorder‬ﻫﺮ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ (۴‬ﺑﺎ ﺩﺍﺷﺘﻦ ﻫﺮ ﻳﻚ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ Preorder‬ﻳﺎ ‪ Postorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺩﺭﺧﺖ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ‬
‫ﻛﺮﺩ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ ﺑﺎ ﺩﺍﺷﺘﻦ ﻫﺮ ﻳﻚ ﺍﺯ ﺟﻔﺖ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ )‪ (inorder , preorder‬ﻳﺎ )‪ (Postorder , inorder‬ﻳﺎ )‪ (levelorder , inorder‬ﻳﻚ ﺩﺭﺧﺖ‬
‫ﺩﻭﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎﺷﺪ‪ .‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺷﻜﻞ ﺩﺭﺧﺖ ﻣﺸﺨﺺ ﺍﺳﺖ ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺸﻲ ﻣﻲﺗﻮﺍﻥ ﺩﺭﺧﺖ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﻪ ﺟﺰ ﭘﻴﻤﺎﻳﺶ ‪ ،inorder‬ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺶ ﺩﻳﮕﺮ ﻣﻲﺗﻮﺍﻥ ﺩﺭﺧﺖ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬

‫ﻧﻜﺘﻪ ‪ :‬ﺩﺭ ﻫﺮ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺗﻨﻬﺎ ﺑﺎ ﺩﺍﺷﺘﻦ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ Preorder‬ﻭ ‪ Postorder‬ﺑﺪﻭﻥ ﻫﻴﭻ ﺍﻃﻼﻉ ﺍﺿﺎﻓﻲ ﻧﻤﻲﺗﻮﺍﻥ ﺩﺭﺧﺖ ﺭﺍ ﺑﻪﺻﻮﺭﺕ‬
‫ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۱۹‬‬

‫‪ ۳‬ـ ﺑﻪ ﭼﻨﺪ ﺣﺎﻟﺖ ﻋﻨﺎﺻﺮ ﺑﺎ ﻛﻠﻴﺪﻫﺎﻱ ‪ a < b < c < d‬ﺭﺍ ﻣﻲﺗﻮﺍﻥ ﻭﺍﺭﺩ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺗﻬﻲ ﻛﺮﺩ ﺗﺎ ﺩﺭﺧﺘﻲ ﺑـﻪ ﺷـﻜﻞ ﺯﻳـﺮ‬
‫ﺍﻳﺠﺎﺩ ﺷﻮﺩ؟‬
‫‪1 (۱‬‬
‫‪2 (۲‬‬
‫‪3 (۳‬‬
‫‪4 (۴‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺷﻜﻞ ﻛﻠﻲ ﺩﺭﺧﺖ ﺑﺎ ﭼﻬﺎﺭ ﻛﻠﻴﺪ ‪ a < b < c < d‬ﺑﻪ ﺍﻳﻦ ﺻﻮﺭﺕ ﺍﺳﺖ‪:‬‬

‫ﺩﺭ ﻭﺭﻭﺩﻱﻫﺎﻱ ﻣﺠﺎﺯ ﺑﺮﺍﻱ ﺳﺎﺧﺘﻦ ﻫﺮ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮ ‪ ،‬ﮔﺮﻩ ﻭﺍﻟﺪ ﺑﺎﻳﺪ ﺯﻭﺩﺗﺮ ﺍﺯ ﻓﺮﺯﻧﺪﺍﻧﺶ ﺩﺭ ﻭﺭﻭﺩﻱ ﻗﺮﺍﺭ ﮔﻴﺮﺩ ‪ ،‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺩﺭ ﺍﻳﻨﺠﺎ ﮔﺮﻩ‬
‫‪b‬ﺑﺎﻳﺪ ﻗﺒﻞ ﺍﺯ ﮔﺮﻩ ﻫﺎﻱ ‪ a,d‬ﻭ ﮔﺮﻩ ‪ d‬ﺑﺎﻳﺪ ﻗﺒﻞ ﺍﺯ ﮔﺮﻩ ‪ c‬ﺩﺭ ﻭﺭﻭﺩﻱ ﻗﺮﺍﺭ ﮔﻴﺮﺩ‪.‬‬
‫ﻭﺭﻭﺩﻱﻫﺎﻱ ﻣﺠﺎﺯ‪:‬‬
‫‪b,a,d,c‬‬
‫‪b,d,a,c‬‬
‫‪b,d,c,a‬‬
‫‪ ۴‬ـ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺭﺍ ﻧﺸﺎﻥ ﻧﻤﻲﺩﻫﺪ؟ ) ‪ bn‬ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺍﺳﺖ‪(.‬‬
‫‪n -1‬‬
‫‪æ 2n ö 1‬‬
‫÷ ‪bn = ç‬‬
‫‪è n ø n +1‬‬
‫‪(۲‬‬ ‫= ‪bn‬‬ ‫‪å bk bn -1-k‬‬ ‫‪(۱‬‬
‫‪k =0‬‬
‫‪4n‬‬ ‫‪æ‬‬ ‫‪æ 1 öö‬‬
‫(‪2‬‬
‫)‪n -1‬‬
‫‪(۴‬‬ ‫= ‪bn‬‬
‫‪3‬‬ ‫÷ ÷ ‪ç1 + O ç‬‬ ‫‪(۳‬‬
‫‪è‬‬ ‫‪è n øø‬‬
‫‪pn 2‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﻭﻻ ‪ :‬ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺎ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ‪.‬‬
‫‪n -1‬‬
‫ﺛﺎﻧﻴﺎ ‪ :‬ﻣﻲﺗﻮﺍﻥ ﺛﺎﺑﺖ ﻛﺮﺩ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ‪ bn = å bk bn -1-k‬ﺍﺳﺖ‪.‬‬
‫‪k =0‬‬
‫‪æ 2n ö 1‬‬
‫÷ ‪bn = ç‬‬ ‫ﻛﻪ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑﻊ ﻣﻮﻟﺪ ﻭ ﺑﺴﻂ ﺗﻴﻠﻮﺭ ﺛﺎﺑﺖ ﻣﻲﺷﻮﺩ‪:‬‬
‫‪è n ø n +1‬‬
‫‪4n æ‬‬ ‫‪æ 1 öö‬‬
‫= ‪bn‬‬
‫‪3 ç‬‬
‫÷÷ ‪1+ Oç‬‬ ‫ﻫﻢﭼﻨﻴﻦ ﺛﺎﺑﺖ ﻣﻲﺷﻮﺩ‪:‬‬
‫‪è‬‬ ‫‪è n øø‬‬
‫‪pn 2‬‬

‫ﺛﺎﻟﺜﺎ‪ ، 2( n -1) :‬ﺗﻌﺪﺍﺩ ﺩﺭﺧﺘﺎﻥ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻔﺎﻭﺕ ﺑﻪ ﺍﺭﺗﻔﺎﻉ ‪ n - 1‬ﺍﺳﺖ‪.‬‬


‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۲۰‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪ ۵‬ـ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﻭ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﮔﺰﻳﻨﺔ ﻧﺎﺩﺭﺳﺖ ﻛﺪﺍﻡ ﺍﺳﺖ؟‬
‫‪ (۱‬ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﻫﺮ ﻳﻚ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ Preorder ،inorder‬ﻭ ‪ q ( n ) ،Postorder‬ﺍﺳﺖ‪.‬‬
‫‪ (۲‬ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﺭﺍ ﻣﻲﺗﻮﺍﻥ ﺍﺑﺘﺪﺍ ﺑﺎ ﻳﻚ ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ TREE - MINIMUM‬ﻭ ﺳﭙﺲ ‪ n - 1‬ﻓﺮﺍﺧﻮﺍﻧﻲ ‪TREE - SUCCESSOR‬‬
‫ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﻛﺮﺩ ﻛﻪ ﻣﺮﺗﺒﺔ ﺁﻥ ) ‪ q ( n log n‬ﺍﺳﺖ‪.‬‬
‫‪ (۳‬ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﻫﺮ ﻳﻚ ﺍﺯ ﻋﻤﻠﻴﺎﺕ ﺟﺴﺘﺠﻮ‪ ،‬ﺣﺬﻑ‪ ،‬ﺩﺭﺝ‪ ،‬ﻋﻨﺼﺮ ﻣﺎ ﺑﻌﺪ ﻭ ﻋﻨﺼﺮ ﻣﺎ ﻗﺒﻞ ﻳﻚ ﮔﺮﻩﻱ ‪ O ( h ) ،x‬ﺍﺳﺖ‪.‬‬
‫‪ (۴‬ﻣﻲﺗﻮﺍﻥ ﺑﺮﺍﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ‪ n‬ﻛﻠﻴﺪ‪ ،‬ﺍﺑﺘﺪﺍ ﺁﻥﻫﺎ ﺭﺍ ﻳﻜﻲﻳﻜﻲ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺗﻬﻲ ﺩﺭﺝ ﻛﺮﺩﻩ ﻭ ﺳﭙﺲ ﺍﺯ ﭘﻴﻤﺎﻳﺶ ‪inorder‬‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﺑﺘﺪﺍ ﺑﻪ ﺗﻮﺿﻴﺢ ﮔﺰﻳﻨﻪﻫﺎﻱ ‪ ۳ ،۱‬ﻭ ‪ ۴‬ﻣﻲﭘﺮﺩﺍﺯﻳﻢ‪:‬‬
‫ﮔﺰﻳﻨﺔ ‪ :۱‬ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻟﮕﻮﺭﻳﺘﻢﻫﺎﻱ ﭘﻴﻤﺎﻳﺶ ‪ preorder ،inorder‬ﻭ ‪ q ( n ) ،postorder‬ﺍﺳﺖ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪ :۳‬ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻋﻤﺎﻝ ﺟﺴﺘﺠﻮ‪ ،‬ﺣﺬﻑ‪ ،‬ﺩﺭﺝ‪ ،‬ﻋﻨﺼﺮ ﻣﺎﺑﻌﺪ ﻭ ﻋﻨﺼﺮ ﻣﺎﻗﺒﻞ ﻳﻚ ﮔﺮﺓ ‪ O ( h ) ،x‬ﻛﻪ ‪ h‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ﺍﺳﺖ‪.‬‬
‫)ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺩﺭ ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻋﻤﺎﻝ ﻓﻮﻕ‪ ،‬ﻳﻚ ﻣﺴﻴﺮ ﺍﺯ ﺭﻳﺸﻪ ﺗﺎ ﺣﺪﺍﻛﺜﺮ ﻳﻚ ﺑﺮﮒ ﻃﻲ ﻣﻲﺷﻮﺩ ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﺁﻥﻫﺎ ) ‪O ( h‬‬
‫ﺍﺳﺖ ﺩﺭ ﺣﺎﻟﻲﻛﻪ ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢﻫﺎﻱ ﭘﻴﻤﺎﻳﺶ ﺩﺭﺧﺖ‪ ،‬ﻫﺮ ﮔﺮﻩ ﺣﺪﺍﻗﻞ ﻳﻚﺑﺎﺭ ﺑﺮﺭﺳﻲ ﻣﻲﺷﻮﺩ ﭘﺲ ﻣﺮﺗﺒﺔ ﺁﻥ ) ‪ q ( n‬ﺍﺳﺖ(‬
‫ﮔﺰﻳﻨﺔ ‪ :۴‬ﺑﺮﺍﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ‪ n‬ﻛﻠﻴﺪ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﺍﺑﺘﺪﺍ ﺁﻥﻫﺎ ﺭﺍ ﻳﻜﻲﻳﻜﻲ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺗﻬﻲ ﺩﺭﺝ ﻛﺮﺩ ﻛﻪ ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﺁﻥ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫) ‪n O ( h ) = O ( nh‬‬
‫) ‪O ( n log n‬‬ ‫ﺍﺯ ﻃﺮﻓﻲ ﭼﻮﻥ ﺍﺭﺗﻔﺎﻉ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺩﺭ ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ ) ‪ O ( log n‬ﺍﺳﺖ‪ ،‬ﺩﺭﺝ ‪ n‬ﻛﻠﻴﺪ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫ﺩﺭ ﺍﺩﺍﻣﻪ ﻣﻲﺗﻮﺍﻥ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﻴﻤﺎﻳﺶ ‪ ،inorder‬ﻛﻠﻴﺪﻫﺎ ﺭﺍ ﻣﺮﺗﺐ ﻛﺮﺩ‪ .‬ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻣﺮﺗﺒﺔ ﺯﻣﺎﻧﻲ ﺁﻥ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫) ‪O ( n log n ) + q ( n ) = O ( n log n‬‬
‫ﻛﻪ ﺑﻪ ﺍﻳﻦ ﻣﺮﺗﺐﺳﺎﺯﻱ‪ ،‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﺩﺭﺧﺘﻲ ﻧﻴﺰ ﮔﻔﺘﻪ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪ :۲‬ﭘﻴﻤﺎﻳﺶ ‪ inorder‬ﺭﺍ ﻣﻲﺗﻮﺍﻥ ﺍﺑﺘﺪﺍ ﺑﺎ ﻳﻚ ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ TREE – MINIMUM‬ﻭ ﺳﭙﺲ ‪ n - 1‬ﻓﺮﺍﺧﻮﺍﻧﻲ ‪TREE – SUCCESSOR‬‬
‫ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﻛﺮﺩ‪ ،‬ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻣﺮﺗﺒﻪﻱ ﺯﻣﺎﻧﻲ ﺁﻥ ) ‪ q ( n‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ ﻧﻪ ) ‪. q ( n log n‬‬
‫‪ ۶‬ـ ﺗﺎﺑﻊ ﺯﻳﺮ ﭼﻚ ﻣﻲﻛﻨﺪ ﻛﻪ ﺁﻳﺎ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﻋﻨﺎﺻﺮ ﺻﺤﻴﺢ )‪ (int‬ﻭ ﻣﺘﻤﺎﻳﺰ ﻭ ﺑﺎ ﺭﻳﺸﺔ ‪ root‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺍﺳـﺖ‬
‫ﻳﺎ ﺧﻴﺮ؟‬
‫) ‪Bool IsBST ( tree * t‬‬
‫{‬
‫; ) ‪Re turn IsBST ( t, MININT , MAXINT‬‬
‫}‬
‫‪Int‬‬ ‫) ‪IsBST ( tree * t , int min , int max‬‬
‫{‬
‫‪if‬‬ ‫‪( t = = Null ) return‬‬ ‫;‪TRUE‬‬
‫‪if‬‬ ‫‪( t ® data < min‬‬ ‫;‪t ® data > max ) return FALSE‬‬

‫‪Re turn IsBST æç t ® Left Child , .............‬‬ ‫‪B ö & & IsBST æ t ® Right Child C , .............‬‬
‫‪A , .............‬‬ ‫;‪D ö‬‬
‫÷‬ ‫‪ç‬‬ ‫‪.............‬‬ ‫÷‬
‫‪è‬‬ ‫‪ø‬‬ ‫‪è‬‬ ‫‪ø‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۲۱‬‬

‫ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺑﺎﻳﺪ ﺩﺭ ﺟﺎﻱ ﺧﺎﻟﻲ ‪ A‬ﻭ ‪ B‬ﻭ ‪ C‬ﻭ ‪ D‬ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﺷﻮﺩ؟‬
‫‪A = max‬‬ ‫‪B = t ® data‬‬ ‫‪C = t ® data + 1‬‬ ‫‪D = min‬‬ ‫‪(۱‬‬
‫‪A = min‬‬ ‫‪B = t ® data‬‬ ‫‪C = t ® data + 1‬‬ ‫‪D = max‬‬ ‫‪(۲‬‬
‫‪A = t ® data‬‬ ‫‪B = max‬‬ ‫‪C = min‬‬ ‫‪D = t ® data + 1‬‬ ‫‪(۳‬‬
‫‪A = t ® data‬‬ ‫‪B = min‬‬ ‫‪C = max‬‬ ‫‪D = t ® data + 1‬‬ ‫‪(۴‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪:‬‬
‫ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﺎﺯﮔﺸﺘﻲ ﺍﺳﺖ‪ .‬ﺍﺑﺘﺪﺍ ﺑﺮﺭﺳﻲ ﻣﻲﺷﻮﺩ ﻛﻪ ﺭﻳﺸﻪ ﺗﻬﻲ ﻧﺒﺎﺷﺪ‪ .‬ﻣﺘﻐﻴﺮﻫﺎﻱ ‪ min‬ﻭ ‪ max‬ﺑﻪ‬
‫ﺗﺮﺗﻴﺐ ﺣﺎﻭﻱ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ ﻭ ﺑﺰﺭﮒﺗﺮﻳﻦ ﻛﻠﻴﺪ ﻫﺴﺘﻨﺪ‪ .‬ﺯﻣﺎﻧﻲ ﻛﻪ ﺍﺯ ﺭﻳﺸﻪ ﺑﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ‬
‫ﻣﻲﺭﻭﻳﻢ ﺑﻨﺎ ﺑﻪ ﺧﺎﺻﻴﺖ ‪ min ،BST‬ﺑﺎﻳﺪ ﻫﻤﺎﻥ ‪ minint‬ﺑﺎﻗﻲ ﺑﻤﺎﻧﺪ ﺩﺭ ﺣﺎﻟﻲﻛﻪ ‪ max‬ﺑﺎﻳﺪ ﺭﻳﺸﻪ ﺷﻮﺩ‬
‫ﻭ ﺯﻣﺎﻧﻲ ﻛﻪ ﺍﺯ ﺭﻳﺸﻪ ﺑﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ ﻣﻲﺭﻭﻳﻢ ﺑﻨﺎ ﺑﻪ ﺧﺎﺻﻴﺖ ‪ max ،BST‬ﺑﺎﻳﺪ ﻫﻤﺎﻥ ‪maxint‬‬
‫ﺑﺎﻗﻲ ﺑﻤﺎﻧﺪ ﺩﺭ ﺣﺎﻟﻲﻛﻪ ‪ min‬ﺑﺎﻳﺪ ﺭﻳﺸﻪ ﺷﻮﺩ‪ .‬ﺳﭙﺲ ﺑﻪﺻﻮﺭﺕ ﺑﺎﺯﮔﺸﺘﻲ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﺮﺍﻱ ﺩﻭ ﺯﻳﺮ‬
‫ﺩﺭﺧﺖ‪ ،‬ﭼﭗ ﻭ ﺭﺍﺳﺖ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲﺷﻮﺩ‪ .‬ﺑﻪ ﮔﻮﻧﻪﺍﻱ ﻓﺮﺯﻧﺪ ﭼﭗ ﺭﻳﺸﻪ ﺑﻪ ﻋﻨﻮﺍﻥ ﺭﻳﺸﺔ ﺯﻳﺮ ﺩﺭﺧﺖ‬
‫ﭼﭗ ﻭ ﻓﺮﺯﻧﺪ ﺭﺍﺳﺖ ﺭﻳﺸﻪ ﺑﻪ ﻋﻨﻮﺍﻥ ﺭﻳﺸﺔ ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮﻧﺪ‪.‬‬

‫ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ‪ ،‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﻓﺮﺽ ﺷﺪﻩ ﻛﻠﻴﺪﻫﺎ ﻣﺘﻤﺎﻳﺰ ﻫﺴﺘﻨﺪ‪ ،‬ﺯﻣﺎﻧﻲﻛﻪ ﺑﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ ﺭﻳﺸﻪ ﻣﻲﺭﻭﻳﻢ‪ max ،‬ﻣﻲﺗﻮﺍﻧﺪ ﺑﻪ ﺟﺎﻱ ‪،data‬‬
‫‪ t ® data - 1‬ﺷﻮﺩ ﻳﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﺑﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ ﻣﻲﺭﻭﻳﻢ‪ Min .‬ﻣﻲﺗﻮﺍﻧﺪ ‪ t ® min + 1‬ﺷﻮﺩ‪.‬‬
‫‪ ۷‬ـ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﻳﻚ ﺗﺮﺗﻴﺐ ﺩﺭﺳﺖ ﺍﺯ ﺭﺃﺱﻫﺎﻱ ﮔﺮﺍﻑ ﺯﻳﺮ ﺭﺍ ﻛﻪ ﺩﺭ ﺟﺴﺘﺠﻮﻱ ﺍﻭﻝ ـ ﻋﻤﻖ )‪ (Depth-First Search‬ﻋﻼﻣﺖ ﻣﻼﻗـﺎﺕ ﺷـﺪﻥ‬
‫)‪ (Visited‬ﻣﻲﺧﻮﺭﻧﺪ‪ ،‬ﻧﺸﺎﻥ ﻧﻤﻲﺩﻫﺪ؟‬
‫‪ABEDFC‬‬ ‫‪(۲‬‬ ‫‪ABCDEF‬‬ ‫‪(۱‬‬
‫‪ADEFBC (۴‬‬ ‫‪ABDFEC (۳‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﮔﺰﻳﻨﻪﻫﺎ ﺍﺯ ﺭﺃﺱ ‪ A‬ﺷﺮﻭﻉ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫ﻣﺮﺣﻠﻪ‬ ‫ﺭﺋﻮﺱ ﻣﻼﻗﺎﺕ ﺷﺪﻩ‬ ‫ﭘﺸﺘﻪ‬
‫‪1‬‬ ‫‪A‬‬ ‫ﮔﺰﻳﻨﻪ ‪:۲‬‬

‫‪2‬‬ ‫‪A , B‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۲۲‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪3‬‬ ‫‪A , B , E‬‬

‫‪4‬‬ ‫‪A , B , E , D‬‬

‫‪5‬‬ ‫‪A , B , E , D , F‬‬

‫‪6‬‬ ‫‪A , B , E , D , F , C‬‬

‫‪7‬‬ ‫‪A , B , E , D , F , C‬‬ ‫)ﭼﻮﻥ ‪ D‬ﻗﺒﻼﹰ ﻣﻼﻗﺎﺕ ﺷﺪﻩ ﺍﺳﺖ‪،‬‬


‫ﺁﻥ ﺭﺍ ﻣﺠﺪﺩﺍﹰ ﻧﻤﻲﻧﻮﻳﺴﻴﻢ(‬

‫ﮔﺰﻳﻨﻪ ‪:۳‬‬
‫‪1‬‬ ‫‪A‬‬

‫‪2‬‬ ‫‪A , B‬‬

‫‪3‬‬ ‫‪A , B , D‬‬

‫‪4‬‬ ‫‪A , B , D , F‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۲۳‬‬

‫‪5‬‬ ‫‪A , B , D , F , E‬‬

‫‪6‬‬ ‫‪A , B , D , F , E , C‬‬ ‫)ﭼﻮﻥ ‪ D‬ﻗﺒﻼﹰ ﻣﻼﻗﺎﺕ ﺷﺪﻩ‪،‬‬


‫ﻣﺠﺪﺩﺍﹰ ﺁﻥ ﺭﺍ ﻧﻤﻲﻧﻮﻳﺴﻴﻢ(‬

‫‪7‬‬ ‫‪A , B , D , F , E , C‬‬

‫ﮔﺰﻳﻨﻪ ‪:۴‬‬
‫‪1‬‬ ‫‪A‬‬

‫‪2‬‬ ‫‪A , D‬‬

‫‪3‬‬ ‫‪A , D , E‬‬

‫‪4‬‬ ‫‪A , D , E , F‬‬

‫‪5‬‬ ‫‪A , D , E , F , B‬‬

‫‪6‬‬ ‫‪A , D , E , F , B , C‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۲۴‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﮔﺰﻳﻨﻪ ‪:۱‬‬
‫‪1‬‬ ‫‪A‬‬

‫‪2‬‬ ‫‪A , B‬‬

‫ﻳﺎ‬

‫ﭘﺲ ﺍﺯ ﻣﻼﻗﺎﺕ ﮔﺮﻣﺎﻱ ‪ ،B‬ﺑﺎﻳﺪ ﻳﻜﻲ ﺍﺯ ﮔﺮﻩ ‪ E‬ﻳﺎ ‪ D‬ﻣﻼﻗﺎﺕ ﺷﻮﻧﺪ‪.‬‬


‫‪ ۸‬ـ ﺍﮔﺮ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﺷﺪ‪ ،‬ﺁﻥﮔﺎﻩ ﭘﻴﻤﺎﻳﺶ ﭘﺲ ﺗﺮﺗﻴﺐ ﺁﻥ ﻛﺪﺍﻡ ﺍﺳﺖ؟‬
‫‪‬‬
‫‪Preorden : 40 , 30 , 10 , 20 , 80 , 70 , 50 , 60‬‬
‫‪10 , 20 , 30 , 40 , 50 , 60 , 70 , 80‬‬ ‫‪(۲‬‬ ‫‪40 , 10 , 20 , 30 , 50 , 70 , 60 , 80‬‬ ‫‪(۱‬‬
‫‪40 , 30 , 10 , 20 , 80 , 70 , 50 , 60 (۴‬‬ ‫‪20 , 10 , 30 , 60 , 50 , 70 , 80 , 40 (۳‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺎ ﻫﺮ ﻳﻚ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ Postorder , Preorder‬ﻭ ‪ Levdorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫ﺑﺎ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﺩﺍﺩﻩ ﺷﺪﻩ‪ ،‬ﺷﻜﻞ ﺩﺭﺧﺖ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪:‬‬

‫‪Preorder : 40 , 30 , 10 , 20 , 80 , 70 , 50 , 60‬‬
‫‪Postorder : 20 , 10 , 30 , 60 , 50 , 70 , 80 , 40‬‬
‫ﺭﺍﻩ ﺣﻞ ﺗﺴﺘﻲ‪ :‬ﺩﺭ ﺭﻭﺵ ﭘﺲﺗﺮﺗﻴﺐ ﺭﻳﺸﻪ ﺁﺧﺮﻳﻦ ﮔﺮﻩﺍﻱ ﺍﺳﺖ ﻛﻪ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ‪ ،‬ﺍﺯ ﻃﺮﻓﻲ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ﭘﻴﺶﺗﺮﺗﻴﺐ ﺍﻭﻟﻴﻦ ﮔﺮﻩﺍﻱ ﺍﺳﺖ ﻛﻪ‬
‫ﺩﺭ ﺍﺑﺘﺪﺍ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ ﺑﻨﺎﺑﺮﺍﻳﻦ ‪ 40‬ﺭﻳﺸﻪ ﺍﺳﺖ‪ ،‬ﭘﺲ ﺑﺎﻳﺪ ﺩﺭ ﮔﺰﻳﻨﻪﻫﺎ‪ ،‬ﺁﻥ ﮔﺰﻳﻨﻪﺍﻱ ﻛﻪ ‪ 40‬ﺩﺭ ﺁﺧﺮ ﺩﻳﺪﻩ ﻣﻼﻗﺎﺕ ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﺍﻧﺘﺨﺎﺏ ﺷﻮﺩ‪.‬‬
‫‪ ۹‬ـ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﺍﻱ ﺭﺍ ﺑﺮ ﺭﻭﻱ ﻣﺠﻤﻮﻋﺔ ‪ A‬ﺍﺯ ﺍﻋﺪﺍﺩ ﺻﺤﻴﺢ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳـﺪ‪ .‬ﻛـﻪ ﺍﻋﻤـﺎﻝ ﺩﺭﺝ )‪ ،(insert‬ﺣـﺬﻑ )‪ (delete‬ﻭ ﭘﻴـﺪﺍ ﻛـﺮﺩﻥ‬
‫ﻧﺰﺩﻳﻚﺗﺮﻳﻦ )‪ (Find closest‬ﺭﺍ ﻓﺮﺍﻫﻢ ﻣﻲﺁﻭﺭﺩ‪ .‬ﻣﻨﻈﻮﺭ ﺍﺯ ‪ Find closest‬ﭘﻴﺪﺍ ﻛﺮﺩﻥ ‪ y Î A‬ﺍﺳﺖ ﻛﻪ ) ‪ ( x - y‬ﻧﺴﺒﺖ ﺑﻪ ﺑﻘﻴﻪ ‪y‬ﻫﺎ ﻛﻤﻴﻨـﻪ‬
‫ﺑﺎﺷﺪ‪ .‬ﻓﺮﺽ ﻛﻨﻴﺪ ‪ T‬ﺑﻴﺸﺘﺮﻳﻦ ﺯﻣﺎﻥ ﺍﺟﺮﺍﻱ ﺍﻋﻤﺎﻝ ﻓﻮﻕ ﺩﺭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺑﺎﺷﺪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻛﺪﺍﻡ ﺳـﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﻛـﻢﺗـﺮﻳﻦ ﻣﻘـﺪﺍﺭ ‪T‬‬

‫ﺧﻮﺍﻫﺪ ﺩﺍﺷﺖ؟‬
‫‪ (۲‬ﻟﻴﺴﺖ ﻧﺎﻣﺮﺗﺐ‬ ‫‪ (۱‬ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻮﺍﺯﻥ‬
‫‪heap (۴‬‬ ‫‪ (۳‬ﻟﻴﺴﺖ ﻣﺮﺗﺐ‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۲۵‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺑﻪ ﺑﺮﺭﺳﻲ ﺗﻚﺗﻚ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ﻣﻲﭘﺮﺩﺍﺯﻳﻢ‪:‬‬
‫ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻮﺍﺯﻥ‪:‬‬
‫ﺍﻋﻤﺎﻝ ﺣﺬﻑ ﻭ ﺩﺭﺝ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ O ( h ) ،h‬ﺍﺳﺖ‪ .‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺍﺭﺗﻔﺎﻉ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻮﺍﺯﻥ‬
‫ﻫﻤﻮﺍﺭﻩ ) ‪ q ( logn‬ﺍﺳﺖ‪ ،‬ﻟﺬﺍ ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻋﻤﺎﻝ ﺣﺬﻑ ﻭ ﺩﺭﺝ ﺩﺭ ﺯﻣﺎﻥ ) ‪ q ( log n‬ﺍﺟﺮﺍ ﻣﻲﺷﻮﻧﺪ‪ .‬ﺍﺯ ﻃﺮﻓﻲ ﺑﺮﺍﻱ ﮔﺮﻩﻱ ‪ x‬ﻋﻤﻞ ‪y ،Find closest‬‬
‫ﻳﺎ ﻋﻨﺼﺮ ﻣﺎﺑﻌﺪ ﻳﺎ ﻋﻨﺼﺮ ﻣﺎﻗﺒﻞ ﺍﺳﺖ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻋﻨﺼﺮ ‪ y‬ﺩﺭ ﺯﻣﺎﻥ ) ‪ q ( log n‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪ .‬ﻟﺬﺍ ﻫﺮ ﺳﻪﻱ ﺍﻳﻦ ﺍﻋﻤﺎﻝ ﺩﺭ ﺍﻳﻦ‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﺩﺭ ﺯﻣﺎﻥ ) ‪ q ( log n‬ﻗﺎﺑﻞ ﺍﺟﺮﺍ ﺍﺳﺖ‪.‬‬
‫ﻟﻴﺴﺖ ﻧﺎﻣﺮﺗﺐ‪:‬‬
‫ﺩﺭﺝ ﺩﺭ ﻳﻚ ﻟﻴﺴﺖ ﻧﺎﻣﺮﺗﺐ ﺩﺭ ﺯﻣﺎﻥ )‪ q (1‬ﺍﻧﺠﺎﻡ ﭘﺬﻳﺮ ﺍﺳﺖ‪ .‬ﺩﺭ ﺣﺎﻟﻲﻛﻪ ﺑﺮﺍﻱ ﺣﺬﻑ ﺯﻣﺎﻥ ) ‪ q ( n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪ n ).‬ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ( ﺍﺯ‬
‫ﻃﺮﻓﻲ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﮔﺮﻩﻱ ‪ y‬ﺑﺮﺍﻱ ﻋﻤﻞ ‪ ،Find closest‬ﻧﻴﺎﺯ ﺑﻪ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﺩﺭ ﻟﻴﺴﺖ ﺍﺳﺖ ﻭ ﺯﻣﺎﻥ ) ‪ q ( n‬ﻧﻴﺎﺯ ﺩﺍﺭﺩ‪.‬‬
‫ﻟﻴﺴﺖ ﻣﺮﺗﺐ‪:‬‬
‫ﺣﺬﻑ ﺩﺭ ﻳﻚ ﻟﻴﺴﺖ ﻣﺮﺗﺐ ﺩﺭ ﺯﻣﺎﻥ )‪ q (1‬ﺍﻧﺠﺎﻡ ﭘﺬﻳﺮ ﺍﺳﺖ‪ .‬ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ ﺑﺮﺍﻱ ﺩﺭﺝ ﺯﻣﺎﻥ ) ‪ O ( n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪ n) .‬ﺗﻌﺪﺍﺩ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ( ﺍﺯ‬
‫ﻃﺮﻓﻲ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﮔﺮﻩﻱ ‪ y‬ﺑﺮﺍﻱ ﻋﻤﻞ )‪ ،Find closest (x‬ﮔﺮﻩ ﺑﻌﺪﻱ ﺩﺭ ﺯﻣﺎﻥ )‪ q (1‬ﻭ ﮔﺮﺓ ﻗﺒﻠﻲ ﺑﺎ ﭘﻴﻤﺎﻳﺶ ﺍﺯ ﺍﺑﺘﺪﺍ ﺩﺭ ﺯﻣﺎﻥ ) ‪q ( n‬‬
‫ﺑﻪﺩﺳﺖ ﻣﻲﺁﻳﺪ‪.‬‬
‫‪:Heap‬‬
‫ﺩﺭﺝ ﻭ ﺣﺬﻑ ﻳﻚ ﮔﺮﻩ ﺩﺭ ‪ heap‬ﺩﺭ ﺯﻣﺎﻥ ) ‪ q ( logn‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ ﻭﻟﻲ ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﻓﺮﺯﻧﺪﺍﻥ ﻳﻚ ﮔﺮﻩ ﺗﺮﺗﻴﺐ ﻣﺸﺨﺼﻲ ﻧﺪﺍﺭﻧﺪ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ‪y‬‬
‫ﺑﺮﺍﻱ )‪ Find closest (x‬ﻧﻴﺎﺯ ﺑﻪ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﺩﺭ ﺁﺭﺍﻳﻪ ﺍﺳﺖ ﻛﻪ ﺯﻣﺎﻥ ) ‪ q ( n‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪ ۱۰‬ـ ﻳﻚ ‪ Max – Heap‬ﺑﺎ ‪ n‬ﻋﻨﺼﺮ ﺑﻪﺻﻮﺭﺕ ﺁﺭﺍﻳﻪ ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﺷﺪﻩ ﺍﺳﺖ‪) .‬ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ ﺩﺭ ﺭﻳﺸﻪ ﺍﺳﺖ(‪ .‬ﻣﻨﺎﺳﺐﺗـﺮﻳﻦ ﮔﺰﻳﻨـﻪ ﺭﺍ ﺑـﺮﺍﻱ‬
‫ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ ﺩﺭ ﺍﻳﻦ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﻛﺪﺍﻡ ﺍﺳﺖ؟‬
‫‪ (۱‬ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﻫﻤﻮﺍﺭﻩ ﻣﻲﺗﻮﺍﻥ ﺑﺎ ) ‪ O ( logn‬ﻣﻘﺎﻳﺴﺔ ﺑﻴﻦ ﻋﻨﺎﺻﺮ ‪ heap‬ﺍﻧﺠﺎﻡ ﺩﺍﺩ‪.‬‬
‫‪n‬‬
‫ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ ‪ heap‬ﻧﻴﺎﺯ ﺩﺍﺭﺩ‪.‬‬ ‫‪ (۲‬ﺍﻳﻦ ﻛﺎﺭ ﺣﺪﺍﻛﺜﺮ ﺑﻪ‬
‫‪2‬‬
‫‪ (۳‬ﺍﻳﻦ ﻛﺎﺭ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﻪ ‪ n - 1‬ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ ‪ heap‬ﻧﻴﺎﺯ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪ (۴‬ﺗﻨﻬﺎ ﺩﺭ ﺻﻮﺭﺗﻲﻛﻪ ‪ heap‬ﻋﻨﺎﺻﺮ ﺗﻜﺮﺍﺭﻱ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﺑﺎ ) ‪ O ( logn‬ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ ‪ heap‬ﺍﻧﺠﺎﻡ ﺩﺍﺩ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ‪ Max – Heap‬ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ ﻗﻄﻌﺎﹰ ﺩﺭ ﺑﺮﮒ ﺍﺳﺖ‪ .‬ﭼﺮﺍ ﻛﻪ ﻫﻴﭻ ﮔﺮﻩ ﺑﺎ ﻛﻠﻴﺪ ﻛﻤﺘﺮﻱ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ ﻛﻪ ﻓﺮﺯﻧﺪ ﺁﻥ ﺑﺎﺷﺪ‪ ،‬ﺍﺯ ﻃﺮﻓﻲ ﺍﻧﺪﻳﺲ‬

‫ﺑﺮﮒﻫﺎ ﺩﺭ ﻳﻚ ‪ heap‬ﺑﺎ ‪ n‬ﻋﻨﺼﺮ ‪ êê úú + 1 , êê úú + 2 , . . . , n‬ﺍﺳﺖ‪ .‬ﻟﺬﺍ ﺗﻨﻬﺎ ﺑﺎﻳﺪ ﺑﻴﻦ ﺧﺎﻧﻪﻫﺎﻱ ﺁﺭﺍﻳﻪ ﺑﺎ ﺍﻳﻦ ﺍﻧﺪﻳﺲﻫﺎ ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‬
‫‪n‬‬ ‫‪n‬‬
‫‪ë2û‬‬ ‫‪ë2û‬‬
‫‪n‬‬
‫ﻣﻘﺎﻳﺴﻪ ﻋﻨﺼﺮ ﻣﻴﻨﻤﻢ ﭘﻴﺪﺍ ﻣﻲﺷﻮﺩ‪.‬‬ ‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺗﻨﻬﺎ ﺩﺭ‬
‫‪2‬‬
‫‪ ۱۱‬ـ ﺩﺭ ﻳﻚ ‪ Min – Heap‬ﺑﺎ ‪ N‬ﻋﻨﺼﺮ ﻣﺘﻤﺎﻳﺰ‪ ،‬ﻛﻪ ﺑﺎ ﻳﻚ ﺁﺭﺍﻳﻪ ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﺷﺪﻩ ﺍﺳـﺖ‪ ،‬ﺳـﻮﻣﻴﻦ ﻛﻮﭼـﻚﺗـﺮﻳﻦ ﻋﻨﺼـﺮ ﺩﺭ ﻛـﺪﺍﻡ ﻳـﻚ ﺍﺯ‬
‫ﺩﺭﺍﻳﻪﻫﺎﻱ ﺯﻳﺮ ﻧﻤﻲﺗﻮﺍﻧﺪ ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ؟‬
‫‪3,5, 7‬‬ ‫‪(۴‬‬ ‫‪2,3,7‬‬ ‫‪(۳‬‬ ‫‪4,5,7‬‬ ‫‪(۲‬‬ ‫‪6,7,8‬‬ ‫‪(۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۲۶‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ ﺩﺭ ﻳﻚ ‪ Min – Heap‬ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪) h‬ﻳﺎ ﻳﻚ ‪ Max – Heap‬ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ (h‬ﻣﻴﻨﻤﻢ ‪r‬ﺍﻡ )ﻳﺎ ﻣﺎﻛﺰﻳﻤﻢ‪r‬ﺍﻡ( ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺧﺎﻧﻪﻫﺎﻱ‬
‫‪ éë 2 . . . 2r - 1ùû‬ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻃﺒﻖ ﺳﺆﺍﻝ‪ ،‬ﺳﻮﻣﻴﻦ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻋﻨﺼﺮ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺧﺎﻧﻪﻫﺎﻱ ‪ éë 2 . . . 23 - 1ùû‬ﻳﻌﻨﻲ ]‪ [ 2 . . . 7‬ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ‪.‬‬

‫‪ ۱۲‬ـ ﮔﺰﻳﻨﺔ ﻧﺎﺩﺭﺳﺖ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ؟‬


‫‪ (۱‬ﺩﺭ ﻫﺮ ‪ heap‬ﺑﺎ ‪ n‬ﮔﺮﻩ‪ ،‬ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻋﻤﺎﻝ ﺩﺭﺝ‪ ،‬ﺣﺬﻑ ﻭ ﺍﻓﺰﺍﻳﺶ ﻛﻠﻴﺪ ﻳﻚ ﮔﺮﻩ‪ ،‬ﺯﻣﺎﻧﻲ ) ‪ O ( logn‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪é n ù‬‬
‫‪ ê‬ﮔﺮﻩ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬ ‫‪ú‬‬ ‫‪ (۲‬ﺩﺭ ﻫﺮ ‪ heap‬ﺑﺎ ‪ n‬ﮔﺮﻩ‪ ،‬ﺣﺪﺍﻛﺜﺮ‬
‫‪ê 2h +1 ú‬‬
‫‪ (۳‬ﺍﺯ ‪ ،heap‬ﺩﺭ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺁﺭﺍﻳﻪ‪ ،‬ﺻﻒ ﺍﻭﻟﻮﻳﺖ ﻭ ﺍﺩﻏﺎﻡ ﻟﻴﺴﺖﻫﺎﻱ ﻣﺮﺗﺐ )ﺑﻪ ﻛﻤﻚ ﺩﺭﺧﺖ ﺍﻧﺘﺨﺎﺑﻲ ‪ (Min – Heap‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ‪.‬‬
‫‪ (۴‬ﺍﺩﻏﺎﻡ ‪ k‬ﻟﻴﺴﺖ ﻣﺮﺗﺐ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ Min – Heap‬ﻛﻪ ﻣﺠﻤﻮﻉ ﻛﻞ ﻋﻨﺎﺻﺮ ‪ k‬ﻟﻴﺴﺖ ‪ n‬ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( nk‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﻳﻚ ‪ ،heap‬ﻫﺮ ﻳﻚ ﺍﺯ ﺍﻋﻤﺎﻝ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( logn‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪:‬‬
‫)‪ :INCREASE(x‬ﻣﻘﺪﺍﺭ ﻛﻠﻴﺪ ﮔﺮﺓ ‪ x‬ﺭﺍ ﺍﻓﺰﺍﻳﺶ ﻣﻲﺩﻫﺪ‪.‬‬
‫)‪ :INSERT(x‬ﺩﺭﺝ ﮔﺮﻩ ﺑﺎ ﻛﻠﻴﺪ ‪ x‬ﺩﺭ ﻳﻚ ‪.heap‬‬
‫)‪:DELETE(x‬ﺣﺬﻑ ﮔﺮﺓ ﺭﻳﺸﻪ ﺍﺯ ﻳﻚ ‪.heap‬‬
‫‪é n ù‬‬
‫‪ ê‬ﮔﺮﻩ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬ ‫‪ú‬‬ ‫ﺩﺭ ﻫﺮ ‪ heap‬ﺑﺎ ‪ n‬ﮔﺮﻩ‪ ،‬ﺣﺪﺍﻛﺜﺮ‬
‫‪ê 2h +1 ú‬‬
‫ﻛﺎﺭﺑﺮﺩ ‪ heap‬ﺩﺭ ﺻﻒ ﺍﻭﻟﻮﻳﺖ‪ ،‬ﺍﺩﻏﺎﻡ ﻟﻴﺴﺖﻫﺎﻱ ﻣﺮﺗﺐ )ﺑﻪ ﻛﻤﻚ ﺩﺭﺧﺖ ﺍﻧﺘﺨﺎﺑﻲ ‪ (Min – Heap‬ﻭ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺁﺭﺍﻳﻪ ﺍﺳﺖ‪.‬‬
‫ﺍﺩﻏﺎﻡ ‪ k‬ﻟﻴﺴﺖ ﻣﺮﺗﺐ ﻛﻪ ﻣﺠﻤﻮﻉ ﻛﻞ ﻋﻨﺎﺻﺮ ‪ n‬ﺑﺎﺷﺪ‪ ،‬ﺯﻣﺎﻥ ) ‪ O ( nlogk‬ﺻﺮﻑ ﻣﻲﻛﻨﺪ‪.‬‬
‫¬‬
‫‪ ۱۳‬ـ ﺩﺭ ﻳﻚ ‪ Max – Heap‬ﺧﺎﻟﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﮔﺮﻩﻫﺎﻳﻲ ﺑﺎ ﻛﻠﻴﺪﻫﺎﻱ )ﺍﺯ ﺭﺍﺳﺖ ﺑﻪ ﭼﭗ( ‪ 80 , 10 , 20 , 70 , 50 , 30 , 60 , 40‬ﺩﺭﺝ ﻣـﻲﺷـﻮﻧﺪ‪،‬‬
‫ﺳﭙﺲ ﻋﻤﻞ ﺣﺬﻑ ‪ 3‬ﺑﺎﺭ ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ‪ .‬ﭘﻴﻤﺎﻳﺶ ﭘﺲ ﺗﺮﺗﻴﺐ ﺩﺭﺧﺖ ﺣﺎﺻﻞ ﻣﻄﺎﺑﻖ ﺑﺎ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺖ؟‬
‫‪20 , 40 , 10 , 50 , 30‬‬ ‫‪(۲‬‬ ‫‪50 , 40 , 20 , 10 , 30‬‬ ‫‪(۱‬‬
‫‪50 , 40 , 30 , 20 ,10‬‬ ‫‪(۴‬‬ ‫‪20 , 10 , 40 , 30 , 50‬‬ ‫‪(۳‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۲۷‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬

‫‪ : Postorder : 20 , 10 , 40 , 30 , 50‬ﭘﻴﻤﺎﻳﺶ‬
‫ﺭﺍﻩﺣﻞ ﺗﺴﺘﻲ‪ :‬ﭘﺲ ﺍﺯ ﺩﺭﺝ ﻛﻞ ﻛﻠﻴﺪﻫﺎ‪ ،‬ﺩﺭﺧﺖ ﺣﺎﺻﻞ ‪ Max-Heap‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ .‬ﺣﺬﻑ ﻫﺮ ﻛﻠﻴﺪ ﺍﺯ ﺩﺭﺧﺖ‪ ،‬ﺭﻳﺸﻪ )ﺑﺰﺭﮒﺗﺮﻳﻦ ﻛﻠﻴﺪ( ﺭﺍ ﺣﺬﻑ‬
‫ﻣﻲﻛﻨﺪ ﺩﺭ ﻧﺘﻴﺠﻪ ﭘﺲ ﺍﺯ ﻋﻤﻞ ﺣﺬﻑ‪ 3 ،‬ﺗﺎ ﻋﻨﺼﺮ ﺑﺰﺭﮒﺗﺮﻳﻦ ﺑﻪﺗﺮﺗﻴﺐ ﺣﺬﻑ ﻣﻲﺷﻮﺩ ﻭ ﭼﻬﺎﺭﻣﻴﻦ ﺑﺰﺭﮒﺗﺮﻳﻦ ﻋﻨﺼﺮ ﺩﺭ ﺭﻳﺸﻪ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﺩ‪ .‬ﺍﺯ‬
‫ﺍﻧﺠﺎ ﻛﻪ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ﭘﺲﺗﺮﺗﻴﺐ ﺭﻳﺸﻪ ﺁﺧﺮﻳﻦ ﮔﺮﻩﺍﻱ ﺍﺳﺖ ﻛﻪ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ ﭘﺲ ﭼﻬﺎﺭﻣﻴﻦ ﺑﺰﺭﮒﺗﺮﻳﻦ ﻋﻨﺼﺮ‪ ،‬ﺑﺎﻳﺪ ﺁﺧﺮﻳﻦ ﮔﺮﻩﺍﻱ ﺑﺎﺷﺪ ﻛﻪ‬
‫ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ‪ .‬ﻳﻌﻨﻲ ﺑﺎﻳﺪ ﺩﺭ ﮔﺰﻳﻨﻪﻫﺎ‪ ،‬ﺁﻧﺠﺎ ﻛﻪ ‪) 50‬ﭼﻬﺎﺭﻣﻴﻦ ﺑﺰﺭﮒﺗﺮﻳﻦ ﻋﻨﺼﺮ(‪ ،‬ﺩﺭ ﺁﺧﺮ ﺁﻣﺪﻩ )ﮔﺰﻳﻨﺔ ‪ (۳‬ﺍﻧﺘﺨﺎﺏ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫‪ ۱۴‬ـ ﮔﺰﻳﻨﺔ ﻧﺎﺩﺭﺳﺖ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ؟‬
‫‪ (۱‬ﺑﺎ ﺩﺍﺷﺘﻦ ﻫﺮ ﭘﻴﻤﺎﻳﺸﻲ ﺍﺯ ﻳﻚ ‪ heap‬ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪ (۲‬ﺍﮔﺮ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺗﻬﻲ‪ ،‬ﻋﻨﺎﺻﺮ ﺑﻪ ﺗﺮﺗﻴﺐ ﺻﻌﻮﺩﻱ ﻳﺎ ﻧﺰﻭﻟﻲ ﺩﺭﺝ ﺷﻮﻧﺪ‪ ،‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ﺑﺮﺍﺑﺮ ﺑﺎ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﺩﺭﺧﺖ‬
‫ﻣﻲﺷﻮﺩ‪.‬‬
‫‪ (۳‬ﺍﻋﻤﺎﻝ ﺩﺭﺝ ﻭ ﺣﺬﻑ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺯﻣﺎﻥ )‪ O (1‬ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪.‬‬
‫‪ (۴‬ﺩﺭ ﻳﻚ ‪ ،heap‬ﺧﺮﻭﺟﻲ ﻳﻜﻲ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ﻣﻴﺎﻥ ﺗﺮﺗﻴﺐ‪ ،‬ﭘﺲﺗﺮﺗﻴﺐ‪ ،‬ﺳﻄﺢ ﺗﺮﺗﻴﺐ ﻳﺎ ﭘﻴﺶﺗﺮﺗﻴﺐ ﺣﺘﻤﺎﹰ ﺑﻪﺻﻮﺭﺕ ﻣﺮﺗﺐ ﺍﺳﺖ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ‪ heap‬ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺍﺳﺖ‪ .‬ﺑﺎ ﻫﺮ ﭘﻴﻤﺎﻳﺸﻲ ﻣﻲﺗﻮﺍﻥ ﺩﺭﺧﺖ ﺁﻥ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪ .‬ﺑﻪﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ :‬ﺍﮔﺮ ﭘﻴﻤﺎﻳﺶ‬
‫ﭘﻴﺶﺗﺮﺗﻴﺐ ﺯﻳﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ﻣﺮﺑﻮﻁ ﺑﻪ ﻳﻚ ‪ Max – Heap‬ﺑﺎﺷﺪ‪ ،‬ﺁﻥﮔﺎﻩ ﻣﻲﺩﺍﻧﻴﻢ ﺷﻜﻞ ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎ ‪ 6‬ﮔﺮﻩ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫‪Pr eorder : 80 , 60 , 30 , 50 , 70 , 20‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۲۸‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺩﺭ ﻧﺘﻴﺠﻪ ﺩﺭﺧﺖ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪:‬‬


‫ﻛﻪ ﺳﺎﻳﺮ ﭘﻴﻤﺎﻳﺶﻫﺎ‪:‬‬
‫‪80‬‬
‫‪Postorder : 30 , 50 , 60 , 20 , 70 , 80‬‬
‫‪60‬‬ ‫‪70‬‬ ‫‪inorder : 30 , 60 , 50 , 80 , 20 , 70‬‬
‫‪30‬‬ ‫‪50‬‬ ‫‪20‬‬ ‫‪Levelorder : 80 , 60 , 70 , 30 , 50 , 20‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺨﺺ ﺍﺳﺖ ﺧﺮﻭﺟﻲ ﻫﻴﭻﻛﺪﺍﻡ ﺍﺯ ‪ 4‬ﭘﻴﻤﺎﻳﺶ‪ ،‬ﻛﻠﻴﺪﻫﺎ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﻣﺮﺗﺐ ﺗﺤﻮﻳﻞ‬
‫ﻧﻤﻲﺩﻫﺪ‪ .‬ﺩﺭ ﻧﺘﻴﺠﻪ ﮔﺰﻳﻨﺔ ‪ 4‬ﻧﺎﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﮔﺮ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺗﻬﻲ ﻋﻨﺎﺻﺮ ﺩﺭ ﺗﺮﺗﻴﺐ ﺻﻌﻮﺩﻱ ﻳﺎ ﻧﺰﻭﻟﻲ ﺩﺭﺝ ﺷﻮﻧﺪ‪ ،‬ﺍﺯ ﺁﻧﺠﺎ‬
‫ﻫﺮ ﻛﻠﻴﺪ ﺍﺯ ﻛﻠﻴﺪ ﻭ ﻛﻠﻴﺪﻫﺎﻱ ﻗﺒﻠﻲ ﻫﻤﻮﺍﺭﻩ ﺑﺰﺭﮒﺗﺮ ﻳﺎ ﻛﻮﭼﻚﺗﺮ ﺍﺳﺖ‪ ،‬ﭘﺲ ﻫﺮ ﻛﻠﻴﺪ ﻫﻤﻴﺸﻪ ﻳﺎ ﺩﺭ‬
‫ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ ﻳﺎ ﺩﺭ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ ﺩﺭﺝ ﻣﻲﺷﻮﺩ‪ ،‬ﭘﺲ ﺷﻜﻞ ﺩﺭﺧﺖ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‬
‫ﻛﻪ ﺩﺭ ﺍﻳﻦﺻﻮﺭﺕ ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ) ‪ n ، q ( n‬ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﺩﺭﺧﺖ ﺧﻮﺍﻫﺪ ﺷﺪ‪.‬‬
‫ﺩﺭ ﺩﺭﺧﺖﻫﺎﻱ ﺍﺭﻳﺐ ﺣﺬﻑ ﺭﻳﺸﻪ )‪ O (1‬ﺍﺳﺖ‪ .‬ﻫﻤﭽﻨﻴﻦ ﺩﺭﺝ ﻳﻚ ﮔﺮﺓ ﺑﺰﺭﮒﺗﺮ ﺍﺯ ﺭﻳﺸﻪ ﺩﺭ ‪ BST‬ﺍﺭﻳﺐ ﺑﻪ ﭼﭗ‪ ،‬ﻭ ﺩﺭﺝ ﻳﻚ ﮔﺮﺓ ﻛﻮﭼﻚﺗﺮ ﺍﺯ‬
‫ﺭﻳﺸﻪ ﺩﺭ ‪ BST‬ﺍﺭﻳﺐ ﺑﻪ ﺭﺍﺳﺖ )‪ O (1‬ﺍﺳﺖ‪.‬‬
‫‪ ۱۵‬ـ ﻫﻴﭗ ﺯﻳﺮ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪:‬‬
‫‪A [1...18] = 20 15 18 7 9 14 16 3 6 8 4 13 10 12 11 1 2 5‬‬
‫ﻋﻤﻞ )‪ Change(i,k‬ﻛﻠﻴﺪ ] ‪ A [i‬ﺭﺍ ﺑﻪ ‪ k‬ﺗﻐﻴﻴﺮ ﻣﻲﺩﻫﺪ ﻭ ﺑﺎ ﺍﻧﺠﺎﻡ ﺗﻌﺪﺍﺩ ﺟﺎﺑﻪﺟﺎﻳﻲ ﻛﺎﺭﻱ ﻣﻲﻛﻨﺪ ﻛﻪ ﺁﺭﺍﻳﻪ ﻣﺠﺪﺩﺍﹰ ﺑﻪﺻﻮﺭﺕ ﻫﻴﭗ‬
‫ﺩﺭﺁﻳﺪ‪ .‬ﻣﺎ ﺍﻳﻦ ‪ 2‬ﻋﻤﻞ ﺭﺍ ﺑﻪﺗﺮﺗﻴﺐ ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﻴﻢ‪:‬‬
‫) ‪Change (11,16 ) Change ( 2, 4‬‬
‫ﻣﺠﻤﻮﻉ ﺗﻌﺪﺍﺩ ﺟﺎﺑﻪﺟﺎﻳﻲ )‪(swap‬ﻫﺎ ﭼﻨﺪ ﺗﺎﺳﺖ؟‬
‫‪6 (۴‬‬ ‫‪5 (۳‬‬ ‫‪4 (۲‬‬ ‫‪3 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٢‬ﺩﺭﺳﺖ ﺍﺳﺖ‬

‫ﺩﺭ ﺻﻮﺭﺗﻴﻜﻪ ﺩﺭﺧﺖ ﺭﺍ ﺭﺳﻢ ﻛﻨﻴﻢ ﺟﺎﺑﺠﺎﻳﻲ ﻫﺎ ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺍﻧﺠﺎﻡ ﺧﻮﺍﻫﺪ ﺷﺪ‪:‬‬

‫¾¾¾¾¾¾ )‪change(11,16‬‬
‫‪A[11]=4 change to 16‬‬
‫)‪® swap : (16 ,9) and (16,15‬‬
‫¾¾¾¾¾¾ ) ‪change(2, 4‬‬
‫‪A[2]=16 change to 4‬‬
‫)‪® swap : (4 ,15) and (4,9‬‬
‫ﺩﺭﺣﻘﻴﻘﺖ ﺑﺎ ﺗﻐﻴﻴﺮ ﺍﻭﻝ ﻛﻠﻴﺪ ‪ ۱۶‬ﺑﻪ ﺧﺎﻃﺮ ﺍﻓﺰﺍﻳﺶ ﻣﻘﺪﺍﺭ ﺑﺎ ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﺍﺟﺪﺍﺩﺵ ﺑﻪ ﺳﻤﺖ ﺑﺎﻻ ﻣﻲ ﺭﻭﺩ ﻭ ﺑﺎ ﺗﻐﻴﻴﺮ ﺩﻭﻡ ﻛﻠﻴﺪ ‪ ۴‬ﺑﻪ ﺧﺎﻃﺮ ﻛﺎﻫﺶ‬
‫ﻣﻘﺪﺍﺭ ﺑﺎ ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﻓﺮﺯﻧﺪﺍﻧﺶ ﺑﻪ ﺳﻤﺖ ﭘﺎﺋﻴﻦ ﻣﻲ ﺭﻭﺩ‬
‫‪ ۱۶‬ـ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﻛﺎﻣﻞ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ ،h‬ﭼﻨﺪ ﮔﺮﻩ ﻭﺟﻮﺩ ﺩﺍﺭﺩ؟‬

‫‪ (۴‬ﺑﻴﻦ ‪ 2h -1‬ﻭ ‪ 2h‬ﮔﺮﻩ‬ ‫‪ (۳‬ﺑﻴﻦ ‪ 2h -2‬ﻭ ‪ 2h -1‬ﮔﺮﻩ‬ ‫‪ 2h +1 (۲‬ﮔﺮﻩ‬ ‫‪ 2h (۱‬ﮔﺮﻩ‬


‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۲۹‬‬

‫ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﻪ ﺍﺭﺗﻔﺎﻉ ‪ ،h‬ﺣﺘﻤﺎﹰ ﺗﺎ ﺍﺭﺗﻔﺎﻉ ‪ h - 1‬ﭘﺮ ﺍﺳﺖ‪ .‬ﺍﺯ ﻃﺮﻓﻲ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﭘﺮ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪n = 2h - 1‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ‪ ،‬ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﺩﺭﺧﺖ ﺗﺎ ﺍﺭﺗﻔﺎﻉ ‪ 2h -1 - 1 ، h - 1‬ﺍﺳﺖ‪ .‬ﻟﺬﺍ ﺑﺎ ﺍﺿﺎﻓﻪ ﺷﺪﻥ ﻳﻚ ﮔﺮﻩ ﺑﻪ ﺩﺭﺧﺖ‪ ،‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ‪ h‬ﻣﻲﺷﻮﺩ‪ .‬ﭘﺲ ﻛﺮﺍﻥ‬
‫ﭘﺎﻳﻴﻦ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪2h -1 - 1 + 1 = 2h -1‬‬
‫ﺍﺯ ﻃﺮﻓﻲ ﺑﻴﺸﺘﺮﻳﻦ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺑﺮﺍﺑﺮ ﺑﺎ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ﭘﺮ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺍﺳﺖ‪ .‬ﭘﺲ ﻛﺮﺍﻥ ﺑﺎﻻﻱ ﺗﻌﺪﺍﺩ‬
‫‪n = 2h - 1‬‬ ‫ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪ £ 2h - 1‬ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﻛﺎﻣﻞ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪2h -1 £ h‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﮔﺰﻳﻨﺔ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪ ۱۷‬ـ ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎﻱ ﺯﻳﺮ ﺩﺭ ﻣﻮﺭﺩ ﻳﻚ ﺩﺭﺧﺖ ‪ 5‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﺑﺎ ‪ 95‬ﮔﺮﻩ ﺻﺤﻴﺢ ﺍﺳﺖ؟ )ﺳﻄﺢ ﺭﻳﺸﻪ ﺭﺍ ﻳﻚ ﻓﺮﺽ ﻛﻨﻴﺪ ﻭ ﺩﺭ ﻫﺮ ﺳـﻄﺢ‬
‫ﮔﺮﻩﻫﺎ ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ ﭘﺮ ﻣﻲﺷﻮﺩ‪(.‬‬
‫‪ (۱‬ﺍﻳﻦ ﺩﺭﺧﺖ ‪ 76‬ﺑﺮﮒ ﺩﺍﺭﺩ ﻭ ﮔﺮﺓ ﭘﺎﻧﺰﺩﻫﻢ ﺁﻥ ﭘﺪﺭ ﮔﺮﺓ ﻫﻔﺘﺎﺩ ﻭ ﺩﻭﻡ ﺁﻥ ﺍﺳﺖ‪.‬‬
‫‪ (۲‬ﺍﻳﻦ ﺩﺭﺧﺖ ‪ 76‬ﺑﺮﮒ ﺩﺍﺭﺩ ﻭ ﮔﺮﺓ ﭼﻬﺎﺭﺩﻫﻢ ﺁﻥ ﭘﺪﺭ ﮔﺮﺓ ﻫﻔﺘﺎﺩ ﻭ ﺩﻭﻡ ﺁﻥ ﺍﺳﺖ‪.‬‬
‫‪ (۳‬ﺍﻳﻦ ﺩﺭﺧﺖ ‪ 77‬ﺑﺮﮒ ﺩﺍﺭﺩ ﻭ ﮔﺮﺓ ﭼﻬﺎﺭﺩﻫﻢ ﺁﻥ ﭘﺪﺭ ﮔﺮﺓ ﻫﻔﺘﺎﺩ ﻭ ﺩﻭﻡ ﺁﻥ ﺍﺳﺖ‪.‬‬
‫‪ (۴‬ﺍﻳﻦ ﺩﺭﺧﺖ ‪ 77‬ﺑﺮﮒ ﺩﺍﺭﺩ ﻭ ﮔﺮﺓ ﭘﺎﻧﺰﺩﻫﻢ ﺁﻥ ﭘﺪﺭ ﮔﺮﺓ ﻫﻔﺘﺎﺩ ﻭ ﺩﻭﻡ ﺁﻥ ﺍﺳﺖ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪ê n ( k - 1) + 1 ú‬‬
‫‪n0 = ê‬‬ ‫‪ú‬‬ ‫ﺗﻌﺪﺍﺩ ﺑﺮﮒﻫﺎ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪ëê‬‬ ‫‪k‬‬ ‫‪ûú‬‬
‫‪ê 95 ( 5 - 1) + 1 ú‬‬
‫‪n0 = ê‬‬ ‫‪ú = 76‬‬ ‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺳﺆﺍﻝ‪:‬‬
‫‪ëê‬‬ ‫‪5‬‬ ‫‪ûú‬‬
‫ﺍﺯ ﻃﺮﻓﻲ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ k‬ﺗﺎﻳﻲ ﻛﺎﻣﻞ ﻳﺎ ﭘﺮ‪:‬‬
‫‪é i -1ù‬‬
‫‪parent ( i ) = ê‬‬ ‫‪ú‬‬ ‫ﺍﻧﺪﻳﺲ ﭘﺪﺭ ﮔﺮﺓ ‪ i‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪ê k ú‬‬
‫ﺍﻧﺪﻳﺲ ﻓﺮﺯﻧﺪﺍﻥ ﮔﺮﺓ ‪ i‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪) :‬ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺍﺯ ‪ n‬ﻛﻮﭼﻚﺗﺮ ﺑﺎﺷﻨﺪ(‬
‫‪. . . . . . . , ki - 2 , ki - 1 , ki , ki + 1‬‬
‫‪‬‬
‫‪ k‬ﺗﺎ‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﭘﺪﺭ ﮔﺮﺓ ‪ 72‬ﺍﻡ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪é 72 - 1 ù‬‬
‫‪parent ( 72 ) = ê‬‬ ‫‪ú = 15‬‬
‫‪ê 5 ú‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﮔﺰﻳﻨﺔ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۳۰‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪ ۱۸‬ـ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﺟﺴﺘﺠﻮﻳﻲ ﻛﻪ ﻣﻲﺗﻮﺍﻥ ﺑﺎ ‪ 36‬ﻛﻠﻴﺪ ﻣﺘﻤﺎﻳﺰ ﺩﺍﺩﻩ ﺷﺪﻩ ﺑﻪﺻﻮﺭﺕ ﻣﺠﺰﺍ ﺳﺎﺧﺖ ﺑﻪﻃـﻮﺭﻱﻛـﻪ ﺍﺧـﺘﻼﻑ ﻋﻤـﻖ‬
‫ﺑﺮﮒﻫﺎﻱ ﺁﻥ ﺩﺭﺧﺖ ﺣﺪﺍﻛﺜﺮ ‪ 1‬ﺑﺎﺷﺪ‪ ،‬ﭼﻨﺪ ﺗﺎﺳﺖ؟‬
‫‪æ 36 ö‬‬ ‫‪æ 3ö‬‬ ‫‪æ 32 ö‬‬ ‫‪æ16 ö‬‬
‫‪ç ÷ 51‬‬ ‫‪(۴‬‬ ‫÷ ‪ç‬‬ ‫‪(۳‬‬ ‫÷ ‪ç‬‬ ‫‪(۲‬‬ ‫÷ ‪ç‬‬ ‫‪(۱‬‬
‫‪è 32 ø‬‬ ‫‪è5ø‬‬ ‫‪è5ø‬‬ ‫‪è5ø‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﻣﻲﺩﺍﻧﻴﻢ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻤﺎﻳﺰ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺎ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﻱ ﺁﻥ ﻛﻪ ﺍﺧﺘﻼﻑ ﻋﻤﻖ ﺑﺮﮒﻫﺎﻱ ﺍﻳﻦ ﺩﺭﺧﺖ ﺣﺪﺍﻛﺜﺮ ‪ 1‬ﺑﺎﺷﺪ‪ ،‬ﺷﻜﻞ ﺩﺭﺧﺖ ﺑﺎﻳﺪ ﺷﺒﻴﻪ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎﺷﺪ‪ ،‬ﻳﻌﻨﻲ ﺍﮔﺮ ﺍﺭﺗﻔﺎﻉ ﺭﺍ ‪ h‬ﻓﺮﺽ‬
‫ﻛﻨﻴﻢ‪ ،‬ﺩﺭﺧﺖ ﺑﺎﻳﺪ ﺗﺎ ﺍﺭﺗﻔﺎﻉ ‪ h - 1‬ﭘﺮ ﺑﻮﺩﻩ ﻭ ﺩﺭ ﺳﻄﺢ ﺁﺧﺮ ﮔﺮﻩﻫﺎﻱ ﺑﺎﻗﻲﻣﺎﻧﺪﻩ ﺩﺭ ﻫﺮ ﻣﻜﺎﻥ ﺩﻟﺨﻮﺍﻩ ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺍﺭﺗﻔﺎﻉ ﺍﻳﻦ ﺩﺭﺧﺖ ﺑﺎ‬
‫ﺍﺭﺗﻔﺎﻉ ﻳﻚ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﺑﺎ ‪ 36‬ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ‪ .‬ﭘﺲ‪:‬‬
‫‪h = êlog n2 ú + 1 = ê log36‬‬ ‫‪ú +1 = 6‬‬
‫‪ë‬‬ ‫‪û‬‬ ‫‪ë 2 û‬‬
‫‪n = 25 - 1 = 32 - 1 = 31‬‬ ‫ﭘﺲ ﺩﺭﺧﺖ ﺑﺎﻳﺪ ﺗﺎ ﺍﺭﺗﻔﺎﻉ ‪ 5‬ﭘﺮ ﺑﺎﺷﺪ‪ .‬ﻛﻪ ﺗﻌﺪﺍﺩ ﺍﻳﻦ ﮔﺮﻩﻫﺎ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫ﮔﺮﻩﻫﺎﻱ ﺑﺎﻗﻴﻤﺎﻧﺪﻩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪36 - 31 = 5‬‬
‫ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎ ﺩﺭ ﺳﻄﺢ‪ h‬ﺍﻡ‬
‫ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﺗﺎ ﺍﺭﺗﻔﺎﻉ ﻛﻞ ﮔﺮﻩﻫﺎ‬
‫‪h -1‬‬
‫‪2i -1‬‬ ‫ﺍﺯ ﻃﺮﻓﻲ ﺩﺭ ﺳﻄﺢ ‪ ،i‬ﺗﻌﺪﺍﺩ ﻣﻜﺎﻥﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺑﺮﺍﻱ ﮔﺮﻩﻫﺎ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫ﻟﺬﺍ ﺩﺭ ﺳﻄﺢ ﺷﺸﻢ )‪ h‬ﺍﻡ( ‪ 26-1 = 32‬ﻣﻜﺎﻥ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻳﺪ ﺍﺯ ﺑﻴﻦ ﺁﻥﻫﺎ ‪ 5‬ﺗﺎ ﺑﺮﺍﻱ ﮔﺮﻩﻫﺎﻱ ﺑﺎﻗﻲﻣﺎﻧﺪﻩ ﺍﻧﺘﺨﺎﺏ ﺷﻮﺩ‪ .‬ﭘﺲ ﺗﻌﺪﺍﺩ ﻛﻞ‬
‫‪æ 32 ö‬‬
‫÷ ‪ç‬‬ ‫ﺩﺭﺧﺖﻫﺎﻱ ﻣﺘﻤﺎﻳﺰ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺷﺮﺍﻳﻂ ﺳﺆﺍﻝ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪è5ø‬‬

‫‪ ۱۹‬ـ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ ، n - ary‬ﻫﺮ ﮔﺮﻩ ﺣﺪﺍﻛﺜﺮ ‪ n‬ﻓﺮﺯﻧﺪ ﻣﻲﺗﻮﺍﻧﺪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺩﺭﺧﺖ ‪ n - ary‬ﺑﺎ ‪ k‬ﮔﺮﻩ ﻭ ﺍﺭﺗﻔﺎﻉ ‪ ،h‬ﻛﺪﺍﻡﻳـﻚ ﺍﺯ ﺭﻭﺍﺑـﻂ‬
‫ﺯﻳﺮ ﺣﺪ ﺑﺎﻻﻳﻲ ﺑﺮﺍﻱ ﺗﻌﺪﺍﺩ ﺑﺮﮒﻫﺎﻱ ﺩﺭﺧﺖ ﻣﻲﺑﺎﺷﺪ؟‬
‫‪k‬‬
‫‪(۴‬‬ ‫‪log kh‬‬ ‫‪(۳‬‬ ‫‪nh‬‬ ‫‪(۲‬‬ ‫‪hn‬‬ ‫‪(۱‬‬
‫‪log kn‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪ = n i -1‬ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﻪ ﻳﻚ‬ ‫ﺣﺪﺍﻛﺜﺮ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎ ﺩﺭ ﺳﻄﺢ ‪ i‬ﺍﻡ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪ = n i‬ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺣﺪﺍﻛﺜﺮ ﺗﻌﺪﺍﺩ ﺑﺮﮒﻫﺎ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ‪ n - ary‬ﺑﺎ ﺍﺭﺗﻔﺎﻉ ‪ h‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪ = n h -1‬ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﻪ ﻳﻚ‬
‫‪ = n h‬ﺑﺎ ﻓﺮﺽ ﺳﻄﺢ ﺭﻳﺸﻪ ﺻﻔﺮ‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۳۱‬‬

‫‪ ۲۰‬ـ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺑﻪ ﻧﺎﻡ ‪ T‬ﺑﺎ ‪ n‬ﮔﺮﻩ ﺩﺍﺭﻳﻢ‪ .‬ﺍﮔﺮ ﺍﻭﻟﻴﻦ ﮔﺮﻩ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ Postorder‬ﺩﺭﺧﺖ ﺑﺎ ﺁﺧﺮﻳﻦ ﮔﺮﻩ ﺍﺯ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﺩﺭﺧﺖ‬
‫ﻳﻜﺴﺎﻥ ﺑﺎﺷﺪ‪ ،‬ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺭﺍ ﻣﻲﺗﻮﺍﻥ ﻧﺘﻴﺠﻪ ﮔﺮﻓﺖ؟‬
‫‪ (۲‬ﺩﺭﺧﺖ ‪ T‬ﺣﺪﺍﻛﺜﺮ ‪ 3‬ﮔﺮﻩ ﺩﺍﺭﺩ‪.‬‬ ‫‪ (۱‬ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ ‪ T‬ﺧﺎﻟﻲ ﺍﺳﺖ‪.‬‬
‫‪ (۴‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ‪ T‬ﺑﺮﺍﺑﺮ ‪ n‬ﺍﺳﺖ‪.‬‬ ‫‪ (۳‬ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ ‪ T‬ﺧﺎﻟﻲ ﺍﺳﺖ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﺍﻭﻟﻴﻦ ﮔﺮﻩﺍﻱ ﻛﻪ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ ﺭﻳﺸﻪ ﻭ ﺁﺧﺮﻳﻦ ﮔﺮﻩ‪ ،‬ﺳﻤﺖ ﺭﺍﺳﺖﺗﺮﻳﻦ ﺑﺮﮒ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ Postorder‬ﺍﻭﻟﻴﻦ ﮔﺮﻩﺍﻱ ﻛﻪ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﺩ ﺳﻤﺖ ﭼﭗﺗﺮﻳﻦ ﺑﺮﮒ ﻭ ﺁﺧﺮﻳﻦ ﮔﺮﻩ‪ ،‬ﺭﻳﺸﻪ ﺍﺳﺖ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺯﻣﺎﻧﻲ ﺁﺧﺮﻳﻦ ﮔﺮﻩ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ Preorder‬ﺑﺎ ﺍﻭﻟﻴﻦ ﮔﺮﻩ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ Postorder‬ﺑﺮﺍﺑﺮ ﻣﻲﺷﻮﺩ ﻛﻪ ﺗﻨﻬﺎ ﻳﻚ ﺑﺮﮒ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻭ‬
‫ﺍﻳﻦ ﺩﺭ ﺻﻮﺭﺗﻲ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﻫﺮ ﺳﻄﺢ ﺗﻨﻬﺎ ﻳﻚ ﮔﺮﻩ ﺑﺎﺷﺪ‪ .‬ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ‪ n‬ﻣﻲﺷﻮﺩ‪.‬‬

‫‪ ۲۱‬ـ ﺩﺭ ﮔﺮﺍﻑ ﺯﻳﺮ ﺟﺴﺘﺠﻮﻱ ﺍﻭﻝ ﻋﻤﻖ )‪ (Depth – first – Search‬ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﻴﻢ‪ .‬ﺟﺴﺘﺠﻮ ﺭﺍ ﺍﺯ ﮔﺮﻩﻱ ‪ 1‬ﺷﺮﻭﻉ ﺷﺪﻩ ﻭ ﮔﺮﻩﻫﺎ ﺑـﻪ ﺗﺮﺗﻴـﺐ‬
‫ﻋﺪﺩﻱ ﻣﻼﻗﺎﺕ ﻣﻲﺷﻮﻧﺪ‪ .‬ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ‪ ،‬ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﻳﻦ ﺟﺴﺘﺠﻮ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲﺩﻫﺪ؟‬
‫‪1, 2,5,8,3,9, 6, 4,10, 7,11‬‬ ‫‪(۱‬‬
‫‪1, 2,8,5,3,9, 6, 4,11,10, 7 (۲‬‬
‫‪1, 2,3, 4,11,5, 6, 7,10,8,9 (۳‬‬
‫‪1, 2,3, 4,5, 6, 7,8,9,10,11 (۴‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۳۲‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺗﺮﺗﻴﺐ ﭘﻴﻤﺎﻳﺶ ﻳﺎﻝﻫﺎ ﺭﻭﻱ ﺁﻥ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬


‫‪: 1, 2,3, 4,11,5, 6, 7,10,8,9‬ﺧﺮﻭﺟﻲ‬
‫‪ ۲۲‬ـ ﻧﻤﻲﺗﻮﺍﻥ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﺍﻱ ﺑﺮﺍﻱ ‪ n‬ﻋﻨﺼﺮ ﻃﺮﺍﺣﻲ ﻛﺮﺩ ﻛﻪ ……‬
‫‪ (۱‬ﺳﺎﺧﺖ ﺁﻥ ) ‪ O ( n log n‬ﻭ ﺣﺬﻑ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺁﻥ‪ ،‬ﺩﺭﺝ‪ ،‬ﺣﺬﻑ ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ ﺩﻟﺨﻮﺍﻩ ﺩﺭ ﺁﻥ ) ‪ O ( log n‬ﺑﺎﺷﺪ‪.‬‬
‫‪ (۲‬ﺳﺎﺧﺖ ﺁﻥ ) ‪ O ( n‬ﻭ ﺣﺬﻑ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ‪ ،‬ﺩﺭﺝ‪ ،‬ﺣﺬﻑ ﻭ ﺍﻓﺰﺍﻳﺶ ﻭ ﻛﺎﻫﺶ ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ ﺩﻟﺨﻮﺍﻩ ﺩﺭ ﺁﻥ ) ‪ O ( log n‬ﺑﺎﺷﺪ‪.‬‬
‫‪ (۳‬ﺳﺎﺧﺖ ﺁﻥ ) ‪ O ( n‬ﻭ ﺣﺬﻑ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺁﻥ ‪ ،‬ﺩﺭﺝ‪ ،‬ﺣﺬﻑ ﻭ ﺍﻓﺰﺍﻳﺶ ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ ﺩﻟﺨﻮﺍﻩ ﺩﺭ ﺁﻥ ) ‪ O ( log n‬ﺑﺎﺷﺪ‪.‬‬
‫‪ (۴‬ﺳﺎﺧﺖ ﺁﻥ ) ‪ O ( n‬ﻭ ﺣﺬﻑ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺁﻥ )‪ O (1‬ﻭ ﺩﺭﺝ ﻭ ﺣﺬﻑ ﻳﻚ ﻋﻨﺼﺮ ﺩﻟﺨﻮﺍﻩ ﺩﺭ ﺁﻥ ) ‪ O ( log n‬ﺑﺎﺷﺪ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪:۱‬‬
‫ﺣﺬﻑ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﻳﺎ ﻫﺮ ﻛﻠﻴﺪ ﺩﻟﺨﻮﺍﻩ‬ ‫ﺩﺭﺝ‬ ‫ﺳﺎﺧﺖ‬ ‫ﺩﺭﺧﺖ‬
‫) ‪O ( log n‬‬ ‫) ‪O ( log n‬‬ ‫) ‪O ( n log n‬‬ ‫ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﻣﺘﻮﺍﺯﻥ‬

‫ﮔﺰﻳﻨﺔ ‪: ۲‬‬
‫ﺍﻓﺰﺍﻳﺶ ﻭ ﻛﺎﻫﺶ ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ‬ ‫ﺣﺬﻑ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ‬ ‫ﺩﺭﺝ‬ ‫ﺳﺎﺧﺖ‬ ‫ﺩﺭﺧﺖ‬
‫) ‪O ( log n‬‬ ‫) ‪O ( log n‬‬ ‫) ‪O ( log n‬‬ ‫)‪O(n‬‬ ‫‪heap‬‬

‫ﮔﺰﻳﻨﺔ ‪) : ۳‬ﻣﺎﻧﻨﺪ ﮔﺰﻳﻨﺔ ‪(۲‬‬


‫ﮔﺰﻳﻨﺔ ‪ : ۴‬ﭼﻨﻴﻦ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﺍﻱ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪.‬‬
‫‪ ۲۳‬ـ ﺑﺎ ﻋﻨﺎﺻﺮ ‪ 5, 4,3, 2,1‬ﺣﺪﺍﻛﺜﺮ ﭼﻨﺪ ﺩﺭﺧﺖ ‪ AVL‬ﻣﻲﺗﻮﺍﻥ ﺳﺎﺧﺖ؟‬
‫‪8 (۴‬‬ ‫‪7 (۳‬‬ ‫‪6 (۲‬‬ ‫‪5 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺷﻜﻞﻫﺎﻱ ﺩﺭﺧﺖ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۳۳‬‬

‫‪ ۲۴‬ـ ﻣﻲﺩﺍﻧﻴﻢ ﻛﻪ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﺳﻄﺢ )ﻳﺎ ﻋﻤﻖ( ﻳﻚ ﮔﺮﻩ ﺑﺮﺍﺑﺮ ﻃﻮﻝ ﻣﺴـﻴﺮ ﺍﺯ ﺁﻥ ﮔـﺮﻩ ﺗـﺎ ﺭﻳﺸـﻪ ﺍﺳـﺖ‪ .‬ﺍﺭﺗﻔـﺎﻉ ﺩﺭﺧـﺖ ﻫـﻢ‬
‫ﺑﺰﺭﮒﺗﺮﻳﻦ ﺳﻄﺢ ﮔﺮﻩﻫﺎ ﺩﺭ ﺁﻥ ﺩﺭﺧﺖ ﺍﺳﺖ‪» .‬ﭘﻬﻨﺎﻱ« ﻳﻚ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ‪ T‬ﺭﺍ ﺑﺮﺍﺑﺮ ﺑﻴﺶﺗﺮﻳﻦ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻫﻢﺳـﻄﺢ ﺩﺭ ‪ T‬ﺗﻌﺮﻳـﻒ‬
‫ﻣﻲﻛﻨﻴﻢ‪ .‬ﺁﻳﺎ ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ﺑﺎ ‪ n‬ﮔﺮﻩ ﻭ ﺍﺭﺗﻔﺎﻉ ﻭ ﭘﻬﻨﺎﻱ ﺯﻳﺮ ﻭﺟﻮﺩ ﺩﺍﺭﺩ؟‬

‫‪ .II‬ﺍﺭﺗﻔﺎﻉ ) ‪ Q ( log n‬ﻭ ﭘﻬﻨﺎﻱ ) ‪Q ( n‬‬ ‫‪ .I‬ﺍﺭﺗﻔﺎﻉ ) ‪ Q ( n‬ﻭ ﭘﻬﻨﺎﻱ ‪1‬‬

‫‪Q‬‬ ‫‪ .IV‬ﺍﺭﺗﻔﺎﻉ ) ‪ Q ( log n‬ﻭ ﭘﻬﻨﺎﻱ ) ‪( n‬‬ ‫‪ .III‬ﺍﺭﺗﻔﺎﻉ ) ‪ Q ( n‬ﻭ ﭘﻬﻨﺎﻱ ) ‪Q ( n‬‬

‫ﺟﻮﺍﺏ ﭼﻨﺪ ﺗﺎ ﺍﺯ ﻣﻮﺍﺭﺩ ﻓﻮﻕ ﺩﺭﺳﺖ ﺍﺳﺖ؟‬


‫‪4 (۴‬‬ ‫‪3 (۳‬‬ ‫‪1 (۲‬‬ ‫‪2 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٣‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬

‫‪ . I‬ﺍﮔﺮ ﺩﺭﺧﺘﻲ ﺩﺭ ﻫﺮ ﺳﻄﺢ ﻳﻚ ﮔﺮﻩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﺩﺍﺭﺍﻱ ﺍﺭﺗﻔﺎﻉ ) ‪ q ( n‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ .‬ﻣﺎﻧﻨﺪ ﺩﺭﺧﺖ ﺍﺭﻳﺐ ﺑﻪ ﭼﭗ ﻳﺎ ﺍﺭﻳﺐ ﺑﻪ ﺭﺍﺳﺖ‪.‬‬

‫‪ . II‬ﺩﺭﺧﺘﺎﻥ ﻛﺎﻣﻞ ﻭ ﻳﺎ ﭘﺮ ﻧﻤﻮﻧﻪ ﺑﺴﻴﺎﺭ ﻋﺎﻟﻲ ﺑﺮﺍﻱ ﺍﻳﻦ ﻣﻮﺭﺩ ﺍﺳﺖ‪ .‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﻭ ﻳﺎ ﭘﺮ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫) ‪êë log n úû + 1 = q ( log n‬‬

‫‪n +1‬‬
‫‪ .‬ﺩﺭ ﺩﺭﺧﺖ ﻛﺎﻣﻞ ﻧﻴﺰ ﺑﻴﺸﺘﺮﻳﻦ ﭘﻬﻨﺎ ﻳـﺎ ﻣﺮﺑـﻮﻁ ﺑـﻪ ﺳـﻄﺢ ﺁﺧـﺮ ﻳـﺎ‬ ‫ﺍﺯ ﻃﺮﻓﻲ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎ ﺩﺭ ﺳﻄﺢ ﺁﺧﺮ )ﺑﺮﮒﻫﺎ( ﺩﺭﺧﺖ ﭘﺮ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ ) ‪= q ( n‬‬
‫‪2‬‬
‫ﻣﺮﺑﻮﻁ ﺑﻪ ﺳﻄﺢ ﻳﻜﻲ ﻣﺎﻧﺪﻩ ﺑﻪ ﺁﺧﺮ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﻫﺮ ﺩﻭ ﺣﺎﻟﺖ ﭘﻬﻨﺎ ) ‪ q ( n‬ﺍﺳﺖ‪.‬‬

‫‪ . III‬ﺑﻪ ﻧﻈﺮ ﻣﻲﺁﻳﺪ ﭼﻨﻴﻦ ﺩﺭﺧﺘﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬ﺯﻳﺮﺍ ﺑﺮﺍﻱ ﺭﺳﻴﺪﻥ ﺑﻪ ﭘﻬﻨﺎﻱ ) ‪ q ( n‬ﺩﺭﺧﺖ ﺑﺎﻳﺪ ﺣﺪﺍﻗﻞ ﻫﻢ ﻣﺮﺗﺒﻪ ﺑﺎ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻳﻚ ﺩﺭﺧﺖ ﭘﺮ‪،‬‬
‫ﮔﺮﻩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎ ﭘﻬﻨﺎﻱ ) ‪ q ( n‬ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ) ‪ q ( log n‬ﺑﺎﻳﺪ ﺑﺎﺷﺪ‪.‬‬

‫ﻣﺎ ﺍﻳﻨﮕﻮﻧﻪ ﻧﻴﺴﺖ‪ .‬ﺯﻳﺮﺍ ﻣﻲﺗﻮﺍﻥ ﺑﻪ ﻳﻜﻲ ﺍﺯ ﮔﺮﻩﻫﺎﻱ ﺳﻄﺢ ﺁﺧﺮ ﺩﺭﺧﺖ ﻓﻮﻕ ﻳﻚ ﺩﺭﺧﺖ ﺑﺎ ﺗﻌﺪﺍﺩ ﮔﺮﻩ ) ‪ q ( n‬ﻭ ﺍﺭﺗﻔﺎﻉ ) ‪) q ( n‬ﻣﺎﻧﻨﺪ ﺩﺭﺧﺖ ﺍﺭﻳﺐ ﺑﻪ ﭼﭗ ﻳـﺎ‬
‫ﺑﻪ ﺭﺍﺳﺖ( ﺍﺿﺎﻓﻪ ﻛﺮﺩ‪.‬‬

‫ﺩﺭ ﻧﻈﺮ ﻣﻲﮔﻴﺮﻳﻢ ﻭ ﺳﭙﺲ ﺛﺎﺑﺖ ﻣـﻲﻛﻨـﻴﻢ ﺍﺭﺗﻔـﺎﻉ ﺍﻳـﻦ ﺩﺭﺧـﺖ‬ ‫‪ . IV‬ﺑﺮﺍﻱ ﺍﺛﺒﺎﺕ ﺍﻳﻨﻜﻪ ﭼﻨﻴﻦ ﺩﺭﺧﺘﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪ ،‬ﺍﺑﺘﺪﺍ ﺑﻬﺘﺮﻳﻦ ﺩﺭﺧﺖ ﺭﺍ ﺑﺎ ﭘﻬﻨﺎﻱ ‪n‬‬
‫ﻧﻤﻲﺗﻮﺍﻧﺪ ) ‪ q ( log n‬ﺑﺎﺷﺪ‪.‬‬

‫(‬ ‫)‬
‫ﺑﺮﮒ ﺍﺳﺖ‪ .‬ﺍﺭﺗﻔﺎﻉ ﺍﻳﻦ ﺩﺭﺧﺖ ﭘﺮ ) ‪ q log n = q ( log n‬ﺍﺳﺖ‪.‬‬ ‫ﭘﺮ ﮔﺮﻩﺗﺮﻳﻦ ﺩﺭﺧﺖ ﺑﺎ ﭘﻬﻨﺎﻱ ‪ ، n‬ﺩﺭﺧﺖ ﭘﺮﻱ ﺑﺎ ‪n‬‬

‫‪ 2 n - 1 = q‬ﮔـﺮﻩ ﺩﺍﺭﺩ ﻭ ﻧـﻪ ) ‪n = q ( n‬‬ ‫ﺑﻪ ﻧﻈﺮ ﻣﺸﻜﻠﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ ﻭﻟﻲ ﺑﺎ ﺷﻤﺎﺭﺵ ﮔﺮﻩﻫﺎﻱ ﺩﺭﺧﺖ ﻣﻲﺗﻮﺍﻥ ﺩﺭﻳﺎﻓﺖ ﻛﻪ ﺍﻳﻦ ﺩﺭﺧﺖ ﺣـﺪﺍﻛﺜﺮ ) ‪( n‬‬
‫ﮔﺮﻩ ﭘﻬﻨﺎ ﻗـﺮﺍﺭ ﮔﻴﺮﻧـﺪ‪) .‬ﺍﻟﺒﺘـﻪ ﺑـﻪ‬ ‫‪n‬‬ ‫ﮔﺮﻩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺍﺭﺗﻔﺎﻉ ﺍﻳﻦ ﺩﺭﺧﺖ ) ‪ q ( log n‬ﻧﻴﺴﺖ‪ ،‬ﭼﺮﺍ ﻛﻪ ﺗﻌﺪﺍﺩ )‪ n - ( 2 n - 1‬ﮔﺮﻩ ﺩﻳﮕﺮ ﺑﺎﻳﺪ ﺩﺭ ﺑﺮﮒﻫﺎﻱ‬

‫ﮔﻮﻧﻪﺍﻱ ﻛﻪ ﭘﻬﻨﺎ ﺍﺯ ) ‪ q ( n‬ﺑﺰﺭﮒﺗﺮ ﻧﺸﻮﺩ(‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۳۴‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫(‬ ‫)‬
‫ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ) ‪ n - 2 n - 1 = q ( n‬؛ ﻣﻲﺗﻮﺍﻥ ﺩﺭﺧﺘﻲ ﺭﺍ ﺑـﺎ ﭘﻬﻨـﺎﻱ ‪n‬‬

‫ﺩﺭ ﻧﻈـــﺮ ﮔﺮﻓـــﺖ ﻭﻟـــﻲ ﺩﺭ ﺑﻬﺘـــﺮﻳﻦ ﺣﺎﻟـــﺖ ﺍﺭﺗﻔـــﺎﻉ ﺍﻳـــﻦ ﺩﺭﺧـــﺖ‬

‫(‬ ‫) ‪) ( n ) = q( n‬‬
‫‪ q log n + q‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ ﻧﻪ ) ‪. q ( log n‬‬

‫‪ ۲۵‬ـ ﭘﻴﻤﺎﻳﺶ ‪ preorder‬ﺩﺭﺧﺖ ﺩﻭﺩﻭﻳﻲ ‪) T‬ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ﺑﻪ ﺻﻮﺭﺕ ‪ acbdhigef‬ﻣﻲﺑﺎﺷﺪ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻣﻲﺩﺍﻧﻴﻢ ﺭﺃﺱﻫـﺎﻱ ‪ f ،e ،d ،b‬ﻭ ‪ i‬ﺩﺭ‬
‫ﺩﺭﺧﺖ ‪ T‬ﺑﺮﮒ ﻫﺴﺘﻨﺪ‪ .‬ﭘﻴﻤﺎﻳﺶ ‪ postorder‬ﺩﺭﺧﺖ ‪ T‬ﻛﺪﺍﻡ ﺍﺳﺖ؟‪IT‬‬

‫‪bd ci ef g h a‬‬ ‫‪(۴‬‬ ‫‪bdcef gih a‬‬ ‫‪(۳‬‬ ‫‪bcdaih egf‬‬ ‫‪(۲‬‬ ‫‪(۱‬‬
‫‪bci h ef g d a‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٤‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ ، preorder‬ﺗﺮﺗﻴﺐ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ ﮔﺮﻩﻫﺎ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫‪V‬‬ ‫‪L‬‬ ‫‪R‬‬

‫ﺭﻳﺸﻪ‬ ‫ﺯﻳﺮ ﺩﺭﺧﺖ ﭼﭗ‬ ‫ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ‬


‫ﻳﺎﺩﺁﻭﺭﻱ‪:‬‬
‫‪۱‬ـ ﺗﺮﺗﻴﺐ ﺩﻳﺪﻥ ﺑﺮﮒﻫﺎ ﺩﺭ ﻫﺮ ﺳﻪ ﭘﻴﻤﺎﻳﺶ ﻋﻤﻘﻲ ﻳﻜﺴﺎﻥ ﺑﻮﺩﻩ ﻭ ﻫﻤﻮﺍﺭﻩ ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪۲‬ـ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ preorder‬ﺍﻭﻟﻴﻦ ﮔﺮﻩ ﻣﻼﻗﺎﺕ ﺷﺪﻩ ﺭﻳﺸﻪ ﺍﺳﺖ‪ .‬ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ postorder‬ﺁﺧﺮﻳﻦ ﮔﺮﻩ ﻣﻼﻗﺎﺕ ﺷﺪﻩ ﺭﻳﺸﻪ ﺍﺳﺖ‪.‬‬
‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﭘﻴﻤﺎﻳﺶ ‪ a ، preorder‬ﮔﺮﻩ ﺭﻳﺸﻪ ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ a ، postorder‬ﺑﺎﻳﺪ ﺩﺭ ﺁﺧﺮ ﻣﻼﻗﺎﺕ ﺷﻮﺩ‪.‬‬
‫ﭘﺲ ﮔﺰﻳﻨﻪ ‪ ۲‬ﺭﺩ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺩﺭ ﺑﻴﻦ ﮔﺰﻳﻨﻪﻫﺎﻱ ‪ ۳ ،۱‬ﻭ ‪ ،۴‬ﺗﻨﻬﺎ ﺩﺭ ﮔﺰﻳﻨﻪ ‪ ۴‬ﺗﺮﺗﻴﺐ ﻣﻼﻗﺎﺕ ﺑﺮﮒﻫﺎ ﺭﻋﺎﻳﺖ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬
‫ﺭﺩ ﮔﺰﻳﻨﻪ ‪ :۱‬ﮔﺮﻩ ‪ i‬ﻗﺒﻞ ﺍﺯ ‪ d‬ﻣﻼﻗﺎﺕ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬
‫ﺭﺩ ﮔﺰﻳﻨﻪ ‪ :۳‬ﮔﺮﻩ ‪ e‬ﻗﺒﻞ ﺍﺯ ‪ I‬ﻣﻼﻗﺎﺕ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫ﭘﻴﻤﺎﻳﺶ ﭘﺲ ﺗﺮﺗﻴﺐ ﺩﺭﺧﺖ ﻓﻮﻕ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺧﻮﺍﻫـﺪ‬


‫ﺑﻮﺩ‪postorder : b d c i e f g h a :‬‬

‫‪ ۲۶‬ـ ﻫﻔﺘﻤﻴﻦ ﻛﻠﻴﺪ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ preorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ )‪ (BST‬ﻛﻪ ﭘﻴﻤﺎﻳﺶ ‪ postorder‬ﺁﻥ ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺍﺳﺖ )ﺍﺯ ﭼﭗ ﺑـﻪ‬
‫‪Postorder :5, 6,15,10, 23, 24, 22, 26, 20‬‬ ‫ﺭﺍﺳﺖ(‪ ،‬ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺖ؟‬
‫‪15 (۴‬‬ ‫‪22 (۳‬‬ ‫‪26 (۲‬‬ ‫‪24 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٣‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۳۵‬‬

‫ﺑﺎ ﺩﺭ ﺍﺧﺘﻴﺎﺭ ﺩﺍﺷﺘﻦ ﭘﻴﻤﺎﻳﺶ ‪) postorder‬ﻳﺎ ‪ ( preorder‬ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭ ﺩﻭﻳﻲ ﻣﻲﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻳﻜﺘﺎ ﺭﺳﻢ ﻛﺮﺩ‪.‬‬
‫‪postorder : 5 , 6 , 15 , 10 , 23 , 24 , 22 , 26 , 20‬‬
‫‪preorder : 20 , 10 , 6 , 5 , 15 , 26 , 22 , 24 , 23‬‬
‫ﻫﻔﺘﻤﻴﻦ ﻛﻠﻴﺪ‪ 22 ،‬ﺍﺳﺖ‪.‬‬

‫‪ ۲۷‬ـ ﻓﺮﺽ ﻛﻨﻴﺪ ﺻﺪ ﻛﻠﻴﺪ ﻳﻚ ﺗﺎ ﺻﺪ ﺭﺍ ﺑﻪ ﻳﻚ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻩﺍﻳﻢ‪ .‬ﺗﺮﺗﻴﺐ ﺍﺿﺎﻓﻪ ﺷﺪﻥ ﻛﻠﻴﺪﻫﺎ ﻣﺸﺨﺺ ﻧﻴﺴﺖ ﺍﻣـﺎ‬
‫ﺍﺣﺘﻤﺎﻝ ﺗﻤﺎﻡ ﺣﺎﻻﺕ ﺗﺮﺗﻴﺐﻫﺎﻱ ﺍﺿﺎﻓﻪ ﺷﺪﻥ ﻛﻠﻴﺪﻫﺎ )ﺗﻤﺎﻡ ‪Permutation‬ﻫﺎﻱ ﻣﻤﻜﻦ ﻳﻚ ﺗﺎ ﺻﺪ( ﺑﺎ ﻫﻢ ﺑﺮﺍﺑﺮ ﺍﺳﺖ‪ .‬ﺑـﺎ ﭼـﻪ ﺍﺣﺘﻤـﺎﻟﻲ ﺩﺭ‬
‫ﺭﻭﻧﺪ ﺍﺿﺎﻓﻪ ﺷﺪﻥ ﻛﻠﻴﺪﻫﺎ ﺑﻪ ﺩﺭﺧﺖ ﻛﻠﻴﺪ ‪ 4‬ﻭ ﻛﻠﻴﺪ ‪ 9‬ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻣﻲﺷﻮﻧﺪ‪ ،‬ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺍﻭﻟﻴﻦ ﻛﻠﻴﺪ ﺍﺿﺎﻓﻪ ﺷﺪﻩ ﻛﻠﻴﺪ ‪ 43‬ﺑﺎﺷﺪ؟‬
‫‪43 1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫´‬ ‫‪(۴‬‬ ‫‪(۳‬‬ ‫‪(۲‬‬ ‫‪(۱‬‬
‫‪100 4‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪3‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺎﻳﺪ ﺍﺣﺘﻤﺎﻝ ﻣﻘﺎﻳﺴﻪ ﺷﺪﻥ ﻛﻠﻴﺪﻫﺎﻱ ‪، 9 , 4‬ﻳﻌﻨﻲ ﺍﺣﺘﻤﺎﻝ ﺍﻳﻨﻜﻪ ﻳﺎ ‪ 4‬ﺩﺭ ﺯﻳﺮ ﺩﺭﺧﺖ ‪ 9‬ﻭ ﻳﺎ ‪ 9‬ﺩﺭ ﺯﻳﺮ ﺩﺭﺧﺖ ‪ 4‬ﺑﺎﺷﺪ ﺭﺍ‪ ،‬ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﻢ‪.‬‬
‫ﺍﻳﻦ ﺍﺣﺘﻤﺎﻝ ﺩﻭ ﺣﺎﻟﺖ ﺩﺍﺭﺩ‪ :‬ﻳﺎ ﺍﻳﻨﻜﻪ ‪ 4‬ﺩﺭ ﺩﺭﺧﺖ ﺑﺎﺷﺪ ﻭ ‪ 9‬ﺑﺨﻮﺍﻫﺪ ﺩﺭﺝ ﺷﻮﺩ ﻭ ﺑﺎ ‪ 4‬ﻣﻘﺎﻳﺴﻪ ﺷﻮﺩ ﻭ ﻳﺎ ﺍﻳﻨﻜﻪ ‪ 9‬ﺩﺭ ﺩﺭﺧﺖ ﺑﺎﺷﺪ ﻭ ‪4‬‬
‫ﺑﺨﻮﺍﻫﺪ ﺩﺭﺝ ﺷﻮﺩ ﻭ ﻣﺴﻴﺮ ﭘﻴﻤﻮﺩﻩﺷﺪﻩ ﺗﺎ ﺑﺮﮒ ﺗﻮﺳﻂ ‪ 9 ،4‬ﺭﺍ ﻧﻴﺰ ﺩﺭﺑﺮﮔﻴﺮﺩ‪.‬‬
‫ﻛﻠﻴﺪﻫﺎﻱ ‪ 1 , 2 , 3 , 10  42 , 44  100‬ﺩﺭ ﻫﺮ ﻓﺮﻡ ﺍﺯ ﺩﺭﺧﺖ ﻭ ﺩﺭ ﻫﺮ ﺯﻣﺎﻧﻲ ﻣﻲﺗﻮﺍﻧﻨﺪ ﺩﺭﺝ ﺷﻮﻧﺪ ﺑﺪﻭﻥ ﺍﻳﻨﻜﻪ ﺩﺭ ﻭﻗﻮﻉ ﻣﻘﺎﻳﺴﻪ ‪9 , 4‬‬
‫ﺗﺄﺛﻴﺮﻱ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪ .‬ﺑﺮﺍﻱ ﻣﺜﺎﻝ‪:‬‬

‫ﺍﻣﺎ ﻛﻠﻴﺪﻫﺎﻱ ‪ 5 , 6 , 7 , 8‬ﺗﺄﺛﻴﺮﮔﺬﺍﺭﻧﺪ‪ .‬ﺩﺭ ﻭﺍﻗﻊ ﺩﺭﺝ ﻫﺮ ﻛـﺪﺍﻡ ﺍﺯ ﺍﻳـﻦ ﭼﻬـﺎﺭ‬


‫ﻛﻠﻴﺪ ﻗﺒﻞ ﺍﺯ ﺩﻭ ﻛﻠﻴﺪ ‪ 9 , 4‬ﻣﻮﺟﺐ ﻣﻲﺷﻮﺩ ﺗﺎ ﺩﺭﺧﺖ ﺩﭼﺎﺭ ﻳﻚ ﺍﻧﺸـﻌﺎﺏ ﻣﻬـﻢ‬
‫ﺷﻮﺩ‪ .‬ﺍﻳﻦ ﺍﻧﺸﻌﺎﺏ‪ ،‬ﺭﻳﺸﻪﻱ ﺯﻳﺮﺩﺭﺧﺘﻲ ﺍﺳﺖ ﻛﻪ ﻛﻠﻴﺪ ‪ 4‬ﺭﺍ ﺑﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﭼـﭗ‬
‫ﻭ ﻛﻠﻴﺪ ‪ 9‬ﺭﺍ ﺑﻪ ﺯﻳﺮ ﺩﺭﺧﺖ ﺭﺍﺳﺖ ﺧﻮﺩ ﻣﻲﻓﺮﺳﺘﺪ ﻭ ﺩﺭ ﻧﺘﻴﺠـﻪ ﻣـﺎﻧﻊ ﻣﻘﺎﻳﺴـﻪ‬
‫ﻛﻠﻴﺪﻫﺎﻱ ‪ 9 , 4‬ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﻣﻲﺷﻮﺩ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۳۶‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎﻳﺪ ﺍﻳﻦ ﺍﺣﺘﻤﺎﻝ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻛﺮﺩ ﻛﻪ ﭼﻬﺎﺭ ﻛﻠﻴﺪ ‪ 5 , 6 , 7 , 8‬ﻗﺒﻞ ﺍﺯ ‪ 4‬ﻳﺎ ‪ 9‬ﻧﻴﺎﻳﺪ‪ .‬ﺍﻳﻦ ﺍﺣﺘﻤﺎﻝ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ ﺍﻳﻨﻜﻪ ‪ 4‬ﻳﺎ ‪ 9‬ﻗﺒﻞ ﺍﺯ‬
‫‪ 8‬ﻳﺎ ‪ 7‬ﻳﺎ ‪ 6‬ﻳﺎ ‪ 5‬ﺑﻴﺎﻳﺪ‪.‬‬

‫ﭘﻴﺸﺎﻣﺪ ﺍﻳﻦﻛﻪ ‪ 4‬ﺍﻭﻝ ﺑﻴﺎﻳﺪ ‪A :‬‬ ‫ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺍﺣﺘﻤﺎﻝ ﺍﻳﻨﻜﻪ ﺍﺯ ﺑﻴﻦ ‪ 6‬ﻋﺪﺩ ﻳﺎ ‪ 4‬ﺍﻭﻝ ﺑﻴﺎﻳﺪ ﻳﺎ ‪. 9‬‬

‫ﭘﻴﺸﺎﻣﺪ ﺍﻳﻦﻛﻪ ‪ 9‬ﺍﻭﻝ ﺑﻴﺎﻳﺪ ‪B :‬‬


‫ﺍﻳﻦ ﺩﻭ ﭘﻴﺸﺎﻣﺪ ﺑﺎ ﻫﻢ ﻧﺎﺳﺎﺯﮔﺎﺭﻧﺪ ﺯﻳﺮﺍ ‪ A‬ﻭ ‪ B‬ﻧﻤﻲﺗﻮﺍﻧﻨﺪ ﻫﺮ ﺩﻭ ﺑﺎ ﻫﻢ ﺭﺥ ﺩﻫﻨﺪ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ‪:‬‬
‫‪1 1 1‬‬
‫= )‪P ( A  B) = P ( A ) + P ( B‬‬ ‫= ‪+‬‬
‫‪6 6 3‬‬

‫‪ ۲۸‬ـ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭﺩﻭﻳﻲ ﻛﻪ ‪ Preorder‬ﻭ ‪ Postorder‬ﺁﻥﻫﺎ ﺩﺭ ﺯﻳﺮ ﺫﻛﺮ ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﭼﻪ ﺗﻌﺪﺍﺩ ﺍﺳﺖ؟‬
‫‪Pre:a b d e f g c h i j‬‬ ‫‪4 (۱‬‬
‫‪Post:d g f e b i jh c a‬‬
‫‪8 (۲‬‬
‫‪1 (۳‬‬
‫‪ (۴‬ﻫﻴﭻ ﺩﺭﺧﺘﻲ ﺭﺍ ﻧﻤﻲﺗﻮﺍﻥ ﭘﻴﺪﺍ ﻛﺮﺩ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٢‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭ ﺩﻭﻳﻲ ﻛﻪ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ preorder‬ﻭ ‪ postorder‬ﺁﻥﻫﺎ ﺑﺮﺍﺑﺮ ﺑﺎ ﺭﺷﺘﻪﻫﺎﻱ ﻣﺸﺨﺺ ﺯﻳﺮ ﺑﺎﺷﺪ‪ ،‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ ‪ 2n1‬ﻛﻪ ﺩﺭ ﺁﻥ‬
‫‪ n1‬ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﺗﻚﻓﺮﺯﻧﺪﻱ ﺩﺭ ﺩﺭﺧﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﻱ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﺩﻥ ﮔﺮﻩﻫﺎﻱ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺑﻪ ﺍﻳﻦ ﺻﻮﺭﺕ ﻋﻤﻞ ﻣﻲﻛﻨﻴﻢ‪ :‬ﺍﺯ ﺳﻤﺖ ﭼﭗ ﻳﻜﻲ ﺍﺯ ﭘﻴﻤﺎﻳﺶﻫﺎ )ﺑﺮﺍﻱ ﻣﺜﺎﻝ ‪ (preorder‬ﺣﺮﻛﺖ‬
‫ﻣﻲﻛﻨﻴﻢ ﻭ ﻫﺮ ﺗﺮﺗﻴﺐ ﺩﻭﺗﺎﻳﻲ ﺍﺯ ﮔﺮﻩﻫﺎ )ﺗﺮﺗﻴﺐﻫﺎﻱ ﺩﻭ ﺗﺎﻳﻲ ﺩﻗﻴﻘﺎﹰ ﻛﻨﺎﺭ ﻫﻢ( ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻭ ﺩﺭ ﭘﻴﻤﺎﻳﺶ ﺩﻳﮕﺮ ﺑﺮﺭﺳﻲ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺍﮔﺮ ﺩﻗﻴﻘﺎﹰ‬
‫ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ ﺩﻭﺗﺎﻳﻲ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻣﻌﻜﻮﺱ ﻋﻴﻨﺎﹰ ﻣﺸﺎﻫﺪﻩ ﻛﺮﺩﻳﻢ‪ ،‬ﮔﺮﻩ ﺍﻭﻝ ﺗﺮﺗﻴﺐ ﺗﻚﻓﺮﺯﻧﺪﻱ ﺍﺳﺖ‪.‬‬
‫ﻃﺒﻖ ﺳﻮﺍﻝ ﺩﺍﺭﻳﻢ‪:‬‬
‫‪ ‬‬
‫‪‬‬ ‫‪ ‬‬ ‫‪ ‬‬
‫‪ ‬‬ ‫‪‬‬
‫‪preorder : a b‬‬
‫‪d‬‬ ‫‪e‬‬
‫‪ ‬‬‫‪f‬‬ ‫‪g‬‬ ‫‪c‬‬ ‫‪h‬‬ ‫‪i‬‬ ‫‪j‬‬
‫‪ ‬‬‫‪ ‬‬‫‪‬‬
‫ﺗﺮﺗﻴﺐﻫﺎﻱ ﺩﻭﺗﺎﻳﻲ‬
‫‪postorder : d g f‬‬ ‫‪e b i‬‬ ‫‪j h c a‬‬
‫ﻣﻌﻜﻮﺱ ﺳﻪ ﺗﺮﺗﻴﺐ ﺩﻭﺗﺎﻳﻲ ‪ fg ، ef‬ﻭ ‪ ch‬ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ ، preorder‬ﺩﺭ ﭘﻴﻤﺎﻳﺶ ‪ postorder‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﭘﺲ ‪ 3‬ﮔﺮﻩ ﺗﻚ ﻓﺮﺯﻧﺪﻱ ﺩﺍﺭﻳﻢ‬
‫)‪ ، ( n1 = 3‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺗﻌﺪﺍﺩ ﺩﺭﺧﺖﻫﺎﻱ ﺩﻭ ﺩﻭﻳﻲ ﻛﻪ ﭘﻴﻤﺎﻳﺶﻫﺎﻱ ‪ preorder‬ﻭ ‪ postorder‬ﺁﻥﻫﺎ ﺑﺮﺍﺑﺮ ﺑﺎ ﺭﺷﺘﻪﻫﺎﻱ ﺑﺎﻻ ﺑﺎﺷﺪ‪ 23 = 8 ،‬ﺗﺎ ﺍﺳﺖ‪.‬‬
‫‪ ۲۹‬ـ ﻣﺠﻤﻮﻋﻪ ﻭﺯﻥ ﻳﺎﻝﻫﺎﻱ ﺩﺭﺧﺖ ﭘﻮﺷﺎﻱ ﻛﻤﻴﻨﻪ )‪ (MST‬ﮔﺮﺍﻑ ﻣﻘﺎﺑﻞ ﭼﻴﺴﺖ؟‬
‫‪2‬‬ ‫‪97 (۲‬‬ ‫‪91 (۱‬‬
‫‪15‬‬ ‫‪8‬‬ ‫‪12‬‬
‫‪85 (4‬‬ ‫‪89 (3‬‬
‫‪1‬‬ ‫‪7‬‬ ‫‪3‬‬
‫‪8‬‬ ‫‪10‬‬ ‫‪10‬‬
‫‪14‬‬
‫‪5‬‬ ‫‪14‬‬
‫‪6‬‬ ‫‪11‬‬ ‫‪8‬‬
‫‪8‬‬
‫‪4‬‬ ‫‪14‬‬ ‫‪12‬‬
‫‪15‬‬ ‫‪10‬‬ ‫‪9‬‬ ‫‪15‬‬
‫‪10‬‬

‫‪10‬‬ ‫‪15‬‬

‫‪12‬‬
‫‪5‬‬ ‫‪4‬‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۳۷‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٣‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﻃﺒﻖ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻛﺮﺍﺳﻜﺎﻝ ﺍﺑﺘﺪﺍ ﻳﺎﻝﻫﺎ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺻﻌﻮﺩﻱ ﻣﺮﺗﺐ‬
‫ﻣﻲﻛﻨﻴﻢ ﻭ ﺳﭙﺲ ﺗﺎ ﺟﺎﻳﻲ ﻛﻪ ﻛﻠﻴﻪ ﮔﺮﻩﻫﺎ ﺑﻪ ﺩﺭﺧﺖ ﭘﻮﺷﺎﻱ ﻣﻴﻨﻴﻤﻢ‬
‫ﺍﺿﺎﻓﻪ ﻧﺸﺪﻩﺍﻧﺪ‪ ،‬ﻛﻮﭼﻚﺗﺮﻳﻦ ﻳﺎﻝ ﺭﺍ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺩﺭ ﺩﺭﺧﺖ ﺍﻳﺠﺎﺩ‬
‫ﺩﻭﺭ ﻧﻜﻨﺪ ﺍﺿﺎﻓﻪ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺩﺭﺧﺖ ﺣﺎﺻﻞ ﺑﻪ ﺻﻮﺭﺕ ﺭﻭﺑﺮﻭﺳﺖ‪.‬‬
‫ﻣﺠﻤﻮﻋﻪ ﻭﺯﻥ ﻳﺎﻝﻫﺎﻱ ﺩﺭﺧﺖ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪2 ´ 12 + 4 ´ 10 + 2 ´ 8 + 5 + 4 = 89‬‬

‫‪ ۳۰‬ـ ﻳﻚ ﻟﻴﺴﺖ ‪ 12‬ﻋﻨﺼﺮﻱ ﺣﺎﻭﻱ ﻛﻠﻴﺪﻫﺎﻱ ﻳﻚ ﺗﺎ ﺩﻭﺍﺯﺩﻩ ﺑﻪ ﺻﻮﺭﺕ ﺻﻌﻮﺩﻱ ﻣﺮﺗﺐ ﺍﺳﺖ‪ .‬ﺍﮔﺮ ﺍﻳﻦ ﻟﻴﺴﺖ ﺑﻪ ﺻﻮﺭﺕ ﺩﺭﺟﺎ ﺗﺒﺪﻳﻞ ﺑـﻪ ﻳـﻚ‬
‫‪ Max Heap‬ﺷﻮﺩ‪ ،‬ﻋﻨﺼﺮ ﭘﻨﺠﻢ ﻟﻴﺴﺖ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺖ؟‬
‫‪8 (۴‬‬ ‫‪9 (۳‬‬ ‫‪11 (۲‬‬ ‫‪10 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﻛﺎﻓﻲ ﺍﺳﺖ ﺍﻋﺪﺍﺩ ﻓﻮﻕ ﺭﺍ ﺩﺭ ﻳﻚ ﺩﺭﺧﺖ ﺩﻭ ﺩﻭﻳﻲ ﻛﺎﻣﻞ ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﻭ ﭘﺲ ﺍﺯ ﺍﺟﺮﺍﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ‪ ، BUILD - MAX - HEAP‬ﮔﺮﻩ ﭘﻨﺠﻢ ﺩﺭﺧﺖ ﺭﺍ‬
‫ﺑﺎﺯﺧﻮﺍﻧﻲ ﻛﻨﻴﻢ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۳۸‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﻋﻀﻮ ﭘﻨﺠﻢ ﻛﻠﻴﺪ ‪ 10‬ﺍﺳﺖ‪.‬‬


‫‪ ۳۱‬ـ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﺩﺭ ‪ Max – heap‬ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺩﺭ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻱ ‪ ،X‬ﻫﺮ ﻋﻨﺼﺮ ﻳﻚ ﺯﻭﺝ ﻣﺮﺗﺐ ﺑﻪ ﺻﻮﺭﺕ > ‪ < Key , Value‬ﺍﺳﺖ ﻛﻪ‬
‫ﻣﻌﻴﺎﺭ ﻣﻘﺎﻳﺴﻪﻱ ﻋﻨﺎﺻﺮ ﻣﻘﺪﺍﺭ ‪ key‬ﺁﻥﻫﺎ ﻣﻲﺑﺎﺷﺪ‪ .‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ‪ X‬ﻳﻚ ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﺍﺯ ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺖ؟‬
‫{) ‪X::A ( x‬‬ ‫‪Stack (۲‬‬ ‫‪Queue (۱‬‬
‫;‪Count + +‬‬
‫; ) > ‪Max - heap - insert ( H , < count , x‬‬ ‫‪Min Heap (۴‬‬ ‫‪Max Heap (۳‬‬
‫}‬
‫{ ) ‪X::B ( x‬‬
‫) ‪P = Heap - Extract - max ( H‬‬
‫; ) ‪Re turn - value ( p‬‬
‫}‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٢‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﻫﺮ ﺑﺎﺭ ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ A‬ﺑﺎ ﻭﺭﻭﺩﻱ ‪ x ، x‬ﺩﺭ ‪ Max - Heap‬ﺩﺭﺝ ﻣﻲﺷﻮﺩ‪ .‬ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ ، A‬ﻣﻘﺪﺍﺭ ‪ count‬ﺍﻓﺰﺍﻳﺶ‬
‫ﻣﻲﻳﺎﺑﺪ ﻭ ﻧﻴﺰ ﺍﺯ ﻃﺮﻓﻲ ﺍﻳﻦ ﻣﻘﺪﺍﺭ ﺑﻪ ﻋﻨﻮﺍﻥ ﻛﻠﻴﺪ ﻋﻨﺼﺮ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺩﺭﺝ ‪ x‬ﺩﺭ ‪ x ، heap‬ﺑﻪ ﺭﻳﺸﻪ ﻣﻲﺁﻳﺪ‪) .‬ﺯﻳﺮﺍ‬
‫ﻣﻘﺪﺍﺭ ﻛﻠﻴﺪ ﺁﻥ ﺍﺯ ﺳﺎﻳﺮ ﻋﻨﺎﺻﺮ ﺣﺘﻤﺎﹰ ﺑﻴﺸﺘﺮ ﺍﺳﺖ‪(.‬‬
‫ﺩﺭ ﻫﺮ ﺑﺎﺭ ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ B‬ﺑﺎ ﻭﺭﻭﺩﻱ ‪ ، x‬ﺑﺰﺭﮒﺗﺮﻳﻦ ﻋﻨﺼﺮ ﺍﺯ ‪ heap‬ﺣﺬﻑ ﻣﻲﺷﻮﺩ‪) .‬ﻳﻌﻨﻲ ﺭﻳﺸﻪ ﺣﺬﻑ ﻣﻲﺷﻮﺩ‪ (.‬ﺩﺭﻭﺍﻗﻊ ﺁﺧﺮﻳﻦ ﻋﻨﺼﺮﻱ ﻛﻪ ﺩﺭﺝ‬
‫ﺷﺪﻩ )ﻭ ﭼﻮﻥ ﺑﺰﺭﮒﺗﺮﻳﻦ ﻋﻨﺼﺮ ﺍﺳﺖ ﺩﺭ ﺭﻳﺸﻪ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﺩ( ﺣﺬﻑ ﻣﻲﺷﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ‪ x‬ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﭘﺸﺘﻪ ﺍﺳﺖ‪.‬‬

‫ﺑﺎﺯﮔﺸﺘﻲ‬
‫‪ænö‬‬
‫‪ ۳۲‬ـ ﺟﻮﺍﺏ ﺭﺍﺑﻄﺔ ﺑﺎﺯﮔﺸﺘﻲ ‪ T ( n ) = 8T ç ÷ + nlogn‬ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎﻱ ﺯﻳﺮ ﺍﺳﺖ؟‬
‫‪9‬‬
‫‪è ø‬‬

‫) ‪q ( nlogn‬‬ ‫‪(۴‬‬ ‫(‬


‫‪q n 2 logn‬‬ ‫‪) (۳‬‬ ‫)‪q(n‬‬ ‫‪(۲‬‬ ‫) ‪q ( logn‬‬ ‫‪(۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٤‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪ænö‬‬
‫‪T ( n ) = 8T ç ÷ + nlogn‬‬
‫‪è9ø‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۳۹‬‬

‫ﺑﻨﺎ ﺑﻪ ﻗﻀﻴﺔ ﺍﺳﺎﺳﻲ ﺩﺍﺭﻳﻢ‪:‬‬


‫‪b=9 , a =8‬‬ ‫‪f ( n ) = nlogn‬‬

‫÷‪f ( n ) = W æç n log9 ö‬‬


‫‪8 +e‬‬
‫ﻛﻪ ﺣﺎﻟﺖ ‪ 3‬ﺍﺗﻔﺎﻕ ﻣﻲﺍﻓﺘﺪ‪:‬‬
‫‪è‬‬ ‫‪ø‬‬
‫ﺩﺭ ﻧﺘﻴﺠﻪ‪:‬‬
‫) ‪T ( n ) = q ( nlogn‬‬

‫‪ ۳۳‬ـ ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ ﺍﻟﮕﻮﺭﻳﺘﻤﻲ ﺑﺎ ﺗﺎﺑﻊ ﺯﻣﺎﻧﻲ ﺯﻳﺮ‪ ،‬ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﺍﺳﺖ؟‬
‫‪ì 0‬‬ ‫‪n=0‬‬
‫‪ï‬‬
‫‪T (n) = í 1‬‬ ‫‪n =1‬‬
‫) ‪ï3T ( n - 1) + 4T ( n - 2‬‬ ‫‪otherwise‬‬
‫‪î‬‬
‫‪n 4 logn‬‬ ‫‪(۴‬‬ ‫‪2n logn‬‬ ‫‪(۳‬‬ ‫‪4n‬‬ ‫‪(۲‬‬ ‫‪(۱‬‬
‫‪n2‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﻌﺎﺩﻟﺔ ﻣﺸﺨﺼﻪ ﺣﻞ ﻣﻲﻛﻨﻴﻢ‪:‬‬
‫‪T ( n ) - 3T ( n - 1) - 4T ( n - 2 ) = 0‬‬
‫‪r1 = 4‬‬
‫‪r 2 - 3r - 4 = 0 Þ‬‬ ‫‪( r - 4 )( r + 1) = 0 Þ‬‬ ‫‪r2 = -1‬‬
‫)‪Þ T ( n ) = C1 ( 4 ) + C2 ( -1‬‬
‫‪n‬‬ ‫‪2‬‬

‫‪T ( 0 ) = 0 Þ C1 + C2 = 0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬


‫‪Þ C1 = , C2 = - , Þ T ( n ) = é 4n - ( -1) ù‬‬
‫‪n‬‬
‫‪T (1) = 1 Þ C1 - C2 = 1‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪ê‬‬
‫‪ë‬‬ ‫‪ûú‬‬

‫) (‬
‫‪Þ T ( n ) = q 4n‬‬

‫‪ ۳۴‬ـ ﺟﻮﺍﺏ ﺭﺍﺑﻄﺔ ﺑﺎﺯﮔﺸﺘﻲ ﺯﻳﺮ ﻛﺪﺍﻡ ﺍﺳﺖ؟‬

‫‪T ( n ) = 4T‬‬ ‫‪( n ) +1‬‬ ‫‪T ( 2) = 1‬‬


‫‪4‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪4‬‬
‫= )‪T (n‬‬ ‫‪( 4 )n -‬‬ ‫‪(۲‬‬ ‫= )‪T (n‬‬ ‫‪( logn )2 -‬‬ ‫‪(۱‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪4 2 1‬‬
‫‪T (n) = n -‬‬
‫‪3‬‬
‫) (‬
‫‪3‬‬
‫‪(۴‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2 1‬‬
‫‪T ( n ) = ( logn ) -‬‬
‫‪3‬‬
‫‪(۳‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﺑﺘﺪﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﻚ ﺗﻐﻴﻴﺮ ﻣﺘﻐﻴﺮ ﻓﺮﻡ ﺗﺎﺑﻊ ﺭﺍ ﺑﻪ ﺷﻜﻞ ﻗﺎﺑﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ﺍﺻﻠﻲ ﺩﺭ ﻣﻲ ﺁﻭﺭﻳﻢ ‪:‬‬
‫‪æ m2 ö‬‬
‫‪T ( n ) = 4T‬‬ ‫) ‪( n ) +1 ¾¾¾® T ( 2‬‬
‫‪n=2m‬‬ ‫‪m‬‬
‫¾¾¾¾ ‪= 4T ç 2 ÷ +1‬‬
‫‪è ø‬‬
‫) ‪s(m)=T(2m‬‬ ‫‪æmö‬‬
‫‪® S ( m ) = 4S ç ÷ +1‬‬
‫‪è2ø‬‬
‫ﺣﺎﻝ ﻣﻲﺗﻮﺍﻧﻴﻢ ﺑﺮﺍﻱ ﺭﺍﺑﻄﻪ ﺑﺪﺳﺖ ﺁﻣﺪﻩ ﺍﺯ ﺣﺎﻟﺖ ‪ I‬ﻗﻀﻴﻪ ﺍﺻﻠﻲ ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ ‪:‬‬
‫‪ìï f(m) = 1‬‬
‫) (‬
‫¾¾¾ ‪® T ( m ) = θ m 2‬‬ ‫‪® T ( n ) = θ log 2 n‬‬ ‫(‬ ‫)‬
‫‪m‬‬
‫‪case I: for e >0‬‬
‫‪í logab‬‬ ‫¾¾¾¾¾¾‬ ‫‪n=2‬‬

‫‪ïîm‬‬
‫‪4‬‬
‫‪= m log2 = m 2‬‬ ‫(‬
‫‪f ( m ) =O m logba-e‬‬‫)‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۴۰‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﮔﺰﻳﻨﻪﻫﺎ‪ ،‬ﺭﺍﺑﻄﺔ ) ‪ T ( n‬ﺑﺎﻳﺪ ﺷﻜﻠﻲ ﺑﻪ ﻓﺮﻡ ﺯﻳﺮ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪:‬‬
‫‪T ( n ) = C1 ( logn ) + C2‬‬
‫‪2‬‬

‫‪T ( 2 ) = 1 Þ C1 + C2 = 1‬‬
‫ﻛﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﮔﺰﻳﻨﻪﻫﺎ‪ ،‬ﺗﻨﻬﺎ ﮔﺰﻳﻨﺔ ‪ ۳‬ﺩﺭ ﻣﻌﺎﺩﻟﺔ ﺑﺎﻻ ﺻﺪﻕ ﻣﻲﻛﻨﺪ‪.‬‬

‫‪ ۳۵‬ـ ﺩﺭ ﺭﻭﺍﻝ ﺑﺎﺯﮔﺸﺘﻲ ﺯﻳﺮ ﻣﻘﺪﺍﺭ )‪ Re c ( 5,3‬ﻛﺪﺍﻡ ﺍﺳﺖ؟‬


‫) ‪int Rec ( int P ,int q‬‬ ‫‪15 (۱‬‬
‫{‬ ‫‪25 (۲‬‬
‫;‪int R‬‬ ‫‪75 (۳‬‬
‫;‪if ( q <= 0 ) return1‬‬
‫‪125 (۴‬‬
‫; ) ‪R = Re c ( p, q / 2‬‬
‫;‪R = R * R‬‬
‫) ‪if ( q mod 2 == 0‬‬
‫;‪return R‬‬
‫‪else‬‬
‫;‪return R * P‬‬
‫}‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫)‪Re c ( 5,3‬‬ ‫)‪R = Re c ( 5,1‬‬ ‫) ‪R = Re c ( 5, 0‬‬

‫´ ‪3 <= 0‬‬ ‫´ ‪1 <= 0‬‬ ‫‪0 <= 0 P‬‬

‫) ‪R = Re c ( 5, 0‬‬ ‫‪return1‬‬
‫)‪R = Re c ( 5,1‬‬

‫‪R = 5*5‬‬ ‫‪R = 1*1‬‬

‫´ ‪3mod 2 == 0‬‬ ‫´ ‪1mod 2 == 0‬‬

‫‪return25*5‬‬ ‫‪return 1*5‬‬

‫‪125‬‬
‫ﻣﺸﺎﻫﺪﻩ ﻣﻲﺷﻮﺩ ﻛﻪ ﺑﺎ )‪ Re c ( 5,3‬ﻣﻘﺪﺍﺭ ‪ 125‬ﺑﻪ ﻋﻨﻮﺍﻥ ﺟﻮﺍﺏ ﺑﺎﺯﮔﺸﺘﻲ ﺩﺭﻳﺎﻓﺖ ﻣﻲﺷﻮﺩ‪.‬‬
‫‪-‬ﺭﺍﺑﻄﻪﻱ ﺑﺎﺯﮔﺸﺘﻲ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪:‬‬
‫‪F ( x , 0 ) = F ( x + 1, 0 ) + F ( x + 1,1) , if x < n‬‬
‫‪F ( x ,1) = 2F ( x + 1, 0 ) + F ( x + 1,1) , if x < n‬‬
‫‪F ( n , 0) = 1‬‬
‫‪F ( n ,1) = 0‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۴۱‬‬

‫‪ ۳۶‬ـ ﺍﮔﺮ ﺍﺯ ﺍﻳﻦ ﺭﺍﺑﻄﻪ ﺑﺨﻮﺍﻫﻴﻢ ﻣﻘﺪﺍﺭ )‪ F (1,1‬ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻛﺎﺭﺍ ﺣﺴﺎﺏ ﻛﻨﻴﻢ‪ ،‬ﭼﻨﺪ ﺑﺎﺭ ﻋﻤﻞ »ﺟﻤﻊ« )ﻫﻤﺎﻥ ‪ +‬ﺩﺭ ﺭﺍﺑﻄﻪﻫﺎﻱ ﻓﻮﻕ( ﺭﺍ ﺑﺎﻳـﺪ‬
‫ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ؟‬

‫(‬
‫‪O 2n -1‬‬ ‫‪) (۴‬‬ ‫)‪O(n‬‬ ‫‪(۳‬‬ ‫‪( ) (۲‬‬
‫‪O n2‬‬ ‫‪( ) (۱‬‬
‫‪O 2n‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٣‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺭﻭﺍﺑﻂ ﺑﺎﺯﮔﺸﺘﻲ ﻣﻌﻤﻮﻻﹰ ﺑﺪﻳﻦ ﺻﻮﺭﺕ ﺍﺳﺖ ﻛﻪ ﻫﺮ ﺟﻤﻠﻪ ﺑﺰﺭﮒﺗﺮ ﺍﺯ ﺟﻤﻼﺕ ﻛﻮﭼﻚﺗﺮ ﺑﻪ ﺩﺳﺖ ﻣﻲﺁﻳﺪ ﺗﺎ ﺍﻳﻨﻜﻪ ﺑﻪ ﺷﺮﻁ ﭘﺎﻳﺎﻧﻲ ﺑﺮﺳﻴﻢ‪ .‬ﺍﻣﺎ‬
‫ﺗﻌﺮﻳﻒ ﺑﺎﺯﮔﺸﺘﻲ ﻓﻮﻕ ﺑﺪﻳﻦ ﺻﻮﺭﺕ ﺍﺳﺖ ﻛﻪ ﺑﺮﺍﻱ ﻳﻚ ﺟﻤﻠﻪ ﻛﻮﭼﻚ ﺑﻪ ﺟﻤﻼﺕ ﺑﺰﺭﮒﺗﺮ ﻧﻴﺎﺯ ﺍﺳﺖ ﻭ ﺷﺮﻁ ﭘﺎﻳﺎﻧﻲ ﺭﻭﻱ ﺑﺰﺭﮒﺗﺮﻳﻦ ﺟﻤﻠﻪ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﻭﺍﻗﻊ ﺍﻳﻦ ﺗﻌﺮﻳﻒ ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺑﺮﻧﺎﻣﻪﺳﺎﺯﻱ ﭘﻮﻳﺎﺳﺖ‪.‬‬

‫‪x‬‬ ‫ﺗﻌﺪﺍﺩ ‪+‬‬ ‫ﺗﻌﺪﺍﺩ ‪ +‬ﻛﺎﺭﺍ‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪2‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪3‬‬ ‫‪2‬‬ ‫‪2‬‬

‫‪4‬‬ ‫‪4‬‬ ‫‪2‬‬

‫‪‬‬ ‫‪‬‬ ‫‪‬‬


‫‪n -3‬‬
‫‪n -1‬‬ ‫‪2‬‬ ‫‪2‬‬

‫‪n‬‬ ‫‪2n - 2‬‬ ‫‪2‬‬

‫‪2n -1 - 1 = O 2n -1‬‬‫) (‬ ‫) ‪2n - 3 = O ( n‬‬

‫ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﻣﺤﺎﺳﺒﺎﺕ ﺩﺭ ﺳﻄﻮﺡ ﺩﺭﺧﺖ ﺗﻜﺮﺍﺭﻱ ﻫﺴﺘﻨﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻳﻚ ﻣﺤﺎﺳﺒﻪ ﻛﺎﺭﺍ ﺑﻪ ﮔﻮﻧﻪﺍﻱ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﺍﻳﻦ ﻣﺤﺎﺳﺒﺎﺕ ﺗﻜﺮﺍﺭﻱ ﺻﺮﻑﻧﻈﺮ‬
‫ﺷﻮﺩ‪ .‬ﻫﻤﺎﻥ ﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣﻲﺷﻮﺩ ﺩﺭ ﻫﺮ ﺳﻄﺢ‪ ،‬ﻣﺤﺎﺳﺒﻪ ﺣﺪﺍﻛﺜﺮ ‪ 2‬ﻋﺒﺎﺭﺕ ﻛﺎﻓﻲ ﺍﺳﺖ‪.‬‬
‫‪ ۳۷‬ـ ﺩﺭ ﻳﻚ ﺯﻣﺴﺘﺎﻥ ﺳﺮﺩ‪ ،‬ﺧﺮﺱ ﻗﻄﺒﻲ ‪ n‬ﻗﻄﻌﻪ ﮔﻮﺷﺖ ﺩﻗﻴﻘﺎﹰ ﺑﻪ ﺍﻧﺪﺍﺯﻩﻫﺎﻱ ‪ ،2 ،1‬ﺗﺎ ‪ n‬ﺭﺍ ﺩﺭ ﻏﺎﺭﻱ ﺫﺧﻴﺮﻩ ﻛﺮﺩﻩ ﺍﺳﺖ‪ .‬ﺍﻭ ﻫـﺮ ﺭﻭﺯ ﻳﻜـﻲ ﺍﺯ‬
‫ﺍﻳﻦ ﻗﻄﻌﻪ ﮔﻮﺷﺖﻫﺎ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺗﺼﺎﺩﻓﻲ ﺍﻧﺘﺨﺎﺏ ﻣﻲﻛﻨﺪ‪ .‬ﺍﮔﺮ ﺍﻧﺪﺍﺯﻩﻱ ﮔﻮﺷﺖ ﻋﺪﺩ ﻓﺮﺩﻱ ﺑﻮﺩ‪ ،‬ﺁﻥ ﺭﺍ ﻛﺎﻣﻼﹰ ﻣﻲﺧﻮﺭﺩ‪ .‬ﺍﮔﺮ ﺯﻭﺝ ﺑـﻮﺩ‪ ،‬ﺁﻥ ﺭﺍ‬
‫ﺩﻗﻴﻘﺎﹰ ﻧﺼﻒ ﻣﻲﻛﻨﺪ‪ ،‬ﻳﻚ ﻧﺼﻒ ﺁﻥ ﺭﺍ ﻣﻲﺧﻮﺭﺩ ﻭ ﻧﺼﻒ ﺩﻳﮕﺮ ﺭﺍ ﻣﺠﺪﺩﺍﹰ ﺩﺭ ﻏﺎﺭ ﻗﺮﺍﺭ ﻣﻲﺩﻫﺪ‪ .‬ﺍﮔﺮ ﮔﻮﺷﺘﻲ ﻣﻮﺟﻮﺩ ﻧﺒﺎﺷﺪ‪ ،‬ﺧﺮﺱ ﻣﻲﻣﻴﺮﺩ‪ .‬ﺑﺎ‬
‫ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ‪ ،‬ﺑﺮﺍﻱ ‪n‬ﻫﺎﻱ ﺧﻴﻠﻲ ﺑﺰﺭﮒ ﺭﻭﺯﻫﺎﻱ ﺑﺎﻗﻴﻤﺎﻧﺪﻩ ﺍﺯ ﻋﻤﺮ ﺧﺮﺱ ﻣﺎ ﺗﺎﺑﻊ ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟‬

‫‪( ) (۴‬‬
‫‪q n2‬‬ ‫) ‪q ( n log n‬‬ ‫‪(۳‬‬ ‫) ‪q ( log n‬‬ ‫‪(۲‬‬ ‫)‪q(n‬‬ ‫‪(۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﻋﻤﺮ ﺧﺮﺱ ﺑﻪ ﺗﻌﺪﺍﺩ ﻗﻄﻌﺎﺕ ﮔﻮﺷﺘﻪ ﻭﺍﺑﺴﺘﻪ ﺍﺳﺖ ﻧﻪ ﻣﺠﻤﻮﻉ ﺁﻥﻫﺎ‪ .‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﻋﻤﺮ ﺧﺮﺱ ﺯﻣﺎﻧﻲ ﺑﻪ ﭘﺎﻳﺎﻥ ﻣﻲﺭﺳﺪ ﻛﻪ ﺗﻤﺎﻡ ﻗﻄﻌﺎﺕ ﺧﻮﺭﺩﻩ‬
‫ﺷﻮﻧﺪ ﺑﺎﻳﺪ ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ ﺧﻮﺭﺩﻩ ﺷﺪﻥ ﻫﻤﻪ ﻗﻄﻌﺎﺕ ﺭﺍ ﺣﺴﺎﺏ ﻛﻨﻴﻢ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۴۲‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪ : 1, 2, , n‬ﺍﺑﺘﺪﺍ )ﻣﺮﺣﻠﻪ ﺍﻭﻝ(‬ ‫‪ = n‬ﺗﻌﺪﺍﺩ ﻗﻄﻌﻪ ﮔﻮﺷﺖ‬


‫ﺩﺭ ﻣﺮﺣﻠﻪ ﺑﻌﺪﻱ ﻓﺮﺽ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺍﺯ ﻫﺮ ﻗﻄﻌﻪ ﻳﻚ ﺑﺎﺭ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ :‬ﻣﺮﺣﻠﻪ ﺩﻭﻡ‬ ‫‪1 , 2, 3 , 4, 5 , 6, , n‬‬ ‫)ﻓﺮﺩﻫﺎ ﺣﺬﻑ ﺷﺪﻩ ﻭ ﺯﻭﺝﻫﺎ ﻧﺼﻒ ﻣﻲﺷﻮﻧﺪ(‬

‫‪n‬‬ ‫‪n‬‬
‫‪1, 2,3, ,‬‬ ‫= ﺗﻌﺪﺍﺩ ﻗﻄﻌﻪ ﮔﻮﺷﺖ‬
‫‪2‬‬ ‫‪2‬‬

‫‪ :‬ﻣﺮﺣﻠﻪ ﺳﻮﻡ‬ ‫‪n‬‬ ‫)ﻓﺮﺩﻫﺎ ﺣﺬﻑ ﺷﺪﻩ ﻭ ﺯﻭﺝﻫﺎ ﻧﺼﻒ ﻣﻲﺷﻮﻧﺪ(‬


‫‪1 , 2, 3 , 4, ,‬‬
‫‪2‬‬

‫‪n‬‬ ‫‪n‬‬
‫‪1, 2,3, ,‬‬ ‫= ﺗﻌﺪﺍﺩ ﻗﻄﻌﻪ ﮔﻮﺷﺖ‬
‫‪4‬‬ ‫‪4‬‬
‫ﭼﻮﻥ ﻋﻤﺮ ﺧﺮﺱ ﺯﻣﺎﻧﻲ ﺑﻪ ﭘﺎﻳﺎﻥ ﻣﻲﺭﺳﺪ ﻛﻪ ﺗﻤﺎﻡ ﻗﻄﻌﺎﺕ ﺧﻮﺭﺩﻩ ﺷﻮﻧﺪ‪ ،‬ﺍﻳﻦ ﺭﻭﻧﺪ ﺑﺎﻳﺪ ﺗﺎ ﺑﻪ ﭘﺎﻳﺎﻥ ﺭﺳﻴﺪﻥ ﻫﻤﻪ ﻗﻄﻌﺎﺕ ﺍﺩﺍﻣﻪ ﭘﻴﺪﺍ ﻛﻨﺪ‪.‬‬
‫‪æ‬‬ ‫‪ö‬‬
‫‪n n n‬‬ ‫‪æ‬‬ ‫‪1 1‬‬ ‫‪1ö‬‬ ‫‪ç n‬‬ ‫÷‬
‫‪ :‬ﺗﻌﺪﺍﺩ ﻗﻄﻌﺎﺕ ﮔﻮﺷﺖ‬ ‫‪n + + + +  = n ç1 + + +  + ÷ = n ç‬‬ ‫) ‪÷ = 2n = q ( n‬‬
‫‪2 4 8‬‬ ‫‪è‬‬ ‫‪2 4‬‬ ‫‪8ø‬‬ ‫‪çç n - 1‬‬ ‫÷÷‬
‫‪è‬‬ ‫‪2‬‬ ‫‪ø‬‬

‫ﻧﻜﺘﻪ ‪ :‬ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺯﻣﺎﻥ ﺧﻮﺭﺩﻩ ﺷﺪﻥ ﻳﻚ ﻗﻄﻌﻪ ﻣﻬﻢ ﻧﻴﺴﺖ ﺑﻠﻜﻪ ﻣﻬﻢ‪ ،‬ﺧﻮﺭﺩﻩ ﺷﺪﻥ ﻳﻚ ﻗﻄﻌﻪ ﺍﺳﺖ‪.‬‬

‫‪ ۳۸‬ـ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﺎﺑﻊ ﺭﻭﺑﻪﺭﻭ ﻭ ﻟﻴﺴﺖ ﺣﻠﻘﻮﻱ ﻣﺬﻛﻮﺭ ﺑﻪ ﺍﺯﺍﻱ ﻣﻘﺎﺩﻳﺮ ‪ n‬ﺑﺮﺍﺑﺮ ‪ 729‬ﻭ ‪ 2200‬ﺧﺮﻭﺟﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﺑﺮﺍﺑﺮ ﭼﻨﺪ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟‬
‫{ ) ‪int SO ( LIST* L‬‬ ‫‪ 1 (۱‬ﻭ ‪40‬‬
‫{ ) ‪while ( L - > next ! = L‬‬
‫‪L ® next = L - > next - > next‬‬ ‫‪ 1 (۲‬ﻭ ‪1‬‬
‫;‪L = L ® next‬‬ ‫‪ 729 (۳‬ﻭ ‪2200‬‬
‫}‬
‫;‪return L ® data‬‬ ‫‪ (۴‬ﻫﻴﭻﻛﺪﺍﻡ‬
‫}‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٤‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﻋﺪﺩﻱ ﻛﻪ ﺑﻪ ﻋﻨﻮﺍﻥ ﺧﺮﻭﺟﻲ ﺗﻮﺳﻂ ﺗﺎﺑﻊ ‪ SO‬ﺑﺎﺯﮔﺮﺩﺍﻧﺪﻩ ﻣﻲﺷﻮﺩ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬

‫(‬ ‫)‬
‫‪ : 2 ´ n - 2êëlog n úû + 1‬ﺧﺮﻭﺟﻲ‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ‪:‬‬
‫‪ n = 729 Þ‬ﺍﮔﺮ‬ ‫(‬
‫‪ = 2 ´ 729 - 2ëêlog 729ûú + 1‬ﺧﺮﻭﺟﻲ‬ ‫)‬
‫‪512‬‬
‫(‬
‫‪= 2 ´ 729 - 2 + 1 = 435‬‬
‫‪‬‬
‫‪9‬‬
‫)‬
‫‪217‬‬

‫‪ n = 2200 Þ‬ﺍﮔﺮ‬ ‫(‬


‫‪ = 2 ´ 2200 - 2ëêlog 2200ûú + 1‬ﺧﺮﻭﺟﻲ‬ ‫)‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۴۳‬‬

‫‪æ‬‬ ‫‪2048 ö‬‬


‫‪= 2 ´ ç 2200 - 211‬‬ ‫‪÷ + 1 = 305‬‬
‫‪è‬‬ ‫‪‬‬ ‫‪ø‬‬
‫‪152‬‬

‫‪ ۳۹‬ـ ﻛﻢﺭﺷﺪﺗﺮﻳﻦ ﺣﺪ ﺑﺎﻻﻱ ﺗﺎﺑﻊ ﺑﺎﺯﮔﺸﺘﻲ ‪ f ( n ) = 4f ( n / 2 ) + n 2 log n , f (1) = 1‬ﻛﺪﺍﻡ ﺍﺳﺖ؟‬

‫(‬
‫) ‪O n 2 log ( log n‬‬ ‫‪) (۴‬‬ ‫(‬
‫) ‪O n 2 ( log n‬‬
‫‪2‬‬
‫‪) (۳‬‬ ‫‪( ) (۲‬‬
‫‪O n3‬‬ ‫(‬
‫‪O n 2 log n‬‬ ‫‪) (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٣‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪æ n ö‬‬
‫‪f ( n ) = 4f ç ÷ + 22 log n‬‬
‫‪è 2ø‬‬
‫ﻃﺒﻖ ﻗﻀﻴﻪ ﺍﺻﻠﻲ ﺑﺮﺍﻱ ‪ b = 2 ، a = 4‬ﻭ ‪ f ( n ) = n 2 log n‬ﺩﺍﺭﻳﻢ‪:‬‬
‫‪log ba = 2‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ ﺍﻳﻦ ﺗﺎﺑﻊ ﺑﺎﺯﮔﺸﺘﻲ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫(‬
‫‪O n 2 log 2 n‬‬ ‫)‬
‫÷‪T ( n ) = æç n log b ( log n ) ö‬‬ ‫ﻫﺮﮔﺎﻩ ÷‪ f ( n ) = q æç n log b ( log n )k ö‬ﺑﺮﺍﻱ ‪ k ³ 0‬ﺁﻥﮔﺎﻩ‬
‫‪a‬‬
‫‪k +1‬‬ ‫‪a‬‬

‫‪è‬‬ ‫‪ø‬‬ ‫‪è‬‬ ‫‪ø‬‬

‫ﺩﺭﻫﻢ ﺳﺎﺯﻱ‬
‫‪ ۴۰‬ـ ﺩﺭ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ )‪ (hashing‬ﺑﺎ ﻭﺍﺭﺳﻲ ﺧﻄﻲ )‪ (linear probing‬ﺍﮔﺮ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺑﺮﺍﻱ ‪ 7‬ﻋﻀﻮ ﻭﺭﻭﺩﻱ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﺷﺪ‪.‬‬
‫‪key A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬
‫‪hash 3‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪3‬‬

‫ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎﻱ ﺯﻳﺮ ﻧﻤﻲﺗﻮﺍﻧﺪ ﺣﺎﺻﻞ ﺩﺭﺝ ﺍﻳﻦ ﻋﻨﺎﺻﺮ ﺑﺎ ﻫﺮ ﺗﺮﺗﻴﺐ ﺩﻟﺨﻮﺍﻩ ﺩﺭ ﺁﺭﺍﻳﻪﻱ ‪ 7‬ﺗﺎﻳﻲ )ﻛﻪ ﺩﺭ ﺍﺑﺘﺪﺍ ﺗﻬﻲ ﺍﺳﺖ‪ (.‬ﺑﺎﺷﺪ؟‬
‫‪H [ 0...6] = [ C‬‬ ‫‪E‬‬ ‫‪B‬‬ ‫‪(۲‬‬
‫‪G F‬‬ ‫]‪D A‬‬ ‫‪H [ 0...6] = [ E‬‬ ‫‪F‬‬ ‫‪G A C‬‬ ‫‪(۱‬‬ ‫‪B‬‬ ‫]‪D‬‬
‫‪H [ 0...6] = [ C G B A D E F ] (۴‬‬ ‫‪H [ 0...6] = [ B D F A C E G ] (۳‬‬
‫ﺣﻞ‪ :‬ﮔﺰﯾﻨﻪ ‪ 2‬درﺳﺖ اﺳﺖ‪.‬‬
‫ﮔﺰﻳﻨﻪ ‪ :۱‬ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻋﻨﺎﺻﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ‪ A B C D E F G‬ﺑﺎﺷﺪ ﺁﻥﮔﺎﻩ‪:‬‬
‫‪0 1 2 3 4 5 6‬‬
‫‪H: E F G A C B D‬‬
‫ﮔﺰﻳﻨﻪ ‪ :۳‬ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻋﻨﺎﺻﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ‪ A E C G B D F‬ﺑﺎﺷﺪ ﺁﻥﮔﺎﻩ‪:‬‬
‫‪0 1 2 3 4 5 6‬‬
‫‪H: B D F A C E G‬‬
‫ﮔﺰﻳﻨﻪ ‪ :۴‬ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻋﻨﺎﺻﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ‪ A D E F C G B‬ﺑﺎﺷﺪ ﺁﻥﮔﺎﻩ‪:‬‬
‫‪0 1 2 3 4 5 6‬‬
‫‪H: C G B A D E F‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۴۴‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﮔﺰﻳﻨﻪ ‪ :۲‬ﺍﺑﺘﺪﺍ ‪ G‬ﺩﺭﺝ ﺷﺪﻩ ﺍﺳﺖ )ﺯﻳﺮﺍ ‪ G‬ﺩﺭ ﻣﻜﺎﻥ ﺩﺭ ﻫﻢﺳﺎﺯﻱ ﺧﻮﺩ ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪ (.‬ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ﺁﻥ ‪ F‬ﺩﺭﺝ ﺷﻮﺩ‪ ،‬ﺑﺎﻳﺪ ﺩﺭ ﺧﺎﻧﻪ ‪ 6‬ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ ﻭ‬
‫ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ‪ A ، G‬ﻳﺎ ‪ C‬ﺩﺭﺝ ﺷﻮﻧﺪ‪ ،‬ﻃﺒﻖ ‪ linear probing‬ﺑﺎﻳﺪ ﺩﺭ ﺧﺎﻧﻪ ‪ 4‬ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ‪ .‬ﺩﺭ ﻧﺘﻴﺠﻪ ﮔﺰﻳﻨﻪ ‪ 2‬ﻏﻠﻂ ﺍﺳﺖ‪.‬‬
‫ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﺗﺮﺗﻴﺐ ﺩﺭﺟﻲ ﻛﻪ ﺑﺮﺍﻱ ﮔﺰﻳﻨﻪﻫﺎﻱ ‪ ۱‬ﻭ ‪ ۳‬ﻭ ‪ ۴‬ﻣﺜﺎﻝ ﺯﺩﻩ ﺷﺪ‪ ،‬ﺗﻨﻬﺎ ﺣﺎﻟﺖ ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﻭ ﺑﻪ ﺍﺯﺍﻱ ﺟﺎﻳﮕﺸﺖﻫﺎﻱ ﺩﻳﮕﺮﻱ ﺍﺯ‬
‫ﻋﻨﺎﺻﺮ ﻧﻴﺰ ﻣﻲﺗﻮﺍﻥ ﺑﻪ ﭼﻨﻴﻦ ﺁﺭﺍﻳﻪﻫﺎﻳﻲ ﺭﺳﻴﺪ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺩﺭ ﮔﺰﻳﻨﻪ ‪ ،۱‬ﺍﮔﺮ ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻋﻨﺎﺻﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ‪B A C D E F G‬‬
‫ﺑﺎﺷﺪ‪ ،‬ﻧﺘﻴﺠﻪ ﺁﺭﺍﻳﻪ ﮔﺰﻳﻨﻪ ‪ ۱‬ﻣﻲﺷﻮﺩ‪.‬‬

‫‪ ۴۱‬ـ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﺟﺪﻭﻝ ﺩﺭﻫﻢ ﺳﺎﺯﻱ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ‪) 80‬ﻫﺸﺘﺎﺩ( ﺍﺯ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺧﻄﻲ ﺑﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﺪ‪ .‬ﺍﺑﺘﺪﺍ ﺟﺪﻭﻝ ﺧﺎﻟﻲ ﺑـﻮﺩﻩ‬
‫ﺍﺳﺖ ﻭ ﺗﻨﻬﺎ ﻋﻤﻠﻴﺎﺕ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻭ ﺟﺴﺘﺠﻮ ﺭﻭﻱ ﺟﺪﻭﻝ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﻭﺿﻌﻴﺖ ﺩﺭﺍﻳﻪﻫﺎﻱ ‪ 45‬ﺗﺎ ‪ 56‬ﺟﺪﻭﻝ ﺑﻪ ﺻـﻮﺭﺕ‬
‫ﺯﻳﺮ ﺍﺳﺖ‪ .‬ﺍﻋﺪﺍﺩ ﺑﺎﻻﻱ ﺁﺭﺍﻳﻪ‪ ،‬ﺍﻧﺪﻳﺲ ﺩﺭﺍﻳﻪﻫﺎ ﻭ ﺍﻋﺪﺍﺩ ﭘﺎﻳﻴﻦ ﺁﺭﺍﻳﻪ ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ ﺩﺭﻫﻢ ﺳﺎﺯﻱ ﺍﺳﺖ‪ .‬ﺍﮔﺮ ﻳﻜﺒﺎﺭ ﺩﻳﮕﺮ ﺍﺯ ﺟﺪﻭﻝ ﺩﺭﻫﻢ ﺳﺎﺯﻱ‬
‫ﺧﺎﻟﻲ ﺷﺮﻭﻉ ﻛﻨﻴﻢ ﻭ ﻫﻤﺎﻥ ﻋﻤﻠﻴﺎﺕ ﺭﺍ ﺑﻪ ﻏﻴﺮ ﺍﺯ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻛﻠﻴﺪ ‪ e‬ﺩﻭﺑﺎﺭﻩ ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ‪ .‬ﺩﺭ ﺩﺭﺍﻳﻪﻱ ‪ 50‬ﭼﻪ ﻛﻠﻴﺪﻱ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﺩ؟‬
‫‪45 46 47 48 49 50 51 52 53 54 55 56‬‬ ‫‪i (۲‬‬ ‫‪h (۱‬‬
‫‪a‬‬ ‫‪b c d e f‬‬ ‫‪g h‬‬ ‫‪i‬‬ ‫‪j‬‬ ‫‪g (۲‬‬ ‫‪f (۱‬‬
‫‪46 46 46 47 46 51 47 46 48 49‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٤‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﭘﺲ ﺍﺯ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ ﻛﻠﻴﺪ ‪ a‬ﺩﺭ ﺧﺎﻧﻪ ‪ ، 46‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺧﻄﻲ ﺑﺎﺯ ﻛﻠﻴﺪﻫﺎﻱ ‪ d , c , b‬ﺑﻪ ﺗﺮﺗﻴﺐ ﺩﺭ ﺧﺎﻧﻪﻫﺎﻱ ‪49 , 48 , 47‬‬
‫ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﻧﺪ‪ .‬ﺳﭙﺲ ﻛﻠﻴﺪ ‪ f‬ﺩﺭ ﺧﺎﻧﻪ ‪ 51‬ﻛﻪ ﺧﺎﻟﻲ ﺍﺳﺖ ﻣﻲﻧﺸﻴﻨﺪ‪ .‬ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺑﻪ ﺍﺯﺍﻱ ‪ g‬ﺧﺎﻧﻪ ‪ 47‬ﺍﺳﺖ؛ ﺍﻣﺎ ﺍﺯﺁﻧﺠﺎﻛﻪ ﻗﺒﻼﹰ‬
‫ﻳﻚ ﻋﻨﺼﺮ ﺑﻪ ﺍﻳﻦ ﺧﺎﻧﻪ ﺩﺭ ﻫﻢﺳﺎﺯﻱ ﺷﺪﻩ ﺍﺳﺖ‪ g ،‬ﺑﺎ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺧﻄﻲ ﺑﺎﺯ ﺩﺭ ﺧﺎﻧﻪ ‪ 50‬ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﺩ‪ .‬ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺑﺪﻭﻥ ﺍﺿﺎﻓﻪ‬
‫ﻛﺮﺩﻥ ﻛﻠﻴﺪ ‪ e‬ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬

‫‪45 46 47 48 49 50 51 52 53 54 55 56‬‬
‫‪a‬‬ ‫‪b c d g f‬‬ ‫‪h‬‬ ‫‪i‬‬ ‫‪j‬‬
‫‪46 46 46 47 47 51 46 48 49‬‬

‫‪ ۴۲‬ـ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﺩﺭ ﺳﺎﺧﺖ ﺟﺪﻭﻝ ﺩﺭﻫﻢ ﺳﺎﺯﻱ ﺯﻳﺮ ﺍﺯ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺧﻄﻲ ﺑﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺷـﺪﻩ ﺍﺳـﺖ‪ .‬ﺍﮔـﺮ ﺗـﺎﺑﻊ ‪ Hash‬ﺑـﻪ ﺻـﻮﺭﺕ‬
‫ﺑﺎﻗﻴﻤﺎﻧﺪﻩ ﺗﻘﺴﻴﻢ ﺑﺮ ‪ 5‬ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺑﺎﺷﺪ‪ ،‬ﻛﺪﺍﻡ ﮔﺰﻳﻨﻪ ﻧﻤﻲﺗﻮﺍﻧﺪ ﺗﺮﺗﻴﺐ ﺻﺤﻴﺢ ﺩﺭﺝ ﻋﻨﺎﺻﺮ ﺩﺭ ﺟﺪﻭﻝ ﺑﺎﺷﺪ؟ ﺗﺮﺗﻴﺐ ﺍﺯ ﭼـﭗ ﺑـﻪ ﺭﺍﺳـﺖ‬
‫ﺍﺳﺖ‪.‬‬
‫‪0‬‬ ‫‪10‬‬ ‫‪11 ،6 ،7 ،10 ،15 (۱‬‬
‫‪1‬‬ ‫‪11‬‬ ‫‪11 ،6 ،10 ،7 ،15 (۲‬‬
‫‪2‬‬ ‫‪6‬‬
‫‪10 ،11 ،6 ،7 ،15 (۳‬‬
‫‪3‬‬ ‫‪7‬‬
‫‪11 ،10 ،6 ،15 ،7 (۴‬‬
‫‪4‬‬ ‫‪15‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٤‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﺻﻮﺭﺕ ﺳﺆﺍﻝ ﺗﻮﺿﻴﺤﻲ ﺩﺭﺑﺎﺭﻩ ﭼﮕﻮﻧﮕﻲ ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻋﻨﺎﺻﺮ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺟﺪﻭﻝ ﻋﻨﺎﺻﺮ ﺑﻪ ﺻﻮﺭﺕ ﻣﺮﺗﺐ ﻫﺴﺘﻨﺪ‪ ،‬ﺍﺣﺘﻤﺎﻻﹰ‬
‫ﻣﻨﻈﻮﺭ ﻃﺮﺍﺡ ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻋﻨﺎﺻﺮ ﺑﻪ ﺻﻮﺭﺕ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۴۵‬‬

‫ﺩﺭ ﺟﺪﻭﻝ ﺯﻳﺮ ﻋﻨﺎﺻﺮ ﻫﺮ ﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎ ﺭﺍ ﺩﺭ ﻳﻚ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺩﺭﺝ ﻛﺮﺩﻩﺍﻳﻢ‪.‬‬


‫ﻋﻨﺎﺻﺮ‬ ‫ﺑﺎﻗﻲﻣﺎﻧﺪﻩ‬
‫ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ‬
‫ﮔﺰﻳﻨﻪ‬ ‫‪10,15‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬
‫‪10‬‬ ‫‪11‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪15‬‬ ‫‪1‬‬ ‫‪6,11‬‬ ‫‪1‬‬
‫‪10‬‬ ‫‪11‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪15‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪2‬‬
‫‪10‬‬ ‫‪11‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪15‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪10‬‬ ‫‪11‬‬ ‫‪6‬‬ ‫‪15‬‬ ‫‪7‬‬ ‫‪4‬‬ ‫‪4‬‬
‫ﺩﺭ ﺻﻮﺭﺕ ﺑﺮﻭﺯ ﺗﺼﺎﺩﻡ ﺍﺯ ﺭﻭﺵ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬
‫ﺍﮔﺮ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺑﺮﺍﻱ ﻳﻚ ﻛﻠﻴﺪ‪ ،‬ﺁﺩﺭﺳﻲ ﺭﺍ ﺗﻮﻟﻴﺪ ﻛﻨﺪ ﻛﻪ ﺍﻳﻦ ﺁﺩﺭﺱ ﻗﺒﻼﹰ ﺍﺷﻐﺎﻝ ﺷﺪﻩ ﺑﺎﺷﺪ‪ ،‬ﻗﺮﺍﺭ ﺩﺍﺩﻥ ﺍﻳﻦ ﻛﻠﻴﺪ ﺭﺍ ﺩﺭ ﺍﻭﻟﻴﻦ ﺧﺎﻧﻪ ﺧﺎﻟﻲ‬
‫ﺑﻌﺪ ﺍﺯ ﺁﺩﺭﺱ ﺗﻮﻟﻴﺪ ﺷﺪﻩ‪ ،‬ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﮔﻮﻳﻨﺪ‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪: ۱‬‬
‫ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻛﻠﻴﺪﻫﺎ‬
‫¾¾‬
‫®‬
‫‪ìA, C, B, D, E, F, G‬‬
‫‪ï‬‬ ‫‪é0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6ù‬‬
‫‪íA, B, C, D, E, F, G Þ H : ê E‬‬ ‫‪F‬‬ ‫‪G A C‬‬ ‫‪B‬‬ ‫‪Dú‬‬
‫‪ïB, A, C, D, E, F, G‬‬ ‫‪ë‬‬ ‫‪û‬‬
‫‪î‬‬
‫ﮔﺰﻳﻨﺔ ‪:۳‬‬
‫ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻛﻠﻴﺪﻫﺎ‬
‫¾¾‬
‫®‬
‫‪ìA, C, ٍ, G, B, D, F‬‬
‫‪ï‬‬ ‫‪é0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6ù‬‬
‫‪íA, E, C, G, B, D, F Þ H : ê B‬‬ ‫‪D F‬‬ ‫‪A C‬‬ ‫‪E‬‬ ‫‪Gú‬‬
‫‪ïE, A, C, G, B, D, F‬‬ ‫‪ë‬‬ ‫‪û‬‬
‫‪î‬‬
‫ﮔﺰﻳﻨﺔ ‪:۴‬‬
‫ﺗﺮﺗﻴﺐ ﺩﺭﺝ ﻛﻠﻴﺪﻫﺎ‬
‫¾¾‬
‫®‬
‫‪ìA ü‬‬
‫‪ï ï‬‬ ‫‪é0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6 ù‬‬
‫‪ïD ï‬‬
‫‪í ý , C, G, B Þ H : êC‬‬ ‫‪G B‬‬ ‫‪A D E‬‬ ‫‪Fú‬‬
‫‪ïE ï‬‬ ‫‪ë‬‬ ‫‪û‬‬
‫‪ïîF ïþ‬‬
‫‪0 1 2 3 4 5 6‬‬
‫!‪4‬‬ ‫‪H:‬‬
‫[‬ ‫‪G‬‬ ‫]‬
‫ﮔﺰﻳﻨﺔ ‪: ۲‬‬
‫ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ‪ F ،G‬ﺑﻴﺎﻳﺪ ﺑﺎﻳﺪ ﺩﺭ ‪ 6‬ﺑﻨﺸﻴﻨﺪ ﻛﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﮔﺰﻳﻨﺔ ‪ 2‬ﻏﻠﻂ ﺍﺳﺖ‪ .‬ﻫﺮ ﻋﻨﺼﺮ ‪ A‬ﻳﺎ ‪ C‬ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ ‪ G‬ﺑﻴﺎﻳﺪ‪ ،‬ﺣﺘﻤﺎﹰ ﺑﺎﻳﺪ ﺩﺭ ‪ ۴‬ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۴۶‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫‪n‬‬
‫= ‪ a‬ﺍﺳﺖ ﺑﺎ ﺗﻮﺟـﻪ ﺑـﻪ ﺩﻭ ﺭﻭﺵ‬ ‫‪ ۴۳‬ـ ﺩﺭ ﻳﻚ ﺗﺎﺑﻊ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻓﺎﻛﺘﻮﺭﻟﻮﺩ ﻋﺒﺎﺭﺕ ﺍﺳﺖ ﺍﺯ ﺩﺭﻫﻤﺴﺎﺯﻱ ‪ n‬ﻛﻠﻴﺪ ﺑﻪ ‪ m‬ﻣﻜﺎﻥ ﻛﻪ ﺑﻪ ﺻﻮﺭﺕ‬
‫‪m‬‬
‫ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ ﻭ ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ‪ ،‬ﻣﻘﺎﺩﻳﺮﻱ ﻛﻪ ‪ a‬ﻣﻲﺗﻮﺍﻧﺪ ﺩﺭ ﺍﻳﻦ ﺩﻭ ﺭﻭﺵ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﭼﻴﺴﺖ؟‬
‫‪ (۲‬ﺩﺭ ﻫﺮ ﺩﻭ ﺭﻭﺵ ‪ a‬ﺣﺪﺍﻛﺜﺮ ﻣﻲﺗﻮﺍﻧﺪ ‪ 1‬ﺑﺎﺷﺪ‪.‬‬ ‫‪ (۱‬ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ‪ :‬ﺑﻴﺸﺘﺮ‪ ،‬ﻣﺴﺎﻭﻱ ﻳﺎ ﻛﻤﺘﺮ ﺍﺯ ‪1‬‬
‫ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ‪ :‬ﺣﺪﺍﻛﺜﺮ ‪1‬‬
‫‪ (۴‬ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ‪ :‬ﻫﻤﻴﺸﻪ ﺑﺮﺍﺑﺮ ‪ 1‬ﺍﺳﺖ‪.‬‬ ‫‪ (۳‬ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ‪ :‬ﺣﺪﺍﻛﺜﺮ ‪1‬‬
‫ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ‪ :‬ﺣﺪﺍﻛﺜﺮ ‪1‬‬ ‫ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ‪ :‬ﻫﻤﻴﺸﻪ ﺑﺮﺍﺑﺮ ﺑﺎ ‪ 1‬ﺍﺳﺖ‪.‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺩﺭ ﺭﻭﺵ ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ ﻋﻨﺎﺻﺮ ﺧﺎﺭﺝ ﺍﺯ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺫﺧﻴﺮﻩ ﻣﻲﺷﻮﻧﺪ‪ a ،‬ﻣﻲﺗﻮﺍﻧﺪ ﺑﻴﺸﺘﺮ‪ ،‬ﻣﺴﺎﻭﻱ ﻳﺎ ﻛﻤﺘﺮ ﺍﺯ ‪ 1‬ﺑﺎﺷﺪ‪ .‬ﺩﺭ ﺭﻭﺵ‬
‫ﺁﺩﺭﺱﺩﻫﻲ ﺑﺎﺯ ﭼﻮﻥ ﻫﻤﻪﻱ ﻋﻨﺎﺻﺮ ﺩﺭ ﺟﺪﻭﻝ ﺫﺧﻴﺮﻩ ﻣﻲﺷﻮﻧﺪ‪ a ،‬ﻣﻲﺗﻮﺍﻧﺪ ﺣﺪﺍﻛﺜﺮ ‪ 1‬ﺑﺎﺷﺪ‪.‬‬
‫‪n‬‬
‫= ‪ ، a‬ﻓﺎﻛﺘﻮﺭﻟﻮﺩ(‬ ‫‪ ۴۴‬ـ ﺩﺭ ﻳﻚ ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ ﺑﺎ ﺭﻭﺵ ﺯﻧﺠﻴﺮﻩﺳﺎﺯﻱ ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮﻱ ﻳﻚ ﻋﻨﺼﺮ ﺩﺭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﭼﻘﺪﺭ ﺍﺳﺖ؟)‬
‫‪m‬‬
‫) ‪Q ( log n‬‬ ‫‪(۴‬‬ ‫)‪Q(n‬‬ ‫‪(۳‬‬ ‫)‪Q (1‬‬ ‫‪(۲‬‬ ‫‪( ) (۱‬‬
‫‪Q n2‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺯﻣﺎﻧﻲ ﺭﺥ ﻣﻲﺩﻫﺪ ﻛﻪ ﻫﺮ ‪ n‬ﻋﻨﺼﺮ ﺑﻪ ﻳﻚ ﻣﻜﺎﻥ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮ ﺑﺮﺍﺑﺮ ﺑﺎ ﺯﻣﺎﻥ ﺟﺴﺘﺠﻮ ﺩﺭ‬
‫ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ ﻧﺎﻣﺮﺗﺐ ﺑﺎ ‪ n‬ﻋﻨﺼﺮ ﻳﻌﻨﻲ ) ‪ q ( n‬ﺍﺳﺖ‪.‬‬

‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ‬

‫‪ ۴۵‬ـ ﺑﺮ ﺍﺳﺎﺱ ﻗﻄﻌﻪ ﻛﺪ ﺯﻳﺮ‪ ،‬ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎﻱ ﺯﻳﺮ ﺩﺭ ﻣﺤﻞ ‪ A‬ﺩﺭﺳﺖ ﺍﺳﺖ؟‬
‫) ‪for ( item = n ;item > 1;item - -‬‬
‫{‬
‫; ]‪int Large = a [1‬‬
‫;‪int index =1‬‬
‫) ‪for ( i = 2;i <= item;i + +‬‬
‫{‬
‫; ] ‪L arg e = a [i‬‬
‫;‪index = i‬‬
‫}‬
‫; ] ‪a [index ] = a [item‬‬
‫;‪a [item ] = L arg e‬‬
‫‪// A‬‬
‫}‬
‫‪a [ j] < a [ j + 1] ، item < j <= n‬‬ ‫‪ (۲‬ﺑﺮﺍﻱ ﺗﻤﺎﻡ ‪j‬ﻫﺎﻳﻲ ﻛﻪ‬ ‫‪a [ j] < a [ j - 1] ، 1 < j <= item‬‬‫‪ (۱‬ﺑﺮﺍﻱ ﺗﻤﺎﻡ ‪j‬ﻫﺎﻳﻲ ﻛﻪ‬
‫‪ (۴‬ﺑﺮﺍﻱ ﺗﻤﺎﻡ ‪j‬ﻫﺎﻳﻲ ﻛﻪ ‪a [ j] < a [ j + 1] ، item <= j < n‬‬ ‫‪ (۳‬ﺑﺮﺍﻱ ﺗﻤﺎﻡ ‪j‬ﻫﺎﻳﻲ ﻛﻪ ‪a [ j] <= a [ j + 1] ، item <= j < n‬‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۴۷‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺷﺒﻪ ﻛﺪ ﺩﺍﺩﻩ ﺷﺪﻩ ﻣﺮﺑﻮﻁ ﺑﻪ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﻧﺘﺨﺎﺑﻲ ﺍﺳﺖ‪ .‬ﺩﺭ ﺣﻠﻘﻪﻱ ‪ for‬ﺩﺍﺧﻠﻲ )ﺑﺎ ﺷﻤﺎﺭﻧﺪﻩ ‪ (i‬ﻋﻨﺎﺻﺮ ﺩﺭ ﺯﻳﺮﺁﺭﺍﻳﻪﻱ ﻧﺎﻣﺮﺗﺐ ﺑﺎ ‪ Large‬ﻣﻘﺎﻳﺴﻪ‬
‫ﺷﻮﻧﺪ ﺗﺎ ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺯﻳﺮﺁﺭﺍﻳﻪﻱ ﻧﺎﻣﺮﺗﺐ ﺩﺭ ‪ Large‬ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ‪ .‬ﺩﺭ ﺍﻧﺘﻬﺎﻱ ﺣﻠﻘﻪﻱ ‪ for‬ﺑﺎ ﺷﻤﺎﺭﻧﺪﻩ ‪ ،i‬ﺑﺰﺭﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ )‪ (Large‬ﺩﺭ ﺁﺧﺮﻳﻦ‬
‫ﺧﺎﻧﻪ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﺩ‪ .‬ﺩﺭ ﻧﺘﻴﺠﻪ ﺍﻳﻦ ﻣﺮﺗﺐﺳﺎﺯﻱ‪ ،‬ﻋﻨﺎﺻﺮ ﺁﺭﺍﻳﻪ ﺭﺍ ﺍﺯ ﺍﻧﺘﻬﺎ ﺑﻪ ﺍﺑﺘﺪﺍ ﻣﺮﺗﺐ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫‪ ۴۶‬ـ ﭘﻴﭽﻴﺪﮔﻲ ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﺍﻟﮕﻮﺭﻳﺘﻢﻫﺎﻱ ﻣﺮﺗﺐﻛﻨﻨﺪﻩﻱ ﺯﻳﺮ )ﺑﺮ ﺣﺴﺐ ﺗﺎﺑﻌﻲ ﺍﺯ ﻭﺭﻭﺩﻱ( ﺩﺭ ﺣﺎﻟـﺖ ﻣﺘﻮﺳـﻂ )‪ (Average Case‬ﻭ ﺑـﺪﺗﺮﻳﻦ‬
‫ﺣﺎﻟﺖ )‪ (Worst Case‬ﺑﺎ ﻫﻢ ﻣﺘﻔﺎﻭﺕ ﺍﺳﺖ؟‬
‫‪Binary Insertion Sort (۲‬‬ ‫‪Quick Sort (۱‬‬
‫‪Merge Sort (۴‬‬ ‫‪Heap Sort (۳‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺣﺎﻟﺖ ﻣﺘﻮﺳﻂ‬ ‫ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ‬ ‫ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ‬ ‫ﻣﺮﺗﺐﺳﺎﺯﻱ‬
‫) ‪O ( n log n‬‬ ‫) (‬
‫‪O n2‬‬ ‫) ‪O ( n log n‬‬ ‫‪Quick Sort‬‬

‫) (‬
‫‪O n2‬‬ ‫) ‪O(n‬‬‫‪2‬‬
‫)‪O(n‬‬ ‫‪Binary Insertion Sort‬‬

‫) ‪O ( n log n‬‬ ‫) ‪O ( n log n‬‬ ‫) ‪O ( n log n‬‬ ‫‪Heap Sort‬‬


‫) ‪O ( n log n‬‬ ‫) ‪O ( n log n‬‬ ‫) ‪O ( n log n‬‬ ‫‪Merge Sort‬‬

‫‪ ۴۷‬ـ ﻳﻚ ﺁﺭﺍﻳﻪ ﺑﺎ ‪ 8‬ﻋﻨﺼﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪ .‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺑﺮﺍﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﻳﻦ ﺁﺭﺍﻳﻪ ﺣﺪﺍﻛﺜﺮ ﭼﻨﺪ ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﺧﻮﺍﻫﺪ ﺩﺍﺩ؟‬
‫‪33 (۴‬‬ ‫‪17 (۳‬‬ ‫‪13 (۲‬‬ ‫‪31 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪n‬‬
‫ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﺪ‪.‬‬ ‫ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺩﺭ ﻳﻚ ﺁﺭﺍﻳﻪ ﻭﺭﻭﺩﻱ ﺑﻪ ﻃﻮﻝ ‪ ،n‬ﺣﺪﺍﻛﺜﺮ ‪ n log n - n + 1‬ﻣﻘﺎﻳﺴﻪ ﻭ ﺣﺪﺍﻗﻞ ‪log n‬‬
‫‪2‬‬
‫ﻣﻘﺎﻳﺴﻪ ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﺪ‪.‬‬ ‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺩﺭ ﻳﻚ ﺁﺭﺍﻳﻪ ‪ 8‬ﻋﻨﺼﺮﻱ‪ ،‬ﺣﺪﺍﻛﺜﺮ ‪n log n - n + 1 = 8 ´ 3 - 8 + 1 = 24 - 7 = 17‬‬

‫‪ ۴۸‬ـ ﻣﻲﺩﺍﻧﻴﻢ ﻛﻪ ﻫﺰﻳﻨﻪﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺩﺭﺟﻲ )‪ (Insertion Sort‬ﺑﺮﺍﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ﻳﻚ ﺁﺭﺍﻳﻪﻱ ‪ A‬ﺑﺎ ‪ n‬ﻋﻨﺼﺮ ﻣﺘﻨﺎﺳﺐ ﺑـﺎ ﺗﻌـﺪﺍﺩ‬
‫»ﻭﺍﺭﻭﻧﮕﻲ« )‪(inversion‬ﻫﺎﻱ ﻋﻨﺎﺻﺮ ﺁﻥ ﺁﺭﺍﻳﻪ ﺍﺳﺖ‪ .‬ﺯﻭﺝ )‪ ( i , j‬ﺭﺍ ﻳﻚ ﻋﺪﺩ ﻭﺍﺭﻭﻧﮕﻲ ﻣﻲﮔـﻮﻳﻴﻢ ﺍﮔـﺮ ‪ i < j‬ﻭ ]‪ A [i ] > A [ j‬ﺑـﺎ ﻓـﺮﺽ‬
‫ﺍﺣﺘﻤﺎﻝ ﺍﻳﻦﻛﻪ ﻳﻚ ﺯﻭﺝ ﺍﻧﺪﻳﺲ ﺩﻟﺨﻮﺍﻩ ﺍﺯ ‪ A‬ﻳﻚ ﻭﺍﺭﻭﻧﮕﻲ ﺑﺎﺷﺪ ﺑﺮﺍﺑﺮ ‪ 1/ 2‬ﺍﺳﺖ‪ ،‬ﻣﻴﺎﻧﮕﻴﻦ ﺗﻌﺪﺍﺩ ﻭﺍﺭﻭﻧﮕﻲﻫﺎﻱ ﻳﻚ ﺁﺭﺍﻳﻪﻱ ‪ A‬ﺑﺎ ﻋﻨﺎﺻـﺮ‬
‫ﻣﺘﻤﺎﻳﺰ ﭼﮕﻮﻧﻪ ﺍﺳﺖ؟‬

‫‪n2 - n‬‬ ‫‪n2‬‬ ‫‪n2‬‬ ‫‪n2 - n‬‬


‫‪(۴‬‬ ‫‪(۳‬‬ ‫‪(۲‬‬ ‫‪(۱‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪2‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۴۸‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٤‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫)‪n ( n - 1‬‬
‫ﺗﻌﺪﺍﺩ ﻛﻞ ﺯﻭﺝﻫﺎ ﺩﺭ ﻳﻚ ﺁﺭﺍﻳﻪ ‪ n‬ﻋﻨﺼﺮﻱ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪2‬‬

‫‪i‬‬ ‫‪j‬‬ ‫ﺗﻌﺪﺍﺩ ﺯﻭﺝ )‪( i , j‬‬


‫‪1‬‬ ‫‪2 ×× n‬‬ ‫‪n -1‬‬
‫‪2‬‬ ‫‪3 ×× n‬‬ ‫‪n-2‬‬
‫‪3‬‬ ‫‪4 ×× n‬‬ ‫‪n -3‬‬

‫‪‬‬ ‫‪‬‬ ‫‪‬‬

‫‪n -1‬‬ ‫‪n‬‬ ‫‪1‬‬

‫‪n‬‬ ‫ـــ‬ ‫‪0‬‬


‫‪n -1‬‬
‫)‪n ( n - 1‬‬
‫=‪åi‬‬ ‫‪2‬‬
‫‪i =0‬‬
‫‪æ‬‬ ‫‪1ö‬‬ ‫‪1‬‬
‫÷ = )‪çf (x‬‬ ‫ﺍﺳﺖ‪.‬‬ ‫ﺍﺯ ﻃﺮﻓﻲ ﺍﺣﺘﻤﺎﻝ ﺍﻳﻨﻜﻪ ﻳﻚ ﺯﻭﺝ ﻭﺍﺭﻭﻧﻪ ﺑﺎﺷﺪ‬
‫‪è‬‬ ‫‪2ø‬‬ ‫‪2‬‬
‫)‪1 n ( n - 1‬‬
‫´‬ ‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﻴﺎﻧﮕﻴﻦ ﻭﺍﺭﻭﻧﮕﻲ ﻛﻞ ﺯﻭﺝﻫﺎ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪2‬‬ ‫‪2‬‬
‫ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ‪:‬‬
‫‪ ۴۹‬ـ ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺁﺭﺍﻳﻪﻱ ‪ A‬ﺑﺎ ‪ n‬ﻋﻨﺼﺮ ﻓﺮﺽ ﻛﻨﻴﺪ ‪ b > 1‬ﻳﻚ ﻋﺪﺩ ﺛﺎﺑﺖ ﺍﺳﺖ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻫﺰﻳﻨﻪﻱ ﻣﻘﺎﻳﺴﻪﻱ ﺩﻭ‬
‫ﻋﻨﺼﺮ ] ‪ A [i‬ﻭ ]‪ ، A [ j‬ﻳﺎ ﺗﻌﻮﻳﺾ ﺁﻥﻫﺎ‪ ،‬ﺍﮔﺮ ‪ j - i £ b‬ﺑﺮﺍﺑﺮ ﺻﻔﺮ )ﺧﻴﻠﻲ ﻛﻢ( ﻭ ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﺑﺮﺍﺑﺮ ‪) 1‬ﺧﻴﻠـﻲ ﺯﻳـﺎﺩ( ﺍﺳـﺖ‪ .‬ﺗﻮﺟـﻪ‬
‫ﻛﻨﻴﺪ ﻛﻪ ﺑﺎ ﺍﻳﻦ ﻓﺮﺽ‪ ،‬ﻫﺰﻳﻨﻪﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺩﺭﺟﻲ‪ ،‬ﺣﺒﺎﺑﻲ )‪ (Bubble sort‬ﺑﺮﺍﺑﺮ )‪ O (1‬ﻣﻲﺷﻮﺩ‪ .‬ﭼﻮﻥ ﻓﻘﻂ ﻋﻨﺎﺻـﺮ ﻣﺠـﺎﻭﺭ ﺭﺍ ﻣﻘﺎﻳﺴـﻪ ﻭ‬
‫ﺗﻌﻮﻳﺾ ﻣﻲﻛﻨﻨﺪ‪ .‬ﺑﺎ ﺍﻳﻦ ﻓﺮﺽ ﻫﺰﻳﻨﻪﻱ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ )‪ A (Merge sort‬ﺩﺭ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﭼﻘﺪﺭ ﺍﺳﺖ؟ )ﺑﻬﺘﺮﻳﻦ ﺟـﻮﺍﺏ ﺭﺍ ﺍﻧﺘﺨـﺎﺏ‬
‫ﻛﻨﻴﺪ‪) (.‬ﺑﺪﻳﻬﻲ ﺍﺳﺖ ﻛﻪ ﺍﮔﺮ ) ‪ T ( n‬ﺯﻣﺎﻥ ﺍﺟﺮﺍ ﺑﺎﺷﺪ ﺩﺍﺭﻳﻢ‪ n < b :‬ﻭ ‪(. T ( n ) = 1‬‬
‫) ‪O ( n lg n‬‬ ‫‪(۴‬‬ ‫) ‪O ( n lg n‬‬ ‫‪(۳‬‬ ‫) ) ‪O ( n / b lg ( n / b‬‬ ‫‪(۲‬‬ ‫) ) ‪O ( n lg ( n / b‬‬ ‫‪(۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﻱ ﺩﺭﻙ ﺑﻬﺘﺮ ﺗﻌﺮﻳﻒ ﻓﻮﻕ‪ ،‬ﻣﺮﺗﺐﺳﺎﺯﻱ ﺩﺭﺟﻲ ﺭﺍ ﺑﺮﺭﺳﻲ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺩﺭ ﻫﺮ ﮔﺬﺭ‬
‫ﻣﺮﺗﺐﺳﺎﺯﻱ ﺩﺭﺟﻲ‪ ،‬ﻋﻨﺼﺮﻱ ﻛﻪ ﺑﺎﻳﺪ ﺩﺭ ﻧﺎﺣﻴﻪ ﻣﺮﺗﺐ ﺷﺪﻩ ﺩﺭﺝ ﺷﻮﺩ ﻓﻘﻂ ﺑﺎ‬
‫ﻋﻨﺎﺻﺮ ﻣﺠﺎﻭﺭ ﺧﻮﺩ ﻣﻘﺎﻳﺴﻪ ﻣﻲﺷﻮﺩ ﻭ ﻣﻘﺎﻳﺴﺎﺕ ﻭ ﺗﻌﻮﻳﺾ ﻫﺰﻳﻨﻪﺍﻱ ﺑﺮﺍﺑﺮ )‪O (1‬‬
‫ﺩﺍﺭﺩ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻛﻞ ﻣﺮﺗﺐﺳﺎﺯﻱ ﻧﻴﺰ ﺩﺍﺭﺍﻱ ﻫﺰﻳﻨﻪ ﺧﻴﻠﻲ ﻛﻢ )‪ O (1‬ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۴۹‬‬

‫)‪ O (1‬ﺑﻮﺩﻥ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺣﺒﺎﺑﻲ ﺭﺍ ﻧﻴﺰ ﺑﺮﺭﺳﻲ ﻛﻨﻴﺪ‪.‬‬


‫ﻃﺒﻖ ﺗﻌﺮﻳﻒ ﻓﻮﻕ ﺩﺭ ﻣﻮﺭﺩ ﻫﺰﻳﻨﻪ ﻣﻘﺎﻳﺴﻪ ﻭ ﺗﻌﻮﻳﺾ ﺩﻭ ﻋﻨﺼﺮ‪ ،‬ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺑﺮﺍﻱ ﺍﺩﻏﺎﻡ ﺩﺭ‬
‫ﺯﻳﺮ ﺁﺭﺍﻳﻪ ﻣﺮﺗﺐ ﻣﺘﻮﺍﻟﻲ ﺯﻣﺎﻧﻲ ﺭﺥ ﻣﻲﺩﻫﺪ ﻛﻪ ﺍﻭﻟﻴﻦ ﺧﺎﻧﻪ ﺍﺯ ﺯﻳﺮ ﺁﺭﺍﻳﻪ ﺳﻤﺖ ﭼﭗ ﺍﺯ ﻋﻨﺎﺻﺮ‬
‫ﺯﻳﺮ ﺁﺭﺍﻳﻪ ﺳﻤﺖ ﺭﺍﺳﺖ ﺑﺰﺭﮒﺗﺮ ﺑﺎﺷﺪ‪ .‬ﺯﻳﺮﺍ ﺗﻨﻬﺎ ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺍﺳﺖ ﻛﻪ ﺣﺪﺍﻛﺜﺮ ﻓﺎﺻﻠﻪ ﺑﻴﻦ‬
‫‪b‬‬
‫ﺩﻭ ﺍﻧﺪﻳﺲ ‪ i, j‬ﺍﺯ ﻳﻜﺪﻳﮕﺮ ﺭﺥ ﻣﻲﺩﻫﺪ‪ .‬ﺣﺎﻝ ﺍﮔﺮ ﺩﻭ ﺯﻳﺮ ﺁﺭﺍﻳﻪ ﺍﺩﻏﺎﻣﻲ ﺩﺍﺭﺍﻱ ﺍﻧﺪﺍﺯﻩ‬
‫‪2‬‬
‫ﺑﺎﺷﻨﺪ‪ ،‬ﺁﻥﮔﺎﻩ ‪ j - i £ b‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ ﻭ ﺑﻨﺎﺑﺮﺍﻳﻦ ﺁﺭﺍﻳﻪ ﻣﺮﺗﺐ ﺷﺪﻩ ﺣﺎﺻﻞ ﻫﺰﻳﻨﻪﺍﻱ ﻧﺪﺍﺭﺩ‪.‬‬
‫ﻫﺰﻳﻨﻪ ﺍﺩﻏﺎﻡ ﺑﺮﺍﻱ ﺗﻮﻟﻴﺪ ﺳﻄﻮﺡ ﺩﺭﺧﺖ‪:‬‬
‫ﻫﺰﻳﻨﻪ ´ ﺗﻌﺪﺍﺩ ﺯﻳﺮﺁﺭﺍﻳﻪ ﺳﻄﺢ‬
‫‪n‬‬
‫‪1‬‬ ‫´‪2‬‬ ‫)‪= q(n‬‬
‫‪2‬‬

‫‪n‬‬
‫‪2‬‬ ‫´‪4‬‬ ‫)‪= q(n‬‬
‫‪4‬‬

‫‪n‬‬
‫‪3‬‬ ‫´‪8‬‬ ‫)‪= q(n‬‬
‫‪8‬‬
‫‪‬‬

‫‪n‬‬ ‫‪n‬‬
‫‪log‬‬ ‫)‪´ b = q(n‬‬
‫‪b‬‬ ‫‪b‬‬

‫‪æ‬‬ ‫‪n ö‬‬


‫÷ ‪q ç n log‬‬
‫‪è‬‬ ‫‪b ø‬‬

‫ﺍﺩﻏﺎﻡ ﺩﺭ ﺳﻄﻮﺡ ﭘﺎﻳﻴﻦﺗﺮ ﺍﺯ ‪ b‬ﻳﻌﻨﻲ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺍﻧﺪﺍﺯﻩ ﺯﻳﺮ ﺁﺭﺍﻳﻪﻫﺎ ﺍﺯ ‪ b‬ﻛﻮﭼﻚﺗﺮ ﻣﻲﺷﻮﺩ‪ ،‬ﻫﺰﻳﻨﻪﺍﻱ ﻧﺪﺍﺭﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻳﻲ ﻛﻪ ﺩﺭ‬
‫‪ . q æç log‬ﺍﺯ ﻃﺮﻓﻲ ﻫﺰﻳﻨﻪ ﺍﺩﻏﺎﻡ ﺩﺭ ﻫﺮ‬
‫‪n ö‬‬ ‫‪n‬‬
‫ﺍﺳﺖ ﻭ ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ﺗﺎ ﺳﻄﺤﻲ ﻛﻪ ﻫﺰﻳﻨﻪﺑﺮ ﻣﻲﺑﺎﺷﺪ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‬ ‫ﺁﺧﺮﻳﻦ ﺳﻄﺢ ﻫﺰﻳﻨﻪﺑﺮﻧﺪ‬
‫‪è‬‬ ‫‪b ÷ø‬‬ ‫‪b‬‬
‫ﺳﻄﺢ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ ) ‪ . q ( n‬ﺩﺭ ﻧﺘﻴﺠﻪ ﻫﺰﻳﻨﻪ ﻛﻞ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪æ‬‬ ‫‪n ö‬‬ ‫‪æ‬‬ ‫‪n ö‬‬
‫÷ ‪q ( n ) ´ q ç log ÷ = q ç n log‬‬
‫‪è‬‬ ‫‪b‬‬ ‫‪ø‬‬ ‫‪è‬‬ ‫‪b ø‬‬
‫‪ ۵۰‬ـ ﺁﺭﺍﻳﻪﻱ ﻧﺎﻣﺮﺗﺐ ‪ n‬ﻋﻨﺼﺮﻱ ‪ A‬ﺷﺎﻣﻞ ‪ n‬ﻋﺪﺩ ﺻﺤﻴﺢ ﻣﺠﺰﺍ ﺑﻴﻦ ‪ 0‬ﺗﺎ ‪ n‬ﺍﺳﺖ‪ .‬ﺑﻪ ﺟﺰ ﻳﻚ ﻋﺪﺩ ‪ ،x‬ﻣﻲﺧﻮﺍﻫﻴﻢ ﺑﺎ ﻳﻚ ﺍﻟﮕـﻮﺭﻳﺘﻢ ﻛـﺎﺭﺍ ‪ x‬ﺭﺍ‬
‫ﭘﻴﺪﺍ ﻛﻨﻴﻢ‪ .‬ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﻳﻨﻪﻫﺎﻱ ﺯﻳﺮ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺩﺭﺳﺖ ﻭ ﺍﺯ ﺑﻘﻴﻪ ﺳﺮﻳﻊﺗﺮ ﻭ ﻣﻨﺎﺳﺐﺗﺮ ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﺎﺭ ﺍﺳﺖ؟‬
‫‪ A (۱‬ﺭﺍ ﻣﺮﺗﺐ ﻛﻨﻴﻢ ﻭ ﺳﭙﺲ ﺑﺎ ﭘﻴﻤﺎﻳﺶ ﺁﺭﺍﻳﻪﻱ ﻣﺮﺗﺐ‪ x ،‬ﺭﺍ ﭘﻴﺪﺍ ﻛﻨﻴﻢ‪.‬‬
‫‪ (۲‬ﻳﻚ ‪ heap‬ﺑﺮ ﺭﻭﻱ ‪ A‬ﺑﺴﺎﺯﻳﻢ‪ .‬ﺍﺯ ﺭﻳﺸﻪ ﺣﺮﻛﺖ ﻣﻲﻛﻨﻴﻢ ﻭ ﺑﻪ ﻳﻜﻲ ﺍﺯ ﺯﻳﺮﺩﺭﺧﺖﻫﺎﻱ ﺁﻥ ﻣﻲﺭﻭﻳﻢ‪ .‬ﻛﺎﺭ ﺟﺴﺘﺠﻮ ﺭﺍ ﺩﻧﺒﺎﻝ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫‪ (۳‬ﻣﻴﺎﻧﻪﻱ ‪ A‬ﺭﺍ ﭘﻴﺪﺍ ﻛﻨﻴﻢ ﻭ ﺑﺮ ﺍﺳﺎﺱ ﺁﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻋﻨﺼﺮﻣﺤﻮﺭ )‪ Partition ،(pivot‬ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﻴﻢ ﻭ ﺑﺮ ﺍﻳﻦ ﺍﺳﺎﺱ ﻛﺎﺭ ﺟﺴﺘﺠﻮ ﺭﺍ‬
‫ﺍﺩﺍﻣﻪ ﻣﻲﺩﻫﻴﻢ‪.‬‬
‫‪ (۴‬ﺍﺯ ﻳﻚ ﺁﺭﺍﻳﻪ ﻛﻤﻲ ‪ n + 1‬ﻋﻨﺼﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺍﺑﺘﺪﺍ ﺗﻤﺎﻡ ﺧﺎﻧﻪﻫﺎﻱ ﺁﻥ ﺭﺍ ﺻﻔﺮ ﻣﻲﻛﻨﻴﻢ‪ .‬ﺳﭙﺲ ﺩﺭ ﻃﻮﻝ ﺁﺭﺍﻳﻪﻱ ﺍﺻﻠﻲ ﺣﺮﻛﺖ‬
‫ﻣﻲﻛﻨﻴﻢ ﻭ ﺑﻪ ﺍﺯﺍﻱ ﻫﺮ ﻋﺪﺩﻱ ﻛﻪ ﺩﺭ ‪ A‬ﺩﻳﺪﻳﻢ‪ ،‬ﺩﺭ ﺁﺭﺍﻳﻪﻱ ﻛﻤﻜﻲ‪ ،‬ﺧﺎﻧﻪ ﺑﺎ ﺍﻧﺪﻳﺲ ﺁﻥ ﻋﺪﺩ ﺭﺍ ‪ 1‬ﻣﻲﻛﻨﻴﻢ‪ .‬ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﺑﺮﺍﻱ ﺗﻤﺎﻡ ﻋﻨﺎﺻﺮ‬
‫ﺩﺭ ‪ A‬ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﻴﻢ‪ ،‬ﺩﺭ ﺍﻧﺘﻬﺎ ﺍﺯ ﺁﺭﺍﻳﻪ ﻛﻤﻜﻲ ‪ x‬ﺭﺍ ﭘﻴﺪﺍ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۵۰‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺍﺑﺘﺪﺍ ﮔﺰﻳﻨﻪﻫﺎﻱ ‪ ۱‬ﻭ ‪ ۲‬ﻭ ‪ ۴‬ﺭﺍ ﺑﺮﺭﺳﻲ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪ : ۱‬ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﺁﺭﺍﻳﻪﻱ ‪ A‬ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n log n‬ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ ﺳﭙﺲ ﻣﻲﺗﻮﺍﻥ ﺩﺭ ﺯﻣﺎﻥ ) ‪ ، O ( log n‬ﻋﺪﺩ ‪ x‬ﺭﺍ ﭘﻴﺪﺍ ﻛﺮﺩ‪.‬‬
‫ﺯﻣﺎﻥ ﻛﻞ‪O ( nlogn ) + O ( log n ) = O ( n log n ) :‬‬
‫ﮔﺰﻳﻨﺔ ‪ : ۲‬ﺍﻳﻦ ﺭﻭﺵ ﺻﺤﻴﺢ ﻧﻴﺴﺖ‪ .‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺩﺭ ﻳﻚ ‪ ،heap‬ﻓﺮﺯﻧﺪﺍﻥ ﻳﻚ ﭘﺪﺭ ﺗﺮﺗﻴﺐ ﻣﺸﺨﺼﻲ ﻧﺪﺍﺭﺩ ﻧﻤﻲﺗﻮﺍﻥ ﺍﺯ ﺭﻳﺸﻪ ﺑﺎ ﺍﻧﺘﺨﺎﺏ ﻳﻚ ﻣﺴﻴﺮ‬
‫ﻣﺸﺨﺺ ﻋﺪﺩ ‪ x‬ﺭﺍ ﭘﻴﺪﺍ ﻛﺮﺩ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪ : ۴‬ﺍﻳﻦ ﺭﻭﺵ ﻣﺸﺎﺑﻪ ﻣﺮﺗﺐﺳﺎﺯﻱ ﺷﻤﺎﺭﺷﻲ ﺍﺳﺖ‪ .‬ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n‬ﻋﻨﺎﺻﺮ ﺩﺭ ‪ A‬ﻳﻜﻲﻳﻜﻲ ﺑﺮﺭﺳﻲ ﺷﺪﻩ ﻭ ﺩﺭ ﺧﺎﻧﻪﻱ ﻣﺘﻨﺎﻇﺮ ﺁﻥ ﺩﺭ ﺁﺭﺍﻳﻪ‬
‫ﻛﻤﻜﻲ ‪ 1‬ﻣﻲﺷﻮﻧﺪ‪ .‬ﺩﺭ ﻧﺘﻴﺠﻪ ﺑﺎ ﻳﻚ ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﺩﺭ ﻃﻮﻝ ﺁﺭﺍﻳﻪ ﻛﻤﻜﻲ‪ ،‬ﻣﻲﺗﻮﺍﻥ ﻋﺪﺩ ‪ x‬ﺭﺍ ﭘﻴﺪﺍ ﻛﺮﺩ‪) .‬ﺍﻭﻟﻴﻦ ﺧﺎﻧﻪﻱ ﺻﻔﺮ( ﻛﻪ ﺍﻳﻦ ﺟﺴﺘﺠﻮ‬
‫ﺯﻣﺎﻥ ) ‪ O ( n‬ﻧﻴﺎﺯ ﺩﺍﺭﺩ‪ .‬ﭘﺲ ﺯﻣﺎﻥ ﻛﻞ ) ‪ O ( n ) + O ( n ) = O ( n‬ﻣﻲﺷﻮﺩ‪.‬‬
‫ﮔﺰﻳﻨﺔ ‪ : ۳‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﻋﻨﺎﺻﺮ ‪ A‬ﺍﻋﺪﺍﺩ ﺻﺤﻴﺢ ﺑﻴﻦ ‪ 0‬ﺗﺎ ‪ n‬ﻫﺴﺘﻨﺪ‪ ،‬ﺑﺎ ﻓﺮﺽ ﻭﺟﻮﺩ ﻋﺪﺩ ‪ ،x‬ﻣﻲﺗﻮﺍﻥ ﻣﻴﺎﻧﻪﻱ ﺍﻳﻦ ‪ n+1‬ﻋﻨﺼﺮ ﺭﺍ ﺩﺭ ﺯﻣﺎﻥ )‪O (1‬‬
‫‪n +1 ö‬‬
‫= ﻣﻴﺎﻧﻪ‪ æç‬ﻣﺤﺎﺳﺒﻪ ﻛﺮﺩ‪ .‬ﺳﭙﺲ ﺩﺭ ﺯﻣﺎﻥ ) ‪ O ( n‬ﻋﻨﺼﺮ ﻣﻴﺎﻧﻪ ﺭﺍ ﺩﺭ ‪ A‬ﺟﺴﺘﺠﻮ ﻛﺮﺩ‪ .‬ﺍﮔﺮ ﻣﻴﺎﻧﻪ ﭘﻴﺪﺍ ﻧﺸﻮﺩ‪ x ،‬ﻣﻴﺎﻧﻪ ﺍﺳﺖ‪ ،‬ﺩﺭ ﻏﻴﺮ‬ ‫÷‬
‫‪è‬‬ ‫‪2 ø‬‬
‫ﺍﻳﻨﺼﻮﺭﺕ ﻣﻴﺎﻧﻪ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﻋﻨﺼﺮ ﻣﺤﻮﺭ ‪ Partition‬ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻭ ‪ Partition‬ﺭﺍ ﺍﺟﺮﺍ ﻛﺮﺩ‪ .‬ﺳﭙﺲ ﺍﮔﺮ ﻣﻴﺎﻧﻪ ﺑﺎ ﺍﻧﺪﻳﺲ ﺧﺎﻧﻪ ﺑﺮﺍﺑﺮ ﺑﻮﺩ‪ ،‬ﻳﻌﻨﻲ ‪x‬‬
‫ﺩﺭ ﺯﻳﺮ ﺁﺭﺍﻳﻪﻱ ﺳﻤﺖ ﺭﺍﺳﺖ ﻋﻨﺼﺮ ﻣﻴﺎﻧﻪ ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪ .‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ‪ x‬ﺩﺭ ﺳﻤﺖ ﭼﭗ ﻋﻨﺼﺮ ﻣﻴﺎﻧﻪ ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪ .‬ﻭ ﺑﻪ ﺻﻮﺭﺕ ﺑﺎﺯﮔﺸﺘﻲ‪ ،‬ﺍﻟﮕﻮﺭﻳﺘﻢ‬
‫ﻣﺠﺪﺩﺍﹰ ﺑﺮﺍﻱ ﺯﻳﺮﺁﺭﺍﻳﻪﻱ ﻣﻨﺎﺳﺐ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻛﺮﺩ‪ .‬ﻛﻪ ﺯﻣﺎﻥ ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ) ‪ O ( n‬ﺍﺳﺖ‪.‬‬
‫ﺯﻣﺎﻥ ﻫﺮ ﺩﻭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﮔﺰﻳﻨﺔ ‪ ۳‬ﻭ ‪ O ( n ) ،۴‬ﺍﺳﺖ ﺍﻣﺎ ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﮔﺰﻳﻨﺔ ‪ ۴‬ﺩﺭﺟﺎ ﻧﻴﺴﺖ‪ ،‬ﮔﺰﻳﻨﺔ ‪ ۳‬ﺍﻧﺘﺨﺎﺏ ﺑﻬﺘﺮﻱ ﻣﻲﺑﺎﺷﺪ‪.‬‬
‫‪ ۵۱‬ـ ﻓﺮﺽ ﻛﻨﻴﺪ ﻣﻲﺧﻮﺍﻫﻴﻢ ﻳﻚ ﻟﻴﺴﺖ ﺣﺎﻭﻱ ﻋﻨﺎﺻﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ‪ 2‬ﻭ ‪ 4‬ﻭ ‪ 5‬ﻭ ‪ 3‬ﻭ ‪ 1‬ﺭﺍ ﺑﻪ ﻟﻴﺴﺖ ﻋﻨﺎﺻﺮ )ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ( ‪ 1‬ﻭ ‪ 2‬ﻭ ‪3‬‬

‫ﻭ ‪ 4‬ﻭ ‪ 5‬ﺗﺒﺪﻳﻞ ﻛﻨﻴﻢ‪ .‬ﺗﻨﻬﺎ ﻋﻤﻠﻴﺎﺕ ﻣﺠﺎﺯ ﺟﺎﺑﺠﺎ ﻛﺮﺩﻥ ﺩﺭﺍﻳﻪﻫﺎﻱ ﻣﺘﻮﺍﻟﻲ )ﭘﺸﺖ ﺳﺮ ﻫﻢ( ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﺍﺳﺖ‪ .‬ﺣـﺪﺍﻗﻞ ﭼﻨـﺪ ﺟﺎﺑﺠـﺎﻳﻲ ﻻﺯﻡ‬
‫ﺍﺳﺖ؟‬
‫‪7 (۴‬‬ ‫‪6 (۳‬‬ ‫‪5 (۲‬‬ ‫‪4 (۱‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ٣‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﻱ ﺗﺒﺪﻳﻞ ﻟﻴﺴﺖ ‪ 1,3,5, 4, 2‬ﺑﻪ ﻟﻴﺴﺖ ﻧﺰﻭﻟﻲ‪ ،‬ﻳﻚ ﺭﺍﻩ ﺣﻞ ﺧﻮﺏ ﺭﺳﺎﻧﺪﻥ ﺑﺰﺭﮒﺗﺮﻳﻦ ﻳﺎ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻋﺪﺩ ﺑﻪ ﻣﻜﺎﻥ ﻣﻨﺎﺳﺐ ﺧﻮﺩ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﻭﺍﻗﻊ ﺣﺪﺍﻗﻞ ﺗﻌﺪﺍﺩ ﺟﺎﺑﻪﺟﺎﻳﻲﻫﺎﻱ ﺧﺎﻧﻪﻫﺎﻱ ﻣﺠﺎﻭﺭ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‬
‫ﺗﻌﺪﺍﺩ ﺟﺎﺑﻪﺟﺎﻳﻲﻫﺎ ﺩﺭ ‪ ، Insertion Sort‬ﭼﺮﺍ ﻛﻪ ﺩﺭ ﻫﺮ ﻣﺮﺣﻠﻪ ﺩﻭ‬
‫ﻋﺪﺩ ﻣﺘﻮﺍﻟﻲ ﺟﺎﺑﻪﺟﺎ ﻣﻲﺷﻮﻧﺪ‪.‬‬

‫ﻣﺮﺗﺒﻪ ﺯﻣﺎﻧﻲ ﻭ ﺗﻌﺪﺍﺩ ﺩﻓﻌﺎﺕ ﺗﻜﺮﺍﺭ‬

‫‪ ۵۲‬ـ ﺩﺭ ﻛﺪ ﺯﻳﺮ ‪ ،x++‬ﭼﻨﺪ ﺑﺎﺭ ﺗﻜﺮﺍﺭ ﻣﻲﺷﻮﺩ؟ )ﻓﺮﺽ ﻛﻨﻴﺪ ‪ n >= 3‬ﺍﺳﺖ(‬
‫) ‪for ( i = 3;i <= n ;i = i * 2‬‬
‫;‪x + +‬‬
‫‪ê ( log n + 1) ú‬‬ ‫‪ê‬‬ ‫‪n ú‬‬ ‫‪ê ( log n ) ú‬‬ ‫‪ê‬‬ ‫‪nú‬‬
‫‪ê‬‬ ‫‪ú‬‬ ‫‪(۴‬‬ ‫‪ê log 3 + 1ú‬‬ ‫‪(۳‬‬ ‫‪ê‬‬ ‫‪ú‬‬ ‫‪(۲‬‬ ‫‪ê log 3 ú‬‬ ‫‪(۱‬‬
‫‪ëê‬‬ ‫‪3‬‬ ‫‪ûú‬‬ ‫‪ë‬‬ ‫‪û‬‬ ‫‪ëê 3 ûú‬‬ ‫‪ë‬‬ ‫‪û‬‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۵۱‬‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫‪i‬‬
‫=‪j‬‬ ‫ﺭﻭﺵ ﺍﻭﻝ‪ :‬ﺍﺯ ﺗﻐﻴﻴﺮ ﻣﺘﻐﻴﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫‪3‬‬
‫‪æ‬‬ ‫‪n‬‬ ‫‪ö‬‬
‫÷ ‪for ç j = 1; j <= ; j = j* 2‬‬
‫‪è‬‬ ‫‪3‬‬ ‫‪ø‬‬
‫‪ê‬‬ ‫‪n‬‬ ‫‪ú‬‬
‫‪: êlog 23 ú + 1‬ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ‬
‫‪ê‬‬ ‫‪ú‬‬
‫‪ë‬‬ ‫‪û‬‬
‫ﺭﻭﺵ ﺩﻭﻡ‪:‬‬
‫ﻼ ‪ ، n = 6‬ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ‪ x++‬ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻛﺮﺩﻩ ﻭ ﺳﭙﺲ ﺩﺭ ﮔﺰﻳﻨﻪﻫﺎ ﭼﻚ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫ﺑﻪ ﺍﺯﺍﻱ ﻳﻚ ﻣﻘﺪﺍﺭ ﺩﻟﺨﻮﺍﻩ‪ ،‬ﻣﺜ ﹰ‬
‫‪ê‬‬ ‫‪6ú‬‬ ‫‪i‬‬ ‫‪n‬‬ ‫ﺗﻜﺮﺍﺭ‬
‫‪ê log 3 ú = 1‬‬
‫‪ë‬‬ ‫‪û‬‬
‫‪ê ( log 6 ) ú‬‬ ‫‪3£6‬‬ ‫‪6‬‬ ‫‪1‬‬
‫‪ê‬‬ ‫‪ú =1‬‬
‫‪ëê 3 ûú‬‬
‫‪ê‬‬ ‫‪6 ú‬‬ ‫‪6‬‬ ‫‪1‬‬
‫‪6£6‬‬
‫‪êlog 3 + 1ú = 2‬‬
‫‪ë‬‬ ‫‪û‬‬
‫‪ê ( log 6 + 1) ú‬‬ ‫‪12 £ 6‬‬
‫‪x‬‬ ‫ﺧﺮﻭﺝ‬
‫‪ê‬‬ ‫‪ú =1‬‬
‫‪ëê‬‬ ‫‪3‬‬ ‫‪ûú‬‬
‫ﺳﭙﺲ ﺑﻪ ﺍﺯﺍﻱ ‪ 2 ،n=6‬ﺗﻜﺮﺍﺭ ﺩﺍﺭﻳﻢ‪ ،‬ﺩﺭ ﻧﺘﻴﺠﻪ ﮔﺰﻳﻨﺔ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪ ۵۳‬ـ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ ﺗﻌﺪﺍﺩ ﺩﻓﻌﺎﺕ ﺗﻜﺮﺍﺭ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﺷﻤﺎﺭﻩ ‪ 3‬ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬
‫‪1‬‬ ‫) ‪for ( k = 0; k <= n - 1; k + +‬‬
‫‪2‬‬ ‫) ‪for ( i = 1;i <= n - k ;i + +‬‬
‫‪3‬‬ ‫;‪a [i ][i + k ] = k‬‬
‫)‪n ( n - 1‬‬ ‫‪n2‬‬ ‫)‪n ( n + 1‬‬
‫‪(۴‬‬ ‫‪(۳‬‬ ‫‪(۲‬‬ ‫‪n2‬‬ ‫‪(۱‬‬
‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫‪k‬‬ ‫‪i‬‬ ‫ﺗﻜﺮﺍﺭ‬
‫‪0‬‬ ‫‪1...n - 0‬‬ ‫‪n‬‬
‫‪1‬‬ ‫‪1...n - 1‬‬ ‫‪n -1‬‬
‫‪2‬‬ ‫‪1...n - 2‬‬ ‫‪n-2‬‬ ‫‪ = n + ( n - 1) + ( n - 2 ) + ... + 2 + 1‬ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ‬
‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫)‪n ( n + 1‬‬
‫= ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ‬
‫‪2‬‬
‫‪n -1‬‬ ‫‪1...1‬‬ ‫‪1‬‬

‫‪ ۵۴‬ـ ﺗﻮﺍﺑﻊ ‪ g ( n ) = lg lg n n ، f ( n ) = 4lg n‬ﻭ ‪ h ( n ) = lg 2 n‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪ .‬ﻛﺪﺍﻡ ﻳﻚ ﺍﺯ ﮔﺰﺍﺭﻩﻫﺎﻱ ﺯﻳﺮ ﺻﺤﻴﺢ ﺍﺳﺖ؟‬
‫) ) ‪f ( n ) Î Q ( h ( n ) ) , g ( n )Î W ( f ( n‬‬ ‫‪(۲‬‬ ‫) ) ‪f ( n ) Î O ( g ( n ) ) , f ( n )Î W ( h ( n‬‬ ‫‪(۱‬‬
‫) ) ‪h ( n ) Î O ( g ( n ) ) , f ( n )Î Q ( g ( n‬‬ ‫‪(۴‬‬ ‫) ) ‪g ( n ) Î W ( h ( n ) ) , h ( n )Î W ( f ( n‬‬ ‫‪(۳‬‬
‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۵۲‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺑﺮﺍﻱ ﻣﻘﺎﻳﺴﻪ ﺭﺷﺪ ﺗﻮﺍﺑﻊ ﻣﻲﺗﻮﺍﻥ ﺭﺷﺪ ﻟﮕﺎﺭﻳﺘﻢ ﺁﻥﻫﺎ ﺭﺍ ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﻣﻘﺎﻳﺴﻪ ﻛﺮﺩ‪.‬‬
‫‪f (n) = 4‬‬ ‫‪log n‬‬
‫‪® log f ( n ) = log n log 4 = 2log n‬‬
‫‪n‬‬
‫‪g ( n ) = log log n ® log g ( n ) = log n log log n‬‬
‫‪h ( n ) = log 2 n ® log h ( n ) = 2 log log n‬‬
‫) ‪B( n‬‬
‫)‪X(n) = A (n‬‬ ‫) ‪® log X ( n ) = B ( n ) log A ( n‬‬ ‫ﻳﺎﺩﺁﻭﺭﻱ‪:‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ‪:‬‬
‫)) ‪h ( n ) = O (f ( n‬‬
‫)) ‪h ( n ) = O (g ( n‬‬

‫‪2log log n £ 2log n £ log n log log n‬‬ ‫)) ‪f ( n ) = O (g ( n‬‬


‫‪Þ‬‬
‫)‪h (n) £ f (n) £ g(n‬‬ ‫)) ‪f ( n ) = W ( h ( n‬‬
‫)) ‪g ( n ) = W ( h ( n‬‬
‫)) ‪g ( n ) = W (f ( n‬‬

‫‪ ۵۵‬ـ ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﮔﺰﺍﺭﻩﻫﺎﻱ ﺯﻳﺮ ﻏﻠﻂ ﺍﺳﺖ؟‬


‫)) ‪f ( n ) + O (f ( n )) = Q ( f ( n‬‬ ‫‪(۲‬‬ ‫)) ‪W (f ( n )) + O ( f ( n )) = Q (f ( n‬‬ ‫‪(۱‬‬
‫(‬
‫)) ‪g ( n ) = W ( f ( n )) Þ g ( n ) = W O (f ( n‬‬ ‫)‬ ‫‪(۴‬‬ ‫)) ‪g ( n ) = W ( f ( n )) Þ f ( n ) = O (g ( n‬‬ ‫‪(۳‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ١‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫)) ‪W (f ( n )) ¹ q(f ( n‬‬ ‫ﮔﺰﻳﻨﻪ ‪ :۱‬ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ‬
‫)) ‪q(f ( n )) + O (f ( n )) = q (f ( n‬‬ ‫ﮔﺰﻳﻨﻪ ‪ O ( f ( n ) ) :۲‬ﺣﺪﺍﻛﺜﺮ ﺩﺍﺭﺍﻱ ﻣﺮﺗﺒﻪ ) ‪ f ( n‬ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ‬
‫ﮔﺰﻳﻨﻪ ‪ :۳‬ﻭﺍﺿﺢ ﺍﺳﺖ ﻛﻪ ﺍﮔﺮ ‪ g ³ f‬ﺁﻥﮔﺎﻩ ‪. f £ g‬‬

‫(‬
‫)) ‪W O ( f ( n‬‬ ‫)‬ ‫‪ g ( n ) = W ( f ( n ) ) ® g ³ f . h ( n ) = O ( f ( n ) ) Þ h £ f‬ﺑﻨﺎﺑﺮﺍﻳﻦ ‪¬ g ³ f ³ h‬‬ ‫ﮔﺰﻳﻨﻪ ‪:۴‬‬

‫ﻣﺘﻔﺮﻗﻪ‬
‫¬‬
‫‪ ۵۶‬ـ ﺍﮔﺮ ﺭﺷﺘﺔ ﺍﻋﺪﺍﺩ )ﺍﺯ ﺭﺍﺳﺖ ﺑﻪ ﭼﭗ( ‪ 5 , 4 , 3 , 2 , 1‬ﺭﺍ ﺑﻪﺗﺮﺗﻴﺐ ﺩﺭ ﻳﻚ ‪ STACK‬ﻭﺍﺭﺩ ﻛﻨﻴﻢ‪ ،‬ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﺧﺮﻭﺟـﻲﻫـﺎﻱ ﺯﻳـﺮ ﺍﺯ ﺍﻳـﻦ‬
‫‪ STACK‬ﺍﻣﻜﺎﻥﭘﺬﻳﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟ )ﺧﺮﻭﺟﻲﻫﺎﻱ ‪ STACK‬ﺭﺍ ﺍﺯ ﭼﭗ ﺑﻪ ﺭﺍﺳﺖ ﺑﺨﻮﺍﻧﻴﺪ‪(.‬‬
‫‪5 -1- 3 - 2 - 4‬‬ ‫‪(۴‬‬ ‫‪1- 3- 5 - 4 - 2‬‬ ‫‪(۳‬‬ ‫‪5 - 4 - 3 -1- 2‬‬ ‫‪(۲‬‬ ‫‪(۱‬‬
‫‪2 - 3 - 5 -1-4‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫®‬
‫‪: 1 , 2 , 3 , 4 , 5‬ﻭﺭﻭﺩﻱ‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۵۳‬‬

‫ﮔﺰﻳﻨﺔ ‪:۱‬‬
‫‪5‬‬
‫ﻭﺭﻭﺩ ‪1‬‬ ‫ﻭﺭﻭﺩ ‪2‬‬ ‫ﺧﺮﻭﺝ ‪2‬‬ ‫ﻭﺭﻭﺩ ‪3‬‬ ‫ﺧﺮﻭﺝ ‪3‬‬ ‫ﻭﺭﻭﺩ ‪4‬‬ ‫ﻭﺭﻭﺩ ‪5‬‬ ‫ﺧﺮﻭﺝ ‪5‬‬
‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪: 2‬ﺧﺮﻭﺟﻲ‬ ‫‪: 2 - 3‬ﺧﺮﻭﺟﻲ‬ ‫‪ : 2 - 3 - 5‬ﺧﺮﻭﺝ‬

‫ﺧﺮﻭﺝ ‪1‬‬
‫´‬
‫ﮔﺰﻳﻨﺔ ‪:۲‬‬
‫‪5‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫ﻭﺭﻭﺩ ‪1‬‬ ‫ﻭﺭﻭﺩ ‪2‬‬ ‫ﻭﺭﻭﺩ ‪3‬‬ ‫ﻭﺭﻭﺩ ‪4‬‬ ‫ﻭﺭﻭﺩ ‪5‬‬ ‫ﺧﺮﻭﺟﻲ‪5‬‬ ‫ﺧﺮﻭﺟﻲ‪4‬‬ ‫ﺧﺮﻭﺝ ‪3‬‬
‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪: 5‬ﺧﺮﻭﺟﻲ‬ ‫‪: 5 - 4‬ﺧﺮﻭﺟﻲ‬ ‫‪: 5 - 4‬ﺧﺮﻭﺟﻲ‬
‫ﺧﺮﻭﺝ ‪3‬‬ ‫‪2‬‬ ‫ﺧﺮﻭﺝ ‪1‬‬
‫´‬
‫‪1‬‬
‫‪: 5 - 4 - 3‬ﺧﺮﻭﺟﻲ‬

‫ﮔﺰﻳﻨﺔ ‪:۳‬‬
‫‪5‬‬
‫ﻭﺭﻭﺩ ‪1‬‬ ‫ﺧﺮﻭﺝ ‪1‬‬ ‫ﻭﺭﻭﺩ ‪2‬‬ ‫ﻭﺭﻭﺩ ‪3‬‬ ‫ﺧﺮﻭﺟﻲ‪3‬‬ ‫ﻭﺭﻭﺩﻱ ‪4‬‬ ‫ﻭﺭﻭﺩﻱ ‪5‬‬ ‫ﺧﺮﻭﺝ ‪5‬‬
‫‪3‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬
‫‪ :1‬ﺧﺮﻭﺟﻲ‬
‫‪:1 - 3‬ﺧﺮﻭﺟﻲ‬

‫‪4‬‬ ‫ﺧﺮﻭﺝ ‪4‬‬ ‫ﺧﺮﻭﺝ ‪2‬‬


‫‪2‬‬ ‫‪2‬‬
‫‪ :1 - 3 - 5 - 4‬ﺧﺮﻭﺝ ‪ :1 - 3 - 5‬ﺧﺮﻭﺟﻲ‬ ‫‪:1 - 3 - 5 - 4 - 2 P‬ﺧﺮﻭﺟﻲ‬

‫ﮔﺰﻳﻨﺔ ‪:۴‬‬
‫‪5‬‬
‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬
‫ﻭﺭﻭﺩ ‪1‬‬ ‫ﻭﺭﻭﺩ ‪2‬‬ ‫ﻭﺭﻭﺩ ‪3‬‬ ‫ﻭﺭﻭﺩ ‪4‬‬ ‫ﻭﺭﻭﺩ ‪5‬‬ ‫ﺧﺮﻭﺟﻲ‪5‬‬ ‫ﺧﺮﻭﺟﻲ‪1‬‬
‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫´‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪ : 5‬ﺧﺮﻭﺟﻲ‬

‫‪+ - * - ABCD / E / F + GH‬‬ ‫‪ ۵۷‬ـ ﻋﺒﺎﺭﺕ ‪ prefix‬ﺭﻭﺑﻪﺭﻭ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬


‫ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﻋﺒﺎﺭﺍﺕ ﺯﻳﺮ ﻣﻌﺎﺩﻝ ‪ infix‬ﺑﺮﺍﻱ ﺍﻳﻦ ﻋﺒﺎﺭﺕ ﺍﺳﺖ؟‬

‫(* ‪A‬‬
‫‪EF‬‬ ‫) ‪B C-D‬‬
‫‪AB * ( C - D ) +‬‬ ‫‪+H‬‬ ‫‪(۲‬‬ ‫)‪+ E (F / G + H‬‬ ‫‪(۱‬‬
‫‪G‬‬
‫)) ‪AB * C - D + E / ( F / ( G + H‬‬ ‫‪(۴‬‬ ‫‪AB * C - D + E / F / G + H‬‬ ‫‪(۳‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫‪ ۵۴‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ‬

‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۴‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬


‫ﺍﺯ ﺭﻭﺵ ﭘﺮﺍﻧﺘﺮ ﮔﺬﺍﺭﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫‪+ - * - ABCD / E / F + GH‬‬

‫) ) ‪((( A - B) * C ) - D ) + E / ( F / ( G + H‬‬
‫)) ‪AB * C - D + E / ( F / ( G + H‬‬

‫‪ ۵۸‬ـ ﺍﮔﺮ ﺗﺨﺼﻴﺺ ﺣﺎﻓﻈﻪ ﺑﺮﺍﻱ ﺁﺭﺍﻳﻪﻫﺎ ﺳﻄﺮﻱ ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺁﻥ ﺻﻮﺭﺕ ﺑﺮﺍﻱ ﺁﺭﺍﻳﺔ ﺳﻪ ﺑﻌـﺪﻱ ‪ A éë1..n1 ,1..n 2 ,1..n 3 ùû‬ﻣﺆﻟﻔـﺔ ] ‪ k‬ﻭ ‪ j‬ﻭ ‪ A [i‬ﺩﺭ‬
‫ﭼﻪ ﻣﺤﻠﻲ ﺍﺯ ﺣﺎﻓﻈﻪ ﻗﺮﺍﺭ ﻣﻲﮔﻴﺮﺩ؟ )‪ a‬ﺁﺩﺭﺱ ﺍﻭﻟﻴﻦ ﺧﺎﻧﻪ ﺣﺎﻓﻈﻪ ﺁﺭﺍﻳﻪ ﻣﻲﺑﺎﺷﺪ‪(.‬‬
‫)‪a + ( i - 1) n 2 n 3 + ( j - 1) n 3 + ( k - 1‬‬ ‫‪(۲‬‬ ‫)‪a + ( i - 1) n1n 2 + ( k - 1‬‬ ‫‪(۱‬‬
‫‪a + ( k - 1) n 2 n 3 + ( j - 1) n 3 + ( i - 1) (۴‬‬ ‫‪a + ( k - 1) n1n 2 + ( j - 1) n 2 + ( i - 1) (۳‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۲‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺍﮔﺮ ﺁﺭﺍﻳﺔ ‪ A ëéL1 . . U1 , L2 . . U 2 , L3 . . U3 ûù‬ﺑﻪﺻﻮﺭﺕ ﺳﻄﺮﻱ ﺩﺭ ﺣﺎﻓﻈﻪ ﺫﺧﻴﺮﻩ ﺷﻮﺩ ﻭ ‪ a‬ﺁﺩﺭﺱ ﺷﺮﻭﻉ ﺁﺭﺍﻳﻪ ﺑﺎﺷﺪ ﺁﻥﮔﺎﻩ‪:‬‬
‫‪A [i , j , k ] = a + éë( i - L1 )( U 2 - L 2 + 1) ( U3 - L3 + 1) + ( j - L 2 ) ( U3 - L3 + 1) + ( K - L3 ) ùû * b‬‬
‫ﻛﻪ ‪ b‬ﺍﻧﺪﺍﺯﺓ ﻫﺮ ﺧﺎﻧﻪ ﺣﺎﻓﻈﻪ ﺍﺳﺖ‪ .‬ﺑﻨﺎ ﺑﻪ ﻓﺮﺿﻴﺎﺕ ﺑﺎﻻ‪:‬‬
‫‪ì L1 = 1‬‬ ‫‪ìL 2 = 1‬‬ ‫‪ì L3 = 1‬‬
‫‪í‬‬ ‫‪í‬‬ ‫‪í‬‬
‫‪î U1 = n1‬‬ ‫‪îU2 = n 2‬‬ ‫‪î U3 = n 3‬‬
‫‪A [i , j , k ] = a + éë( i - 1)( n 2 - 1 + 1) ( n 3 - 1 + 1) + ( j - 1) ( n 3 - 1 + 1) + ( k - 1) ùû ´b‬‬
‫ﻛﻪ ‪: b = 1‬‬
‫‪A [i , j , k ] = a + éë( i - 1) n 2 n 3 + ( j - 1) ( n 3 ) + ( k - 1) ùû‬‬
‫)‪A [i , j , k ] = a + ( i - 1) n 2 n 3 + ( j - 1) n 3 + ( k - 1‬‬

‫‪ ۵۹‬ـ ‪-‬ﻛﺪﺍﻡﻳﻚ ﺍﺯ ﺗﺮﺗﻴﺐ ﻫﺎﻱ ﺯﻳﺮ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎﻱ ﻫﻤﻪ ﻣﻨﻈﻮﺭﻩ ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﻣﺮﺗﺐ ﺍﺷﻴﺎ )ﺑـﺮ ﺍﺳـﺎﺱ ﻣﻘـﺪﺍﺭ ﻛﻠﻴـﺪ( ﺭﺍ ﺑـﻪ ﺗﺮﺗﻴـﺐ ﺍﺯ‬
‫ﻛﻨﺪﺗﺮﻳﻦ ﺑﻪ ﺳﺮﻳﻊﺗﺮﻳﻦ ﻟﻴﺴﺖ ﻛﺮﺩﻩ ﺍﺳﺖ؟‬
‫‪ (۱‬ﺟﺪﻭﻝ ﺩﺭﻫﻢﺳﺎﺯﻱ‪ ،‬ﺁﺭﺍﻳﻪﻫﺎﻱ ﻣﺮﺗﺐ‪ ،‬ﻟﻴﺴﺖﻫﺎﻱ ﺯﻧﺠﻴﺮﻩﺍﻱ‬
‫‪ (۲‬ﺁﺭﺍﻳﻪﻫﺎﻱ ﻣﺮﺗﺐ‪ ،‬ﺩﺭﺧﺖ ﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﻟﻴﺴﺖﻫﺎﻱ ﺯﻧﺠﻴﺮﻩﺍﻱ‪heap ،‬‬
‫‪ (۳‬ﺁﺭﺍﻳﻪﻫﺎﻱ ﻣﺮﺗﺐ‪ ،‬ﻟﻴﺴﺖﻫﺎﻱ ﺯﻧﺠﻴﺮﻩﺍﻱ ﻣﺮﺗﺐ‪ ،‬ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‬
‫‪ (۴‬ﺁﺭﺍﻳﻪﻫﺎﻱ ﻧﺎﻣﺮﺗﺐ‪ ،‬ﻟﻴﺴﺖﻫﺎﻱ ﺯﻧﺠﻴﺮﻩﺍﻱ ﻧﺎﻣﺮﺗﺐ‪ ،‬ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۳‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺟﺪﻭﻝﻫﺎﻱ ﺩﺭﻫﻢﺳﺎﺯﻱ ﻳﻚ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻱ ﻫﻤﻪ ﻣﻨﻈﻮﺭﻩ ﻧﻴﺴﺖ ﻭ ﺗﻨﻬﺎ ﺩﺭ ﺫﺧﻴﺮﻩﺳﺎﺯﻱ ﺩﺍﺩﻩ ﻭ ﺍﻋﻤﺎﻝ ﺩﺭﺝ‪ ،‬ﺣﺬﻑ ﻭ ﺟﺴﺘﺠﻮ ﻛﺎﺭﺑﺮﺩ ﺩﺍﺭﺩ‪.‬‬
‫‪ heap‬ﻧﻴﺰ ﻳﻚ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻱ ﻫﻤﻪ ﻣﻨﻈﻮﺭﻩ ﻧﻴﺴﺖ ﻭ ﻛﺎﺭﺑﺮﺩﻫﺎﻱ ﺁﻥ ﺩﺭ ﺻﻒﻫﺎﻱ ﺍﻭﻟﻮﻳﺖ‪ ،‬ﻣﺮﺗﺐﺳﺎﺯﻱ‪ ،‬ﺍﺩﻏﺎﻡ ﻟﻴﺴﺖﻫﺎﻱ ﻣﺮﺗﺐ ﺍﺳﺖ‪.‬‬
‫ﺁﺭﺍﻳﻪﻫﺎﻱ ﻣﺮﺗﺐ ﻭ ﻧﺎﻣﺮﺗﺐ‪ ،‬ﻟﻴﺴﺖﻫﺎﻱ ﭘﻴﻮﻧﺪﻱ ﻣﺮﺗﺐ ﻭ ﻧﺎﻣﺮﺗﺐ ﻭ ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ‪ ،‬ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎﻱ ﻫﻤﻪ ﻣﻨﻈﻮﺭ ﺍﺳﺖ‪.‬‬
‫ﻛﻪ ﺍﺯ ﻧﻈﺮ ﺳﺮﻋﺖ‪ ،‬ﺍﺑﺘﺪﺍ ﺩﺭﺧﺖﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺳﭙﺲ ﻟﻴﺴﺖﻫﺎﻱ ﻣﺮﺗﺐ )ﻧﻴﺎﺯ ﺑﻪ ﻣﺮﺗﺐﺳﺎﺯﻱ ﻧﺪﺍﺭﺩ‪ (.‬ﻭ ﺩﺭ ﺁﺧﺮ ﺁﺭﺍﻳﻪﻫﺎﻱ ﻣﺮﺗﺐ ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩﻫﺎ ‪۵۵‬‬

‫‪ ۶۰‬ـ ﺑﺮﺍﻱ ﻣﻌﻜﻮﺱ ﻛﺮﺩﻥ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ ﺑﺎ ‪ n‬ﮔﺮﻩ‪ ،‬ﺑﻪ ﭼﻪ ﺗﻌﺪﺍﺩ ﺍﺷﺎﺭﻩﮔﺮ ﻧﻴﺎﺯ ﺍﺳﺖ؟ ﻭ ﻣﺮﺗﺒﻪﻱ ﺯﻣﺎﻧﻲ ﺁﻥ ﭼﻴﺴﺖ؟‬
‫)‪O(n‬‬ ‫‪ n (۲‬ﺍﺷﺎﺭﻩﮔﺮ ﻭ‬ ‫)‪O(n‬‬ ‫‪ 3 (۱‬ﺍﺷﺎﺭﻩﮔﺮ ﻭ‬
‫) ‪O ( n log n‬‬ ‫‪ 3 (۴‬ﺍﺷﺎﺭﻩﮔﺮ ﻭ‬ ‫‪ 3 (۳‬ﺍﺷﺎﺭﻩﮔﺮ ﻭ ) (‬
‫‪O n2‬‬
‫ﺣﻞ ‪ :‬ﮔﺰﻳﻨﻪ ‪ ۱‬ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﻱ ﻣﻌﻜﻮﺱ ﻛﺮﺩﻥ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ ﺑﺎ ﻫﺮ ﺗﻌﺪﺍﺩ ﮔﺮﻩ ﺗﻨﻬﺎ ﺑﻪ ﺳﻪ ﺍﺷﺎﺭﻩﮔﺮ )‪ (p،q،r‬ﻧﻴﺎﺯ ﺍﺳﺖ‪.‬‬
‫;‪p = start‬‬
‫;‪q = null‬‬
‫‪w hile p ¹ null do‬‬
‫‪begin‬‬
‫;‪1 ) r = q‬‬
‫;‪2 ) q = p‬‬
‫ﺍﻟﮕﻮﺭﻳﺘﻢ ﺁﻥ ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫;‪3 ) p = p.link‬‬
‫;‪4 ) q.link = r‬‬
‫;‪end‬‬
‫;‪start = q‬‬
‫ﻛﻪ ﻣﺮﺗﺒﻪﻱ ﺯﻣﺎﻧﻲ ﺁﻥ ) ‪ n) ، O ( n‬ﺗﻌﺪﺍﺩ ﮔﺮﻩﻫﺎﻱ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪﻱ( ﺍﺳﺖ‪.‬‬

‫ﻳﺎﺩﺩﺍﺷﺖ‪:‬‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬
‫…………………………………………………………………………………………………………‬

You might also like