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