DS921_HW6.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ )‪(۴٠-٢۵۴‬‬
‫‪Data Structures and Fundamentals of‬‬
‫‪Algorithms‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﻣﺪرس‪ :‬ﻣﺤﻤﺪ ﻗﺪﺳ‬
‫ﺗﻤﺮﯾﻦ ﺷﻤﺎرهی ‪۶‬‬
‫‪ .١‬ﺛﺎﺑﺖ ﮐﻨﯿﺪ ارﺗﻔﺎع ﯾ‬
‫ﻣﻮﻋﺪ ارﺳﺎل‪١٣٩٢/١٠/١٩ :‬‬
‫درﺧﺖ ﻗﺮﻣﺰ‐ﺳﯿﺎه ﺑﺎ ‪ n‬ﮔﺮه داﺧﻠ )ﺑﺪون ﺷﻤﺮدن ﮔﺮهﻫﺎی ﺗﻬ ( ﺣﺪاﮐﺜﺮ )‪ ٢ lg(n + ١‬اﺳﺖ‪.‬‬
‫‪ .٢‬ﻓﺮض ﮐﻨﯿﺪ درﺧﺖ دودوﯾﯽ ﺟﺴﺖ و ﺟﻮﯾﯽ در اﺧﺘﯿﺎر دارﯾﺪ‪ .‬ﻫﺮ ﺑﺎر ﮐﻪ ﺗﻌﺪاد اﻋﻀﺎی اﯾﻦ درﺧﺖ دوﺑﺮاﺑﺮ ﻣ ﺷﻮد اﯾﻦ‬
‫درﺧﺖ روﯾﻪای را ﻓﺮاﺧﻮاﻧ ﻣ ﮐﻨﺪ و ﺗﺒﺪﯾﻞ ﺑﻪ درﺧﺖ دودوﯾﯽ ﺟﺴﺖ و ﺟﻮی ﻣﺘﻮازن ﻣ ﺷﻮد‪ .‬ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل زﻣﺎﻧ ﮐﻪ‬
‫ﺗﻌﺪاد ﮔﺮهﻫﺎی اﯾﻦ درﺧﺖ ‪ ٢k‬ﻣ ﺷﻮد اﯾﻦ درﺧﺖ روﯾﻪی ﻣﺘﻮازن ﺳﺎزی را ﻓﺮاﺧﻮاﻧ ﻣ ﮐﻨﺪ و ارﺗﻔﺎع آن )‪ Θ(k‬ﻣ ﺷﻮد‪.‬‬
‫)آ( زﻣﺎن ﺟﺴﺖ و ﺟﻮ در اﯾﻦ درﺧﺖ از ﭼﻪ ﻣﺮﺗﺒﻪای اﺳﺖ؟‬
‫)ب( اﻟ ﻮرﯾﺘﻤ ﺑﻬﯿﻨﻪ ﺑﺮای روﯾﻪی ﻣﺘﻮازنﺳﺎزی درﺧﺖ ﻃﺮاﺣ ﮐﻨﯿﺪ‪.‬‬
‫)ج( زﻣﺎن ‪ n‬درج ﻣﺘﻮاﻟ در اﯾﻦ درﺧﺖ ﭼﻘﺪر اﺳﺖ؟‬
‫‪ .٣‬دﻧﺒﺎﻟﻪی اﻋﺪاد زﯾﺮ ﺑﻪ ﺗﺮﺗﯿﺐ از راﺳﺖ ﺑﻪ ﭼﭗ در ﯾ‬
‫درﺧﺖ ﻗﺮﻣﺰ‐ﺳﯿﺎه ﮐﻪ در اﺑﺘﺪا ﺗﻬ اﺳﺖ اﺿﺎﻓﻪ ﻣ ﺷﻮد‪ .‬ﭼ ﻮﻧﮕ‬
‫اﺿﺎﻓﻪ ﺷﺪن ﻫﺮ ﻋﺪد و ﭼﺮﺧﺶﻫﺎی ﺑﻪ ﺳﻤﺖ راﺳﺖ و ﭼﭗ ﻣﻮرد ﻧﯿﺎز ﺑﺮای ﻫﺮ ﻣﺮﺣﻠﻪ را ﺗﻮﺿﯿﺢ داده و درﺧﺖ ﻗﺮﻣﺰ‐ﺳﯿﺎه‬
‫ﺑﺮای ﻫﺮ ﻣﺮﺣﻠﻪ را رﺳﻢ ﮐﻨﯿﺪ‪.‬‬
‫‪١۵ ،٢٠ ،٩ ،٨ ،۵ ،١٣ ،١٢‬‬
‫‪ .۴‬اﻟﻒ( ‪ n‬راس ﻣﺠﺰا ﺑﺎ ﺑﺮﭼﺴﺐﻫﺎی ‪ a‬ﺗﺎ ‪ n‬داده ﺷﺪه اﺳﺖ‪ .‬ﺗﻌﺪادی ﻋﻤﻞ ‪ merge‬اﻧﺠﺎم ﻣ دﻫﯿﻢ‪ .‬ﻧﺘﯿﺠﻪی اﯾﻦ‬
‫اﻋﻤﺎل ﺗﻌﺪادی درﺧﺖ رﯾﺸﻪدار ﻣﺎﻧﻨﺪ ﺷ ﻞ ‪ ١‬ﺷﺪه اﺳﺖ‪ .‬ﺗﺮﺗﯿﺐ اﯾﻦ ﻋﻤﻠﯿﺎت ﺑﻪ ﭼﻪ ﺻﻮرت ﺑﻮده اﺳﺖ؟)ﺑﺎ اﺳﺘﻔﺎده از‬
‫دادهﺳﺎﺧﺘﺎر ﻣﺠﻤﻮﻋﻪﻫﺎی ﻣﺠﺰا ﺑﻮﺳﯿﻠﻪ درﺧﺖ(‬
‫ب( اﮔﺮ ﺑﺮ روی ﻫﻤﯿﻦ درﺧﺖ ﻋﻤﻞ )‪ f ind(a‬و )‪ f ind(b‬و ﺳﭙﺲ )‪ merge(a, b‬را ﺑﺎ اﺳﺘﻔﺎده از ﻓﺸﺮدهﺳﺎزی ﻣﺴﯿﺮ‬
‫اﻧﺠﺎم دﻫﯿﻢ درﺧﺖ ﺣﺎﺻﻞ ﺑﻪ ﭼﻪ ﺻﻮرت ﺧﻮاﻫﺪ ﺑﻮد؟‬
‫‪ .۵‬ﻓﺮض ﮐﻨﯿﺪ ‪ n‬ﮔﻮی در اﺧﺘﯿﺎر دارﯾﺪ ﮐﻪ ﻫﺮ ﮐﺪام وزن ﻣﺸﺨﺼ دارﻧﺪ و ﻣﻤ ﻦ اﺳﺖ وزن ﺑﻌﻀ از آﻧﻬﺎ ﺑﺎ ﻫﻢ ﺑﺮاﺑﺮ ﺑﺎﺷﺪ‪.‬‬
‫ﻣ ﺧﻮاﻫﯿﻢ ﺑﺰرﮔﺘﺮﯾﻦ زﯾﺮﻣﺠﻤﻮﻋﻪ از اﯾﻦ ﮔﻮیﻫﺎ را ﭘﯿﺪا ﮐﻨﯿﻢ ﮐﻪ وزن ﻫﻤﻪی آن ﻫﺎ ﺑﺎ ﻫﻢ ﺑﺮاﺑﺮ ﺑﺎﺷﺪ‪.‬‬
‫)آ( ﻓﺮض ﮐﻨﯿﺪ ﺗﺮازوی دو ﮐﻔﻪ ای در اﺧﺘﯿﺎر دارﯾﺪ و ﺗﻨﻬﺎ ﺗﻮاﻧﺎﯾﯽ ﻣﻘﺎﯾﺴﻪ دوﺑﻪ دوی ﮔﻮیﻫﺎ را دارﯾﺪ‪ .‬اﮔﺮ اﯾﻦ ﮔﻮیﻫﺎ‬
‫‪ k‬وزن ﻣﺘﻔﺎوت داﺷﺘﻪ ﺑﺎﺷﻨﺪ‪ ،‬اﻟ ﻮرﯾﺘﻤ از )‪ O(n lg k‬ﺑﺮای ﯾﺎﻓﺘﻦ ﻣﺴﺎﻟﻪ ﺑﯿﺎﺑﯿﺪ‪.‬‬
‫)ب( ﻓﺮض ﮐﻨﯿﺪ ﺗﺮازوی دﯾﺠﯿﺘﺎﻟ در اﺧﺘﯿﺎر دارﯾﺪ ﮐﻪ ﻗﺎدر اﺳﺖ وزن دﻗﯿﻖ ﮔﻮیﻫﺎ را ﻣﺤﺎﺳﺒﻪ ﮐﻨﺪ‪ .‬اﻟ ﻮرﯾﺘﻤ از‬
‫)‪ O(n‬ﺑﺮای ﯾﺎﻓﺘﻦ ﭘﺎﺳ ﻣﺴﺎﻟﻪ ﺑﯿﺎﺑﯿﺪ‪.‬‬
‫‪١‬‬
‫ﺷ ﻞ ‪ :١‬ﺷ ﻞ ﻣﺮﺑﻮط ﺑﻪ ﺳﻮال ‪٢‬‬
‫‪ .۶‬ﺳﺎل ﻫﺎ ﭘﯿﺶ اﻫﺎﻟ ﮐﺸﻮر ‪ x‬در ﺳﺮزﻣﯿﻦ ﺑﺰرﮔ زﻧﺪﮔ ﻣ ﮐﺮدﻧﺪ‪ .‬ﭘﺲ از ﻣﺪﺗ آن ﻫﺎ ﺗﺼﻤﯿﻢ ﮔﺮﻓﺘﻨﺪ ﺗﺎ از ﯾ ﺪﯾ ﺮ ﺟﺪا‬
‫ﺷﻮﻧﺪ ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺮای ﺟﺪا ﺷﺪن ﺗﻌﺪادی دﯾﻮار ﮐﺸﯿﺪﻧﺪ‪ .‬ﭘﺲ از ﻣﺪﺗ ﺑﺨﺶ ﻫﺎﯾﯽ از اﯾﻦ ﮐﺸﻮر ﮐﺎﻣﻼ ﺗﻮﺳﻂ دﯾﻮارﻫﺎ‬
‫اﺣﺎﻃﻪ ﺷﺪ‪ .‬ﺑﺮﻧﺎﻣﻪای ﺑﻨﻮﯾﺴﯿﺪ ﺗﺎ ﻣﺸﺨﺺ ﮐﻨﺪ ﮐﺪام دﯾﻮار ﺑﺮای اوﻟﯿﻦ ﺑﺎر ﻣﻮﺟﺐ اﺣﺎﻃﻪ ﺷﺪن ﺑﺨﺸ از اﯾﻦ ﮐﺸﻮر ﺗﻮﺳﻂ‬
‫دﯾﻮارﻫﺎ ﺷﺪه اﺳﺖ‪.‬‬
‫ورودی‪ :‬در ﺧﻂ اول ورودی ﻋﺪد ‪ M‬ﺗﻌﺪاد دﯾﻮارﻫﺎ آﻣﺪهاﺳﺖ‪ .‬در ‪ M‬ﺧﻂ ﺑﻌﺪ‪ ،‬در ﻫﺮ ﺧﻂ ‪ ۴‬ﻋﺪد آﻣﺪه ﮐﻪ ﻣﺨﺘﺼﺎت‬
‫دﮐﺎرﺗ اﺑﺘﺪا و اﻧﺘﻬﺎی ﯾ‬
‫دﯾﻮار اﺳﺖ‪ .‬دﯾﻮارﻫﺎ ﺑﻪ ﺻﻮرت راﺳﺖ ﻫﺴﺘﻨﺪ و دو دﯾﻮار ﺗﻨﻬﺎ در اﺑﺘﺪا و ﯾﺎ اﻧﺘﻬﺎ ﻣ ﺗﻮاﻧﻨﺪ‬
‫ﯾ ﺪﯾ ﺮ را ﻗﻄ ﮐﻨﻨﺪ‪ .‬اﯾﻦ دﯾﻮار ﻫﺎ ﻫﯿﭽ ﺎه ﺑﺮ ﻫﻢ ﻣﻨﻄﺒﻖ ﻧﯿﺴﺘﻨﺪ‪.‬‬
‫ﺧﺮوﺟ ‪ :‬ﺧﺮوﺟ ﺷﺎﻣﻞ ﺷﻤﺎرهی دﯾﻮاری اﺳﺖ ﮐﻪ ﻣﻮﺟﺐ ﺷﺪه ﺗﺎ ﺑﺨﺸ از ﺳﺮزﻣﯿﻦ اﺣﺎﻃﻪ ﺷﻮد‪ .‬در ﺻﻮرﺗ ﮐﻪ ﻫﯿﭻ‬
‫ﮐﺪام از اﯾﻦ دﯾﻮارﻫﺎ اﯾﻦ وﯾﮋﮔ را ﻧﺪاﺷﺖ ﺧﺮوﺟ ‪ ٠‬اﺳﺖ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‪:‬‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪3‬‬
‫‪4‬‬
‫‪0 1 0 0‬‬
‫‪0 0 1 0‬‬
‫‪1 0 0 1‬‬
‫‪7 5 2 2‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‪١ ⩽ M ⩽ ٢٠٠٠٠٠ :‬‬
‫ﺗﻤﺎم اﻋﺪاد ﺻﺤﯿﺢ ورودی در ﺑﺎزه ی ] ‪ [٠, ١٠٩‬ﻫﺴﺘﻨﺪ‪.‬‬
‫ﻃﻮل دﯾﻮارﻫﺎ ﮐﻤﺘﺮ از ‪ ١٠٩‬اﺳﺖ‪.‬‬
‫‪٢‬‬