TE3 + Hint.pdf

‫ﺳﺎﺧﺘﻤﺎندادهﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ‬
‫ﻧﯿﻢﺳﺎل دوم ‪٩۵-٩۴‬‬
‫ﻣﺪرس‪ :‬دﮐﺘﺮ ﻋﻠ ﺷﺮﯾﻔ‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﺗﻤﺮﯾﻦ ﻧﻈﺮی ﺳﻮم‬
‫ﺗﺤﻠﯿﻞ اﻟ ﻮرﯾﺘﻢ ﻫﺎی ﺑﺎزﮔﺸﺘ و ﺳﺮﺷ ﻦ‬
‫آرزو ﻓﺎﻃﻤ‬
‫ﻣﺴﺌﻠﻪی ‪ .١‬ﻣﺮﺗﺒﻪ زﻣﺎﻧ‬
‫ﻣﺮﺗﺒﻪ زﻣﺎﻧ راﺑﻄﻪﻫﺎی ﺑﺎزﮔﺸﺘ زﯾﺮ را ﻣﺤﺎﺳﺒﻪ ﮐﻨﯿﺪ‪.‬‬
‫‪n‬‬
‫‪log n‬‬
‫‪1. T (n) = T ( n2 ) +‬‬
‫‪2. T (n) = 2T ( n2 ) + logn n‬‬
‫√‬
‫‪3. T (n) = T ( n2 + n) + T ( n2 ) + 1‬‬
‫‪αi = 1‬‬
‫‪∑k‬‬
‫‪k > 1,‬‬
‫‪i‬‬
‫‪4. T (n) = T (n/4) + lg3 n‬‬
‫∑‬
‫)‪5. T (n) = ki T (αi n) + O(n‬‬
‫√‬
‫‪n‬‬
‫‪nT ( ) + 1‬‬
‫‪2‬‬
‫= )‪6. T (n‬‬
‫)‪7. T (n) = 2T (n − 1) + 2T (n − 2) + ... + 2T (1‬‬
‫√‬
‫√‬
‫)‪8. T (n) = nT ( n) + Θ(n‬‬
‫ﻋﺒﺎرت )‪ (۶‬و )‪ (٧‬را ﺑﺎ ﻫﻢ ﻣﻘﺎﯾﺴﻪ ﮐﻨﯿﺪ‪.‬‬
‫ﺣﻞ‪.‬‬
‫‪ .١‬ﺑﺎ اﺳﺘﻔﺎده از ﻗﻀﯿﻪ اﺻﻠ ‪T (n) = Θ( logn n ) :‬‬
‫‪ .٢‬ﺗﻐﯿﯿﺮ ﻣﺘﻐﯿﺮ‪T (n) = Θ(nlg(lg(n))):‬‬
‫‪n = ٢k ,‬‬
‫‪ .٣‬ﺣﺪس و اﺳﺘﻘﺮا‪T (n) = Θ(n) :‬‬
‫‪ .۴‬ﻗﻀﯿﻪ اﺻﻠ ‪T (n) = Θ(lg۴ n) :‬‬
‫‪ .۵‬ﺣﺪس و اﺳﺘﻘﺮا‪T (n) = Θ(nlgn) :‬‬
‫‪ .۶‬ﺗﻐﯿﯿﺮ ﻣﺘﻐﯿﺮ و ﺟﺎﮔﺬاری‪T (n) = n(lg n+١)/۴ :‬‬
‫‪ .٧‬ﺣﺪس و اﺳﺘﻘﺮا ﯾﺎ ﺳﺎده ﮐﺮدن‪T (n) = T (١) × ٣n−١ :‬‬
‫‪ .٨‬درﺧﺖ ﺑﺎزﮔﺸﺖ‪T (n) = Θ(nlg(lg(n))) :‬‬
‫ﺑﺮای ﻣﻘﺎﯾﺴﻪ ی ﻋﺒﺎرت ‪ ۶‬و ‪ ٧‬از ﻫﺮ ﮐﺪام ﻟ ﺎرﯾﺘﻢ ﻣﯿ ﯿﺮﯾﻢ‪ ،‬در ﻧﺘﯿﺠﻪ‪n(lg n+١)/۴ = o(T (١) × ٣n−٢ ) :‬‬
‫▷‬
‫‪١‬‬
‫ﻣﺴﺌﻠﻪی ‪ .٢‬ﮐﺘﺎب‬
‫ﺳﻮاﻻت زﯾﺮ را از ﮐﺘﺎب درﺳ )ﮐﺘﺎب دﮐﺘﺮ ﻗﺪﺳ ( ﺣﻞ ﮐﻨﯿﺪ‪.‬‬
‫• ‪ ۴ .٢-۴-٣‬ﺣﻞ‪ .‬ﺑﺎ ﻧﻮﺷﺘﻦ راﺑﻄﻪ ی ﺑﺎزﮔﺸﺘ از روی ﺣﺎﻟﺖ ﻫﺎی ﮐﻮﭼ ﺘﺮ و و ﺑﺎ داﺷﺘﻦ راﺑﻄﻪ ی ﺑﺮج ﻫﺎﻧﻮی‬
‫اﺻﻠ ﺑﺪﺳﺖ ﻣ آﯾﺪ‬
‫• ‪ ١ .۵-٣‬ﺣﻞ‪ .‬در ﻫﺮ ﻃﺒﻘﻪ ی درﺧﺖ )‪ O(n‬ﮐﺎر اﻧﺠﺎم ﻣﯿﺸﻮد و ارﺗﻔﺎع درﺧﺖ )‪ O(lgn‬اﺳﺖ‪.‬‬
‫• ‪ ۶ .۵-٣‬ﺣﻞ‪ .‬ﺑﺎ ﮐﺸﯿﺪن درﺧﺖ ﺑﻪ ﯾ‬
‫▷‬
‫▷‬
‫ﺳﺮی ﻫﻨﺪﺳ ﻣﯿﺮﺳﯿﻢ ﮐﻪ ﺟﻮاب آن ﺿﺮﯾﺐ ‪ n‬اﺳﺖ‪T (n) = Θ(n) .‬‬
‫▷‬
‫• ‪ ٩ .۵-٣‬ﺣﻞ‪ .‬ﺑﺎ ﮐﺸﯿﺪن درﺧﺖ ﺑﺎزﮔﺸﺖ ﻣﯿﺘﻮان ﻧﺸﺎن داد ﮐﺎر اﻧﺠﺎم ﺷﺪه در ﻫﺮ ﻃﺒﻘﻪ )‪ O(n‬اﺳﺖ و ﭼﻮن ‪α‬‬
‫و ‪ β‬ﮐﺴﺮ ﻫﺎی ﮐﻮﭼ ﺗﺮ از ‪ ١‬ﻫﺴﺘﻨﺪ ارﺗﻔﺎع درﺧﺖ )‪ O(lgn‬اﺳﺖ‪.‬‬
‫• ‪ ٢ .۶-٣‬ﺣﻞ‪ .‬ﺣﺪس و اﺳﺘﻘﺮا‪ .‬ﺑﺮای ‪ n‬ﻫﺎی ﻓﺮد ‪ ١٠٠‬و ﺑﺮای ‪ n‬ﻫﺎی زوج ‪١٠٠ + ۶ × ٢‬‬
‫‪n‬‬
‫‪٢‬‬
‫• ‪ ٣ .۶-٣‬ﺣﻞ‪ .‬ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ﮐﺎرت ﻫﺎﯾﯽ ﮐﻪ ﺑﺎ ‪ k‬ﺣﺮﮐﺖ ﻣﯿﺘﻮان ﺑﺮداﺷﺖ را ﺑﺎ ﯾ‬
‫ﻣ آورﯾﻢ )‪ ٢‬راﺑﻄﻪ ﺑﺎزﮔﺸﺘ ﻣﯿﻨﻮﯾﺴﯿﻢ ﯾ‬
‫ﺑﺎﺷﺪ ﺣﺪاﻗﻞ ‪ k + ١‬ﺣﺮﮐﺖ ﻻزم دارد‪.‬‬
‫ﺑﺮای ﺳﻔﯿﺪ ﻫﺎ و ﯾ‬
‫▷‬
‫▷‬
‫راﺑﻄﻪ ی ﺑﺎزﮔﺸﺘ ﺑﺪﺳﺖ‬
‫ﺳﯿﺎه ﻫﺎ(‪ ،‬ﻫﺮ ‪ n‬ﮐﻪ ﺑﯿﻦ )‪ f (k‬و )‪f (k + ١‬‬
‫▷‬
‫ﻣﺴﺌﻠﻪی ‪ .٣‬اﺷﺘﺒﺎه!‬
‫اﺷﺘﺒﺎه ﺗﺤﻠﯿﻞ زﯾﺮ را ﭘﯿﺪا ﮐﻨﯿﺪ‪:‬‬
‫ﻣﯿﺨﻮاﻫﯿﻢ ﺛﺎﺑﺖ ﮐﻨﯿﻢ اﻟ ﻮرﯾﺘﻢ ﻣﺮﺗﺐ ﺳﺎزی ادﻏﺎﻣ از )‪ O(n‬اﺳﺖ!‬
‫»روی ‪ n‬اﺳﺘﻘﺮا ﻣﯿﺰﻧﯿﻢ‪ ،‬ﺑﺮای ‪ n = ١‬ﮐﻪ ﺣ ﻢ درﺳﺖ اﺳﺖ‪ .‬ﻓﺮض ﮐﻨﯿﺪ ادﻋﺎی ﻣﺎ ﺑﺮای ﻫﻤﻪ ی آراﯾﻪ ﻫﺎی ﺑﺎ اﻧﺪازه‬
‫ی ﮐﻤﺘﺮ از ‪ n‬درﺳﺖ ﺑﺎﺷﺪ‪ ،‬ﯾ آراﯾﻪ ی ‪ n‬ﻋﻨﺼﺮی دارﯾﻢ‪ ،‬ﻃﺒﻖ اﻟ ﻮرﯾﺘﻢ آراﯾﻪ ﺑﻪ دو ﻗﺴﻤﺖ ‪ n٢‬ﺗﺎﯾﯽ ﺗﻘﺴﯿﻢ ﻣﯿﺸﻮد‪،‬‬
‫ﻫﺮ ﮐﺪام از اﯾﻦ دو ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﻣﯿﺸﻮد و ﺑﻌﺪ ﺑﺎ )‪ O(n‬ادﻏﺎم ﻣﯿﺸﻮد‪ .‬ﻃﺒﻖ ﻓﺮض اﺳﺘﻘﺮا ﻫﺮ ﮐﺪام از دو ﻗﺴﻤﺖ در‬
‫) ‪ O( n٢‬ﻣﺮﺗﺐ ﻣﯿﺸﻮﻧﺪ ﭘﺲ در ﮐﻞ دارﯾﻢ‪ O( n٢ ) + O( n٢ ) + O(n) :‬ﮐﻪ از )‪ O(n‬اﺳﺖ‪«.‬‬
‫ﺣﻞ‪ .‬وﻗﺘ ﺑﺮای ﺛﺎﺑﺖ ﮐﺮدن ﺗﺤﻠﯿﻞ زﻣﺎﻧ ﯾ اﻟ ﻮرﯾﺘﻢ اﺳﺘﻘﺮا ﻣﯿﺰﻧﯿﻢ ﺑﺎﯾﺪ ﺿﺮﯾﺐ ﺛﺎﺑﺖ ‪ c‬ﮐﻪ در ﺗﻌﺮﯾﻒ ‪ O‬آﻣﺪه را‬
‫ﺑﻪ دﻗﺖ در ﻧﻈﺮ ﺑ ﯿﺮﯾﻢ‪ .‬در اﯾﻦ ﻣﺜﺎل اﮔﺮ ﻓﺮض ﮐﻨﯿﻢ اﯾﻦ ﺿﺮﯾﺐ ‪ c‬اﺳﺖ‪ ،‬ﯾﻌﻨ ﺑﺮای ﻗﺴﻤﺖ ﻫﺎی ‪ n٢‬ﺗﺎﯾﯽ زﻣﺎن اﺟﺮا‬
‫ﮐﻤﺘﺮ ﻣﺴﺎوی ‪ c n٢‬اﺳﺖ‪ ،‬ﺑﺮای ‪ n‬ﺧﻮاﻫﯿﻢ داﺷﺖ‪ c n٢ + c n٢ + O(n) = cn + O(n) :‬ﮐﻪ ﺑﺰرﮔﺘﺮ از ‪ cn‬اﺳﺖ‪ .‬ﭘﺲ‬
‫▷‬
‫اﯾﻦ اﺛﺒﺎت ﻧﻤ ﺗﻮاﻧﺪ درﺳﺖ ﺑﺎﺷﺪ‪.‬‬
‫ﻣﺴﺌﻠﻪی ‪ .۴‬ﺷﻤﺎرﻧﺪه ی ﭘﺮﻫﺰﯾﻨﻪ‬
‫ﯾ ﺷﻤﺎرﻧﺪه دودوﯾﯽ ‪ n‬ﺑﯿﺘ در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ ﮐﻪ در آن ﻫﺰﯾﻨﻪ ی ﻋﻮض ﮐﺮدن ﺑﯿﺖ ‪ i‬ام‪ i ،‬ﺑﺎﺷﺪ‪ ،‬ﺑﻪ ﻃﻮر ﻣﺜﺎل اﮔﺮ‬
‫ﺷﻤﺎرﻧﺪه ‪ ١٠٠١١١‬ﺑﺎﺷﺪ ﻫﺰﯾﻨﻪ ی اﻓﺰاﯾﺶ آن ﺑﻪ ‪) ١٠١٠٠٠‬ﯾﻌﻨ ﻋﺪد ﺑﻌﺪی( ‪ ١+٢+٣+۴=١٠‬اﺳﺖ‪.‬‬
‫اﻟﻒ( ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ ﻫﺮ اﻓﺰاﯾﺶ از )‪ O(١‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﺣﻞ‪ .‬ﺑﻪ ازای ﻫﺮ اﻓﺰاﯾﺶ ‪ ۴‬ﺗﻮﻣﻦ در ﺻﻨﺪوق ﻣﯿ ﺬارﯾﻢ‪ ،‬اﮔﺮ ﺗﺎ ﻋﺪد ‪ n‬ﭘﯿﺶ رﻓﺘﻪ ﺑﺎﺷﯿﻢ ﺑﯿﺖ اول ‪ n‬ﺑﺎر‪ ،‬ﺑﯿﺖ‬
‫دوم ‪ n٢‬ﺑﺎر و ‪ ...‬ﺑﺎﯾﺪ ﺛﺎﺑﺖ ﮐﻨﯿﻢ در ﻫﺮ ﻟﺤﻈﻪ ﻫﺰﯾﻨﻪ ی اﻓﺰاﺑﺶ ﺑﻌﺪی در ﺻﻨﺪوق ﻫﺴﺖ‪ ،‬ﯾﻌﻨ ‪:‬‬
‫▷‬
‫‪n + ٢ n٢ + ٣ ٢n٢ + ... ⩽ ۴n‬‬
‫‪٢‬‬
‫ب( ﻓﺮض ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪ ی ﻋﻮض ﮐﺮدن ﺑﯿﺖ ‪ i‬ام ﺑﻪ ﺟﺎی ‪ ٢i ،i‬ﺑﺎﺷﺪ‪ .‬آﯾﺎ ﻫﻨﻮز ﻫﻢ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ ﻫﺮ اﻓﺰاﯾﺶ از‬
‫)‪ O(١‬اﺳﺖ؟ اﮔﺮ ﻧﻪ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ آن را ﺣﺴﺎب ﮐﻨﯿﺪ‪.‬‬
‫ﺣﻞ‪ .‬ﻫﺰﯾﻨﻪ )‪ O(١‬ﻧﯿﺴﺖ‪ O(lgn) ،‬اﺳﺖ )اﮔﺮ ﺷﻤﺎرﻧﺪه ﺗﺎ ﻋﺪد ‪ n‬ﮐﻪ ﺗﻮاﻧ از ‪ ٢‬اﺳﺖ ﺑﺮود‪ ،‬ﺑﺮای ﺑﻘﯿﻪ ﺣﺎﻟﺖ‬
‫ﻫﺎ ﻫﻢ اﺛﺒﺎت ﺷﺒﯿﻪ اﺳﺖ(‪ .‬ﻣﺠﻤﻮع ﻫﺰﯾﻨﻪ ﺧﻮاﻫﺪ ﺑﻮد‪:‬‬
‫‪n‬‬
‫‪٢n‬‬
‫‪٢n + ٢ ٢ + ٢٣ ٢n٢ + ... + ٢lgn+١ ٢lgn‬‬
‫)‪= ٢n(lgn + ١‬‬
‫▷‬
‫ﭘﺲ ﭼﻮن ‪ n‬ﺑﺎر اﻓﺰاﯾﺶ دادﯾﻢ ﺑﻪ ﺻﻮرت ﺳﺮﺷ ﻦ ﻫﺰﯾﻨﻪ )‪ O(lgn‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﻣﺴﺌﻠﻪی ‪ .۵‬ﺟﺎﯾ ﺸﺖ‬
‫ﺗﻤﺎم ﺟﺎﯾ ﺸﺖ ﻫﺎی اﻋﺪاد ‪ ١‬ﺗﺎ ‪ n‬را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ و آﻧﻬﺎ را ﻣﺎﻧﻨﺪ ﻓﺮﻫﻨﮓ ﻟﻐﺖ ﻣﺮﺗﺐ ﮐﻨﯿﺪ‪.‬‬
‫ﻣﺜﻼ ﺑﺮای ‪ n = ٣‬دارﯾﻢ‪:‬‬
‫>‪3‬‬
‫>‪2‬‬
‫>‪3‬‬
‫>‪1‬‬
‫>‪2‬‬
‫>‪1‬‬
‫‪2,‬‬
‫‪3,‬‬
‫‪1,‬‬
‫‪3,‬‬
‫‪1,‬‬
‫‪2,‬‬
‫‪<1,‬‬
‫‪<1,‬‬
‫‪<2,‬‬
‫‪<2,‬‬
‫‪<3,‬‬
‫‪<3,‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﯾ از اﯾﻦ ﺟﺎﯾ ﺸﺖ ﻫﺎ را دارﯾﻢ و از روی آن ﻣﯿﺨﻮاﻫﯿﻢ ﺟﺎﯾ ﺸﺖ ﺑﻌﺪی را ﺑﺴﺎزﯾﻢ‪ .‬ﺑﻪ ﻃﻮر ﻣﺜﺎل‬
‫ﺑﺮای ﺳﺎﺧﺘﻦ ﺟﺎﯾ ﺸﺖ ﭼﻬﺎرم از روی ﺟﺎﯾ ﺸﺖ ﺳﻮم‪ ،‬ﻋﻨﺼﺮ دوم و ﺳﻮم را ﻋﻮض ﻣﯿ ﻨﯿﻢ‪.‬‬
‫ﻣﯿﺨﻮاﻫﯿﻢ از ﺟﺎﯾ ﺸﺖ اول ﺷﺮوع ﮐﻨﯿﻢ و ﯾ ﯾ ﺟﺎﯾ ﺸﺖ ﻫﺎی ﺑﻌﺪی را ﺗﻮﻟﯿﺪ ﮐﻨﯿﻢ‪ .‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ‬
‫رﺳﯿﺪن از ﯾ ﺟﺎﯾ ﺸﺖ ﺑﻪ ﺟﺎﯾ ﺸﺖ ﺑﻌﺪی آن از )‪ O(١‬اﺳﺖ‪.‬‬
‫ﺑﺎر ﻋﻮض ﻣﯿﺸﻮد‪ ،‬ﻋﺪد اول ﻫﺮ ‪ !١‬ﯾ‬
‫ﺣﻞ‪ .‬ﻋﺪد ﺻﻔﺮم از ﺳﻤﺖ راﺳﺖ ﻫﺮ ‪ !٠‬ﯾ‬
‫)ﭼﺮا؟( ﭘﺲ ﻣﺠﻤﻮع ﻫﺰﯾﻨﻪ ﻫﺎ ﺧﻮاﻫﺪ ﺑﻮد‪:‬‬
‫!‪n‬‬
‫!‪n‬‬
‫!‪n‬‬
‫!‪n‬‬
‫!)‪+ ١! + ٢! + ... + (n−١‬‬
‫)!‪= n!Σ i!١ < n!Σ ٢١i = ٢(n‬‬
‫!‪٠‬‬
‫ﭘﺲ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ ﺳﺎﺧﺘﻦ ﺟﺎﯾ ﺸﺖ ﺑﻌﺪی )‪ O(١‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﺑﺎر‪ ،‬ﻋﺪد دوم ﻫﺮ ‪ !٢‬ﯾ‬
‫ﺑﺎر‬
‫▷‬
‫ﻣﺴﺌﻠﻪی ‪ .۶‬آراﯾﻪ ی ﭘﻮﯾﺎ‬
‫ﻣ ﺧﻮاﻫﯿﻢ ﯾ آراﯾﻪ ی ﭘﻮﯾﺎ )آراﯾﻪ ای ﺑﺎ ﻗﺎﺑﻠﯿﺖ ﺗﻐﯿﯿﺮ اﻧﺪازه( ﺑﺎ اﺳﺘﻔﺎده از آراﯾﻪ ﻫﺎی ﻋﺎدی ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﻢ‪.‬‬
‫ﺑﺮای اﯾﻦ ﮐﺎر اﺑﺘﺪا ﯾ آراﯾﻪ ﺑﺎ اﻧﺪازه ی ‪ ١‬در ﻧﻈﺮ ﻣﯿ ﯿﺮﯾﻢ ﮐﻪ ﭼﯿﺰی در آن ﻧﯿﺴﺖ‪ .‬ﺑﻌﺪ ﺑﺮای ﻫﺮ ﻋﻤﻠﯿﺎت درج اﮔﺮ آراﯾﻪ‬
‫ی ﻓﻌﻠ ﺟﺎ داﺷﺖ ﻋﻨﺼﺮ ﺟﺪﯾﺪ را ﺑﻪ اﻧﺘﻬﺎی آن اﺿﺎﻓﻪ ﻣﯿ ﻨﯿﻢ و اﮔﺮ ﻧﺪاﺷﺖ ﯾ آرا ﯾﻪ ی ﺟﺪﯾﺪ ﺑﺎ اﻧﺪازه ی ‪ ٢‬ﺑﺮاﺑﺮ آراﯾﻪ‬
‫ی ﻗﺒﻠ ﻣﯿﺴﺎزﯾﻢ‪ ،‬ﺗﻤﺎم ﻋﻨﺎﺻﺮ آراﯾﻪ ی ﻗﺒﻠ را ﺑﻪ اﯾﻦ آراﯾﻪ ﻣﻨﺘﻘﻞ ﻣﯿ ﻨﯿﻢ و ﻋﻨﺼﺮ ﺟﺪﯾﺪ را ﺑﻪ اﻧﺘﻬﺎی آن اﺿﺎﻓﻪ ﻣﯿ ﻨﯿﻢ‪.‬‬
‫ﻫﺰﯾﻨﻪ ی اﻧﺘﻘﺎل ‪ n‬ﻋﻨﺼﺮ از آراﯾﻪ ای ﺑﻪ آراﯾﻪ ی دﯾ ﺮ )‪ O(n‬اﺳﺖ‪(.‬‬
‫اﻟﻒ( ﻓﺮض ﮐﻨﯿﺪ ﺑﺮای ﻋﻤﻠﯿﺎت ﺣﺬف‪ ،‬ﻋﻨﺼﺮ آﺧﺮ را از آراﯾﻪ ی ﻓﻌﻠ ﺣﺬف ﻣﯿ ﻨﯿﻢ و ﺑﻌﺪ اﮔﺮ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ ﺑﺎﻗﯿﻤﺎﻧﺪه‬
‫ﮐﻤﺘﺮ ﻣﺴﺎوی ﻧﺼﻒ اﻧﺪازه ی آراﯾﻪ ی ﻓﻌﻠ ﺑﻮد ﯾ آراﯾﻪ ﺑﺎ اﻧﺪازه ی ﻧﺼﻒ آراﯾﻪ ی ﻓﻌﻠ ﻣﯿﺴﺎزﯾﻢ و ﻫﻤﻪ ی‬
‫ﻋﻨﺎﺻﺮ ﺑﺎﻗﯿﻤﺎﻧﺪه را ﺑﻪ آن ﻣﻨﺘﻘﻞ ﻣﯿ ﻨﯿﻢ‪.‬‬
‫ﻧﺸﺎن دﻫﯿﺪ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ اﻋﻤﺎل )‪ O(١‬ﻧﺨﻮاﻫﺪ ﺑﻮد‪.‬‬
‫)راﻫﻨﻤﺎﯾﯽ‪ :‬دﻧﺒﺎﻟﻪ ای از اﻋﻤﺎل درج و ﺣﺬف ﭘﯿﺪا ﮐﻨﯿﺪ ﮐﻪ ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ آن ﺑﯿﺸﺘﺮ ﺑﺎﺷﺪ‪(.‬‬
‫‪٣‬‬
‫ﺣﻞ‪ .‬اﮔﺮ ﻣﺜﻼ ‪ ٢k‬ﻋﻨﺼﺮ در آراﯾﻪ درج ﮐﻨﯿﻢ و ﺑﻌﺪ ‪ n‬ﺑﺎر اﯾﻦ ﮐﺎر را اﻧﺠﺎم دﻫﯿﻢ‪ :‬ﯾ ﻋﻨﺼﺮ را ﺣﺬف ﮐﻨﯿﻢ و‬
‫دوﺑﺎره ﯾ درج ﮐﻨﯿﻢ‪ ،‬ﻫﺮدﻓﻌﻪ ﺑﺎﯾﺪ ﮐﻞ آراﯾﻪ ی ﻗﺒﻠ ﻣﻨﺘﻘﻞ ﺷﻮد‪ ،‬و اﮔﺮ ‪ ٢k‬ﻧﺴﺒﺖ ﺑﻪ ‪ n‬ﺑﺰرگ ﺑﺎﺷﺪ ﻫﺰﯾﻨﻪ ی‬
‫▷‬
‫ﻫﺮ ﻋﻤﻞ )‪ O(١‬ﻧﺨﻮاﻫﺪ ﺑﻮد‬
‫ب( ﺣﺎﻻ ﻓﺮض ﮐﻨﯿﺪ ﺑﻪ ﺟﺎی اﯾﻨﮑﻪ وﻗﺘ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ ﺑﺎﻗﯿﻤﺎﻧﺪه ﺑﻪ ﻧﺼﻒ اﻧﺪازه رﺳﯿﺪ آراﯾﻪ را ﻧﺼﻒ ﮐﻨﯿﻢ‪ ،‬وﻗﺘ‬
‫اﯾﻦ ﺗﻌﺪاد ﺑﻪ ‪ ١۴‬رﺳﯿﺪ اﯾﻦ ﮐﺎر را اﻧﺠﺎم دﻫﯿﻢ‪.‬‬
‫ﻧﺸﺎن دﻫﯿﺪ در اﯾﻦ ﺻﻮرت ﻫﺰﯾﻨﻪ ی ﺳﺮﺷ ﻦ ﺑﺮای ﻫﺮ دﻧﺒﺎﻟﻪ از اﻋﻤﺎل درج و ﺣﺬف )‪ O(١‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﺣﻞ‪ .‬اﮔﺮ ﺑﻪ ازای ﻫﺮ درج ﮐﻪ ﺑﺎﻋﺚ ﺗﻐﯿﯿﺮ اﻧﺪازه ی آراﯾﻪ ﻧﻤﯿﺸﻮد ‪ ٢‬ﺗﻮﻣﺎن در ﺻﻨﺪوق ﺑ ﺬارﯾﻢ‪،‬و ﺑﻪ ازای ﻫﺮ‬
‫ﺣﺬف ﮐﻪ ﺑﺎﻋﺚ ﺗﻐﯿﯿﺮ اﻧﺪازه ی آراﯾﻪ ﻧﻤﯿﺸﻮد ‪ ١‬ﺗﻮﻣﺎن در ﺻﻨﺪوق ﺑ ﺬارﯾﻢ‪ ،‬ﺑﺎ ﻧﺸﺎن دادن اﯾﻨﮑﻪ ﻣﻮﻗﻊ دو ﺑﺮاﺑﺮ‬
‫ﺷﺪن آراﯾﻪ‪ ،‬ﻧﺼﻒ ﻋﻨﺎﺻﺮ ﻫﺴﺘﻨﺪ ﮐﻪ ﭘﻮﻟ ﮐﻪ ﺑﻪ ازای آﻧﻬﺎ در زﻣﺎن درج در ﺻﻨﺪوق ﮔﺬاﺷﺘﯿﻢ ﻫﻨﻮز ﻫﺴﺖ و ﺑﻪ‬
‫ﻃﻮر ﻣﺸﺎﺑﻪ ﺑﺮای ﺣﺬف‪ ،‬ﺛﺎﺑﺖ ﻣ ﺷﻮد ﺑﺮای ﻫﺮ دﻓﻌﻪ ﺗﻐﯿﯿﺮ اﻧﺪازه ی آراﯾﻪ ﺑﻪ اﻧﺪازه ی ﮐﺎﻓ در ﺻﻨﺪوق ﺧﻮاﻫﯿﻢ‬
‫▷‬
‫داﺷﺖ‪.‬‬
‫ﻣﺴﺌﻠﻪی ‪ .٧‬ﺗﮏ ﻧﻤﺎ‬
‫ﺑﻪ آراﯾﻪ ]‪ A[١, ..., n‬ﺗﮏ ﻧﻤﺎ ﻣﯿ ﻮﯾﯿﻢ اﮔﺮ اﻧﺪﯾﺲ ‪ x‬در آن وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ﺑﻪ ﻃﻮرﯾ ﻪ‪:‬‬
‫]‪ A[i] < A[i + ١‬ﺑﺮای ‪ ١ ⩽ i ⩽ x‬و‬
‫]‪ A[i] > A[i + ١‬ﺑﺮای ‪x ⩽ i < n‬‬
‫ﯾﻌﻨ ]‪ A[x‬ﻋﻨﺼﺮ ﺑﯿﺸﯿﻨﻪ ی آراﯾﻪ اﺳﺖ‪ .‬اﻟ ﻮرﯾﺘﻤ از )‪ O(lgn‬اراﺋﻪ دﻫﯿﺪ ﮐﻪ اﯾﻦ ﻋﻨﺼﺮ را در ﯾ‬
‫ﮐﻨﺪ‪.‬‬
‫ﺣﻞ‪ .‬ﺑﺎ اﻟ ﻮرﯾﺘﻤ ﺷﺒﯿﻪ ﺟﺴﺘﺠﻮی دودوﯾﯽ ﻣﯿﺘﻮاﻧﯿﻢ اﯾﻦ ﻋﻨﺼﺮ را ﭘﯿﺪا ﮐﻨﯿﻢ‬
‫‪۴‬‬
‫آراﯾﻪ ﺗﮏ ﻧﻤﺎ ﭘﯿﺪا‬
‫▷‬