AA-HW1.pdf

‫اﻟ ﻮرﯾﺘﻢﻫﺎی ﭘﯿﺸﺮﻓﺘﻪ‬
‫ﻣﻬﻠﺖ ﺗﺤﻮﯾﻞ‪ :‬ﭘﻨﺞﺷﻨﺒﻪ ﺷﺐ‪ ،‬ﻫﺠﺪﻫﻢ ﻣﻬﺮ ﺳﺎﻋﺖ ‪)١١:۵٩‬ﺳﯿﺎﺳﺖ ﺗﺎﺧﯿﺮ‪ :‬ﻫﺮ روز ‪ ٢٠‬در ﺻﺪ ﮐﻢ ﻣ ﺷﻮد(‬
‫ﺗﻤﺮﯾﻦ اول‬
‫ﭘﺎﺳﺦ ﺧﻮد را ﺗﺎﯾﭗ و ﻓﺎﯾﻞ ‪ pdf‬آنرا ﺑﻪ آدرس ‪ hamid.homapour@gmail.com‬ارﺳﺎل ﮐﻨﯿﺪ‬
‫ﺳﻮال اول ‪ ١٠ -‬ﻧﻤﺮه‬
‫ﻧﺸﺎن دﻫﯿﺪ ﭼ ﻮﻧﻪ ﻣ ﺗﻮان دادهﺳﺎﺧﺘﺎر ﺻﻒ ‪ ١‬را ﺑﺎ اﺳﺘﻔﺎده از دو ﭘﺸﺘﻪ ‪ ٢‬ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﻢ ﺑﻪ ﻃﻮری ﮐﻪ زﻣﺎن ﺳﺮﺷ ﻦ ﻋﻤﻠﯿﺎت درج و‬
‫ﺣﺬف ﺛﺎﺑﺖ ﺑﺎﺷﺪ‪ .‬اﺑﺘﺪا روش ﭘﯿﺎده ﺳﺎزی و ﺳﭙﺲ ﺗﺤﻠﯿﻞ ﺳﺮﺷ ﻦ آن را ﺑﻪ ازای ‪ n‬درج و ‪ n‬ﺣﺬف ﺑﻨﻮﯾﺴﯿﺪ‪.‬‬
‫ﺳﻮال دوم ‪ ٢٠ -‬ﻧﻤﺮه‬
‫ﻓﺮض ﮐﻨﯿﺪ دادهﺳﺎﺧﺘﺎر ‪ D‬ﺑﺮای ﻣﺠﻤﻮﻋﻪ ﻧﻘﺎط } ‪ S = {p١ , ..., pn‬در ﻓﻀﺎی ﺳﻪﺑﻌﺪی وﺟﻮد دارد‪ ،‬ﺑﻪﻃﻮری ﮐﻪ ﺳﺎﺧﺖ ‪ D‬زﻣﺎن ) ‪θ(n٢‬‬
‫ﻣ ﺑﺮد‪ .‬ﻫﻤﭽﻨﯿﻦ اﯾﻦ دادهﺳﺎﺧﺘﺎر ﻣ ﺗﻮاﻧﺪ ﺑﻪ ازای ﻧﻘﻄﻪ داده ﺷﺪه ‪ q‬ﻧﺰدﯾ ﺗﺮﯾﻦ ﻧﻘﻄﻪ ﺑﻪ آن را در ‪ D‬در زﻣﺎن )‪ O(log n‬ﺑﻪ ﻋﻨﻮان ﭘﺎﺳﺦ‬
‫ﺑﺮﮔﺮداﻧﺪ‪ .‬ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﺳﺎﺧﺘﺎر ﭘﻮﯾﺎ ﻧﻤ ﺑﺎﺷﺪ و اﻣ ﺎن درج و ﺣﺬف در آن وﺟﻮد ﻧﺪارد‪ .‬ﺣﺎل ﺑﺎ ﮐﻤ ‪ D‬ﯾ ﺳﺎﺧﺘﺎر ﭘﻮﯾﺎ ﻃﺮاﺣ ﮐﻨﯿﺪ‬
‫ﺑﻪﻃﻮری ﮐﻪ ﺑﺘﻮاﻧﺪ ﺑﻪ ﭘﺮﺳﺶ ﻧﺰدﯾ ﺗﺮﯾﻦ ﻫﻤﺴﺎﯾﻪ ﻧﻘﻄﻪ داده ﺷﺪه در زﻣﺎن )‪ O(log٢ n‬ﭘﺎﺳﺦ دﻫﺪ‪ .‬ﻫﻤﭽﻨﯿﻦ درج ﯾ ﻧﻘﻄﻪ در ﺳﺎﺧﺘﺎر‬
‫ﺑﺎﯾﺪ ﺑﻪ ﻃﻮر ﺳﺮﺷ ﻦ زﻣﺎن )‪ O(n‬ﻣﺼﺮف ﮐﻨﺪ‪.‬‬
‫)راﻫﻨﻤﺎﯾﯽ‪ ⌈log n⌉ + ١ :‬ﻧﺴﺨﻪ از ‪ D‬ﺑﺎ اﻧﺪازهﻫﺎی } ⌉‪ {٢٠ , ٢١ , ..., ٢⌈log n‬را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ‪( .‬‬
‫ﺳﻮال ﺳﻮم ‪ ٢٠-‬ﻧﻤﺮه‬
‫ﻫﻤﺎﻧﻄﻮر ﮐﻪ از درس دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ ﺑﻪ ﺧﺎﻃﺮ دارﯾﺪ ‪،‬دو ﭘﯿﺎده ﺳﺎزی ﻣﻌﻤﻮل ﺑﺮای ﺳﺎﺧﺘﺎر ﭘﺸﺘﻪ وﺟﻮد دارد‪ :‬آراﯾﻪ و‬
‫ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی‪ .‬زﻣﺎن ﺑﻪ روز رﺳﺎﻧ در ﻫﺮ دوی اﯾﻦ ﭘﯿﺎده ﺳﺎزیﻫﺎ )‪ O(١‬اﺳﺖ ‪،‬اﻣﺎ از ﻧﻈﺮ ﻓﻀﺎی اﺷﻐﺎل ﺷﺪه اﺑﻦ دو روش ﻣﺸ ﻼﺗ‬
‫دارﻧﺪ‪ .‬در ﭘﯿﺎده ﺳﺎزی ﺑﻪ روش آراﯾﻪ زﻣﺎﻧ ﮐﻪ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ ﭘﺸﺘﻪ ‪ n‬از اﻧﺪازهی آراﯾﻪ ﺑﯿﺶﺗﺮ ﺷﻮد ﺑﺎﯾﺪ آراﯾﻪ را از ﻧﻮ ﺑﺴﺎزﯾﻢ‪ .‬ﺑﻨﺎﺑﺮاﯾﻦ در‬
‫اﯾﻦ روش ﻣﻌﻤﻮﻻ ﻓﻀﺎﯾﯽ ﺑﯿﺸﺘﺮ از ﺣﺪ ﻻزم ﻣ ﺷﻮد‪ .‬در ﭘﯿﺎده ﺳﺎزی ﭘﺸﺘﻪ ﺑﻪ روش ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی‪ ،‬ﺑﺮای ﻫﺮ ﻋﻨﺼﺮ ﯾ اﺷﺎره ﮔﺮ اﺿﺎﻓﻪ‬
‫ﻫﻢ ﻻزم اﺳﺖ ﮐﻪ ﺑﺎﻋﺚ اﻓﺰاﯾﺶ ﻓﻀﺎ ﺑﻪ اﻧﺪازهی ‪ n‬ﻣ ﺷﻮد‪ .‬در اﯾﻦ ﺗﻤﺮﯾﻦ روﺷ را ﭘﯿﺸﻨﻬﺎد ﻣ ﮐﻨﯿﻢ ﮐﻪ ﺣﺎﻓﻈﻪی اﺿﺎﻓﻪ ﻣﻮرد ﻧﯿﺎز آن‬
‫ﺑﺴﯿﺎر ﮐﻤﺘﺮ ﯾﻌﻨ )‪ O(log n‬اﺳﺖ‪ .‬در اﯾﻦ روش ﯾ ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی از آراﯾﻪﻫﺎ ﺑﻪ ﺻﻮرت > ‪ < A١ , A٢ , ...‬ﻧﮕﻪداری ﻣ ﮐﻨﯿﻢ ﮐﻪ در‬
‫آن اﻧﺪازهی آراﯾﻪی ‪ Aj‬دﻗﯿﻘﺎ ﺑﺮاﺑﺮ ‪ j‬اﺳﺖ‪ .‬ﻫﻨﮕﺎم اﻓﺰودن ﻋﻨﺎﺻﺮ ﺑﻪ ﭘﺸﺘﻪ اﺑﺘﺪا ‪ A١‬ﭘﺮ ﻣ ﺷﻮد‪.‬ﺳﭙﺲ ‪ A٣ ، A٢‬و اﻟ آﺧﺮ‪ .‬در اﯾﻦ داده‬
‫ﺳﺎﺧﺘﺎر ‪،‬وﻗﺘ ﮐﻪ آراﯾﻪ ﺧﺎﻟ ﻣ ﺷﻮد از ﺑﯿﻦ ﻣ رود‪ .‬ﺟﺰﺋﯿﺎت در ﺷﺒﻪ ﮐﺪ زﯾﺮ آﻣﺪه اﺳﺖ‪:‬‬
‫√‬
‫اﻟﻒ(]‪ ۵‬ﻧﻤﺮه[ ‪ -‬ﻧﺸﺎن دﻫﯿﺪ ﻓﻀﺎی ﻻزم ﺑﺮای اﯾﻦ داده ﺳﺎﺧﺘﺎر ﺣﺪاﮐﺜﺮ )‪ n + O( n‬ﻣ ﺑﺎﺷﺪ‪ ،‬ﮐﻪ ‪ n‬ﺗﻌﺪاد اﻋﻀﺎی ﺟﺎری ﭘﺸﺘﻪ را‬
‫ﻧﺸﺎن ﻣ دﻫﺪ‪) .‬راﻫﻨﻤﺎﯾﯽ‪( ١ + ٢ + ... + k = Θ(k٢ ) :‬‬
‫ب(]‪ ۵‬ﻧﻤﺮه[ ‪ -‬در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ ﻫﺰﯾﻨﻪ ‪ push‬و ‪ pop‬ﭼﻘﺪر ﻣ ﺑﺎﺷﺪ؟ ﻓﺮض ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪ ﺳﺎﺧﺖ و از ﺑﯿﻦ ﺑﺮدن ﯾ آراﯾﻪ ﺑﺎ اﻧﺪازه ‪ j‬از‬
‫)‪ O(j‬ﻣ ﺑﺎﺷﺪ‪.‬‬
‫‪١ queue‬‬
‫‪٢ stack‬‬
‫‪١‬‬
‫ج(]‪ ١٠‬ﻧﻤﺮه[ ‪ -‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪ ﺳﺮﺷ ﻦ ‪ push‬و ‪ pop‬از )‪ O(١‬ﻣ ﺑﺎﺷﺪ‪ .‬ﺑﺮای اﯾﻦ ﮐﺎر از ﺗﺎﺑﻊ ﭘﺘﺎﻧﺴﯿﻞ زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ ﮐﻪ در‬
‫آن ‪ i‬ﺑﯿﺎﻧﮕﺮ ﻣ ﺎن ‪i‬ام از آراﯾﻪ ﻣﻮرد ﺑﺮرﺳ اﺳﺖ‪:‬‬
‫ﺳﻮال ﭼﻬﺎرم ‪ ١۵ -‬ﻧﻤﺮه‬
‫ﻓﺮض ﮐﻨﯿﺪ آراﯾﻪ ‪ w‬ﮐﻪ ﺷﺎﻣﻞ ‪ n‬ﻋﺪد ﻃﺒﯿﻌ ﻣ ﺑﺎﺷﺪ دارﯾﻢ‪ .‬ﺗﻌﺮﯾﻒ ﻣ ﮐﻨﯿﻢ‪:‬‬
‫]‪idx[i] = max(j) : ١ ≤ j < i and w[j] < w[i‬‬
‫ﺣﺎل ﺑﺮای ﭘﯿﺪا ﮐﺮدن ﻣﻘﺪار ‪ idx‬اﻟ ﻮرﯾﺘﻢ زﯾﺮ را اﺟﺮا ﻣ ﮐﻨﯿﻢ‪:‬‬
‫‪idx[١] = −١‬‬
‫‪for i : ٢ → n do‬‬
‫‪j =i−١‬‬
‫‪while w[j] > w[i] and j ̸= −١ do‬‬
‫]‪j = idx[j‬‬
‫‪end‬‬
‫‪idx[i] = j‬‬
‫‪end‬‬
‫اﻟﻒ(]‪ ۵‬ﻧﻤﺮه[ ‪ -‬ﻧﺸﺎن دﻫﯿﺪ اﻟ ﻮرﯾﺘﻢ ﭘﺎﺳﺦ ﺻﺤﯿﺢ را ﺗﻮﻟﯿﺪ ﺧﻮاﻫﺪ ﮐﺮد‪.‬‬
‫ب(]‪ ١٠‬ﻧﻤﺮه[ ‪ -‬ﻧﺸﺎن دﻫﯿﺪ ﻫﺰﯾﻨﻪ ﺳﺮﺷ ﻦ ﺑﺮای ﻣﺤﺎﺳﺒﻪ ‪ idx‬ﺑﺮای ﻫﺮ اﻧﺪﯾﺲ )‪ O(١‬اﺳﺖ‪.‬‬
‫ج(]‪ ١٠‬ﻧﻤﺮه اﺿﺎﻓﻪ[ ‪ -‬ﺣﺎل ﺳﻌ ﮐﻨﯿﺪ ﺑﺎ اﺳﺘﻔﺎده از ﻧﺘﯿﺠﻪ ﻗﺴﻤﺖ ﻗﺒﻞ اﯾﻦ ﻣﺴﺎﻟﻪ را در زﻣﺎن )‪ O(mn‬ﺣﻞ ﻧﻤﺎﯾﯿﺪ‪ :‬ﻣﺎﺗﺮﯾﺲ ‪m ∗ n‬‬
‫ﺑﺎ دراﯾﻪ ﻫﺎی ﺻﻔﺮ و ﯾ داده ﺷﺪه اﺳﺖ‪ .‬ﻣ ﺧﻮاﻫﯿﻢ زﯾﺮﻣﺴﺘﻄﯿﻞ ﺑﺎ ﺑﯿﺸﺘﺮﯾﻦ ﻣﺴﺎﺣﺖ را در ﻣﺎﺗﺮﯾﺲ ﭘﯿﺪا ﮐﻨﯿﻢ ﺑﻪ ﻃﻮری ﮐﻪ ﻫﻤﻪ دراﯾﻪ‬
‫ﻫﺎی آن ﺑﺮاﺑﺮ ﺑﺎ ﯾ ﺑﺎﺷﺪ‪.‬‬
‫ﺳﻮال ﭘﻨﺠﻢ‪ ٢٠-‬ﻧﻤﺮه‬
‫ﻓﺮض ﮐﻨﯿﺪ ﻣ ﺗﻮاﻧﯿﻢ ﻋﻤﻞ درج ﯾﺎ ﺣﺬف ﯾ ﻋﻨﺼﺮ را در ﯾ ﺟﺪول درﻫﻢﺳﺎزی ‪ ٣‬در زﻣﺎن ﺛﺎﺑﺖ اﻧﺠﺎم دﻫﯿﻢ‪ .‬ﺑﺮای اﯾﻨﮑﻪ ﻣﻄﻤﺌﻦ ﺑﺎﺷﯿﻢ‬
‫ﺟﺪول درﻫﻢﺳﺎزی ﻫﻤﻮاره ﺑﺪون از دﺳﺖ دادن ﻣﯿﺰان زﯾﺎدی از ﺣﺎﻓﻈﻪ‪ ،‬ﺑﻪ اﻧﺪازه ﮐﺎﻓ ﺑﺰرگ اﺳﺖ از ﻗﻮاﻧﯿﻦ زﯾﺮ ﺑﺮای ﺳﺎﺧﺖ ﻣﺠﺪد‬
‫اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﻢ‪:‬‬
‫• ﺑﻌﺪ از ﯾ ﻋﻤﻞ درج‪ ،‬اﮔﺮ ﺑﯿﺶ از ‪ ۴٣‬ﺟﺪول ﭘﺮ اﺳﺖ‪ ،‬ﯾ ﺟﺪول ﺟﺪﯾﺪ ﺑﺎ دو ﺑﺮاﺑﺮ اﻧﺪازه ﺟﺪول ﻓﻌﻠ اﯾﺠﺎد ﻣ ﮐﻨﯿﻢ‪ ،‬ﺗﻤﺎم‬
‫اﻃﻼﻋﺎت را از ﺟﺪول ﻓﻌﻠ وارد ﺟﺪول ﺟﺪﯾﺪ ﻣ ﮐﻨﯿﻢ و ﺟﺪول ﻗﺒﻠ را از ﺑﯿﻦ ﻣ ﺑﺮﯾﻢ‪.‬‬
‫• ﺑﻌﺪ از ﯾ ﻋﻤﻞ ﺣﺬف‪ ،‬اﮔﺮ ﺟﺪول ﮐﻤﺘﺮ از ‪ ۴١‬ﻋﻨﺼﺮ داش‪ ،‬ﯾ ﺟﺪول ﺟﺪﯾﺪ ﺑﺎ ﻧﺼﻒ اﻧﺪازه ﺟﺪول ﻓﻌﻠ اﯾﺠﺎد ﻣ ﮐﻨﯿﻢ‪ ،‬ﺗﻤﺎم‬
‫اﻃﻼﻋﺎت را از ﺟﺪول ﻓﻌﻠ وارد ﺟﺪول ﺟﺪﯾﺪ ﻣ ﮐﻨﯿﻢ و ﺟﺪول ﻗﺒﻠ را از ﺑﯿﻦ ﻣ ﺑﺮﯾﻢ‪.‬‬
‫ﻧﺸﺎن دﻫﯿﺪ ﺑﺮای ﻫﺮ ﺗﺮﺗﯿﺐ از درجﻫﺎ و ﺣﺬفﻫﺎ ﻫﺰﯾﻨﻪ ﺳﺮﺷ ﻦ ﺷﺪه ﺑﺮای ﻫﺮ ﻋﻤﻞ ﻫﻢﭼﻨﺎن ﺛﺎﺑﺖ اﺳﺖ‪.‬‬
‫)راﻫﻨﻤﺎﯾﯽ‪ :‬از روش ﭘﺘﺎﻧﺴﯿﻞ اﺳﺘﻔﺎده ﻧﮑﻨﯿﺪ ﭼﺮاﮐﻪ ﻣﺴﺌﻠﻪ را ﺑﺴﯿﺎر ﺳﺨﺖ ﻣ ﮐﻨﺪ‪(.‬‬
‫ﺳﻮال ﺷﺸﻢ‪ ١۵-‬ﻧﻤﺮه‬
‫ﻓﺮض ﮐﻨﯿﺪ ﺑﻪ ﺟﺎی ﻧﻤﺎﯾﺶ اﻋﺪاد ﺻﺤﯿﺢ ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮانﻫﺎی دو‪ ،‬اﯾﻦ اﻋﺪاد را ﺑﺎ اﺳﺘﻔﺎده از ﺟﻤﻊ اﻋﺪاد ﻓﯿﺒﻮﻧﺎﺗﭽ ‪ ۴‬ﻧﻤﺎﯾﺶ‬
‫ﻣ دﻫﯿﻢ‪ .‬ﺑﻪ ﺑﯿﺎن دﯾ ﺮ‪ ،‬ﺑﻪﺟﺎی اﺳﺘﻔﺎده از ﯾ آراﯾﻪ از ﺑﯿﺖﻫﺎ‪ ،‬ﯾ آراﯾﻪ از ﺗﻄﺒﯿﻖﻫﺎ را ﻧﮕﺎه ﻣ دارﯾﻢ ﺑﻪﻃﻮریﮐﻪ ‪i‬اﻣﯿﻦ ﺑﯿﺖ ﺑﺎ ﻣﻌﻨ‬
‫ﻧﺸﺎندﻫﻨﺪه اﯾﻦ اﺳﺖ ﮐﻪ آﯾﺎ در ﺟﻤﻊ‪ ،‬ﻋﺪد ‪i‬ام ﻓﯿﺒﻮﻧﺎﺗﭽ وﺟﻮد دارد ﯾﺎ ﻧﻪ‪ .‬ﺑﺮای ﻣﺜﺎل ﯾ رﺷﺘﻪ ﺗﻄﺒﯿﻖ ‪ ١٠١١١٠‬ﻧﺸﺎندﻫﻨﺪهی ﻋﺪد‬
‫‪table‬‬
‫‪٣ hash‬‬
‫‪۴ Fibonacci‬‬
‫‪٢‬‬
‫‪ F۶ + F۴ + F٣ + F٢ = ٨ + ٣ + ٢ + ١ = ١۴‬اﺳﺖ‪ .‬اﻟ ﻮرﯾﺘﻤ را ﺷﺮح دﻫﯿﺪ ﮐﻪ ﻋﻤﻠﯿﺎتﻫﺎی درج و ﺣﺬف را ﺑﺮای ﯾ‬
‫ﺗﻄﺒﯿﻖ در زﻣﺎن ﺳﺮﺷ ﻦ ﺷﺪهی ﺛﺎﺑﺖ اﻧﺠﺎم دﻫﺪ‪.‬‬
‫)ﺗﺬﮐﺮ‪ :‬اﻏﻠﺐ اﻋﺪاد را ﻣ ﺗﻮان ﺑﺎ ﺑﯿﺶ از ﯾ رﺷﺘﻪ ﺗﻄﺒﯿﻖ ﻧﻤﺎﯾﺶ داد‪(.‬‬
‫‪٣‬‬
‫ﻋﺪد‬