A4.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ )‪(۴٠-٢۵۴‬‬
‫‪Data Structures and Fundamentals of Algorithms‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﻣﺪرس‪ :‬ﻣﺤﻤﺪ ﻗﺪﺳ‬
‫ﻣﻮﻋﺪ ارﺳﺎل‪ ٩ :‬آذر ‪١٣٩٣‬‬
‫ﺗﻤﺮﯾﻦ ﺷﻤﺎرهی ‪۴‬‬
‫‪ .١‬درﺳﺘ ﻋﺒﺎرات زﯾﺮ را اﺛﺒﺎت ﮐﻨﯿﺪ و ﯾﺎ ﺑﺎ ﻣﺜﺎل ﻧﻘﺾ رد ﮐﻨﯿﺪ‪:‬‬
‫)آ( آﯾﺎ ﻋﻤﻞ ﺣﺬف در د‪.‬د‪.‬ج ﺟﺎﺑﻪ ﺟﺎﯾ ﭘﺬﯾﺮ اﺳﺖ؟‬
‫)ب( در ﯾ‬
‫د‪.‬د‪.‬ج ﺑﺮای ﯾ‬
‫ﻋﻨﺼﺮ ﯾ‬
‫ﻣﺴﯿﺮ از رﯾﺸﻪ ﺗﺎ ﯾ‬
‫ﺑﺮگ را ﭘﯿﻤﻮدهاﯾﻢ‪ .‬ﻋﻨﺎﺻﺮی ﮐﻪ در ﺳﻤﺖ ﭼﭗ اﯾﻦ‬
‫ﻣﺴﯿﺮ ﻫﺴﺘﻨﺪ‪ A ،‬آن ﻫﺎﯾ را ﮐﻪ روی ﻣﺴﯿﺮ ﻫﺴﺘﻨﺪ‪ B ،‬و ﻋﻨﺎﺻﺮی ﮐﻪ در ﺳﻤﺖ راﺳﺖ ﻣﺴﯿﺮ ﻫﺴﺘﻨﺪ‪ C ،‬ﻣ ﻧﺎﻣﯿﻢ‪.‬‬
‫آﯾﺎ ﺑﺮای ﻫﺮ ‪ a ∈ A, b ∈ B, c ∈ C‬ﻣ ﺗﻮان ﻣﻄﻤﺌﻦ ﺑﻮد ﮐﻪ ‪c > b > a‬؟‬
‫‪ .٢‬ﻓﺮض ﮐﻨﯿﺪ ‪ n‬زوج ﻣﺮﺗﺐ از اﻋﺪاد و ﺣﺮوف دارﯾﻢ‪ .‬ﺗﻤﺎم درﺧﺖ ﻫﺎی دودوﯾ ﺟﺴﺖوﺟﻮی ﻗﺎﺑﻞ ﺳﺎﺧﺖ ﺑﺎ اﯾﻦ ‪ n‬زوج‬
‫ﻣﺮﺗﺐ را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ‪).‬ﻣﻘﺎﯾﺴﻪ ﺑﯿﻦ ﻋﻨﺎﺻﺮ در د‪.‬د‪.‬ج ﺑﺮ اﺳﺎس ﻋﺪدﺷﺎن ﺻﻮرت ﻣ ﮔﯿﺮد(‪ .‬ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﻫﺮ د‪.‬د‪.‬ج ﯾ‬
‫رﺷﺘﻪ در ﻧﻈﺮ ﻣﯿ ﯿﺮﯾﻢ ﺑﻪ اﯾﻦ ﺻﻮرت ﮐﻪ رﺋﻮس آن درﺧﺖ را ﺑﻪ ﺻﻮرت ﭘﯿﺶ ﺗﺮﺗﯿﺐ ﭘﯿﻤﺎﯾﺶ ﻣ ﮐﻨﯿﻢ و ﺣﺮفﻫﺎی رﺋﻮس‬
‫در اﯾﻦ ﭘﯿﻤﺎﯾﺶ را ﭘﺸﺖ ﺳﺮ ﻫﻢ ﻣ ﻧﻮﯾﺴﯿﻢ ﺗﺎ ﺑﻪ ﯾ‬
‫رﺷﺘﻪ ﺑﺮﺳﯿﻢ‪ .‬اﻟ ﻮرﯾﺘﻤ ﮐﺎرا اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﺑﺎ ﮔﺮﻓﺘﻦ ﻋﺪد ‪ k‬ﺑﻪ‬
‫ﻋﻨﻮان ورودی‪-k ،‬اﻣﯿﻦ رﺷﺘﻪ از اﯾﻦ رﺷﺘﻪ ﻫﺎ را ﺑﻪ دﺳﺖ آورد‪.‬‬
‫‪ .٣‬ﻓﺮض ﮐﻨﯿﺪ ﻣ ﺧﻮاﻫﯿﻢ درﺧﺖﻫﺎی دودوﺋ ﺑﺪون ﺑﺮﭼﺴﺐ )ﻣﺸﺎﺑﻪ ﺻﻔﺤﻪ ﺑﻌﺪ( را ﺑﻪ اﻋﺪاد ﻣﻮﺟﻮد در ﺑﺎزهی ‪ ٠‬ﺗﺎ ‪N − ١‬‬
‫ﻧ ﺎﺷﺖ ﮐﻨﯿﻢ‪ .‬ﯾ‬
‫ﺗﺎﺑ درﻫﻢﺳﺎزی ﻣﻨﺎﺳﺐ ﻣﻌﺮﻓ ﮐﻨﯿﺪ ﮐﻪ وﯾﮋﮔ ﻫﺎی زﯾﺮ را داﺷﺘﻪ ﺑﺎﺷﺪ‪) .‬راﻫﻨﻤﺎﯾ ‪ :‬از روش‬
‫درﻫﻢﺳﺎزی رﺷﺘﻪ ﻫﺎ ﮐﻤ‬
‫ﺑ ﯿﺮﯾﺪ(‬
‫)آ( ‪ -١‬ﺣﺬف ﯾﺎ اﺿﺎﻓﻪ ﮐﺮدن ﯾ‬
‫ﺑﺮگ ﯾﺎ ﺗﻐﯿﯿﺮ زﯾﺮدرﺧﺖ ﺳﻤﺖ ﭼﭗ و راﺳﺖ ﯾ‬
‫راس ﺑﺎﯾﺪ ﻣﻮﺟﺐ ﺗﻐﯿﯿﺮ ﻣﻘﺪار‬
‫ﺗﺎﺑ درﻫﻢﺳﺎزی ﺷﻮد ﻣ ﺮ اﯾﻨ ﻪ ﺑﻪ ﺻﻮرت ﺗﺼﺎدﻓ و اﺣﺘﻤﺎﻟ اﯾﻦ ﻣﻘﺪار ﺑﺮاﺑﺮ ﺷﻮد‪.‬‬
‫‪ -٢‬ﻣﺤﺎﺳﺒﻪ ﺗﺎﺑ درﻫﻢﺳﺎزی ﺑﺎﯾﺪ در زﻣﺎن ﺧﻄ ﻗﺎﺑﻞ اﻧﺠﺎم ﺑﺎﺷﺪ‪.‬‬
‫)ب( ‪ -١‬ﺣﺬف ﯾﺎ اﺿﺎﻓﻪ ﮐﺮدن ﯾ‬
‫ﺑﺮگ ﻣﻮﺟﺐ ﺗﻐﯿﯿﺮ ﻣﻘﺪار ﺗﺎﺑ ﺷﻮد اﻣﺎ ﺗﻐﯿﯿﺮ زﯾﺮ درﺧﺖ ﺳﻤﺖ ﭼﭗ و راﺳﺖ ﯾ‬
‫راس ﺗﺎﺛﯿﺮی در ﻣﻘﺪار ﺗﺎﺑ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ‪) .‬در اﯾﻦ ﺣﺎﻟﺖ اﮔﺮ ﻧﺎم ﺗﺎﺑ ﺷﻤﺎ را ‪ h‬ﺑ ﺬارﯾﻢ ﺑﺮای ﺷ ﻞ زﯾﺮ ﺑﺎﯾﺪ داﺷﺘﻪ‬
‫ﺑﺎﺷﯿﻢ‪ h(A) = h(B) :‬و )‪.h(C) = h(D‬‬
‫‪ -٢‬ﻣﺤﺎﺳﺒﻪ ﺗﺎﺑ درﻫﻢﺳﺎزی ﺑﺎﯾﺪ در زﻣﺎن ﺧﻄ ﻗﺎﺑﻞ اﻧﺠﺎم ﺑﺎﺷﺪ‪.‬‬
‫ﺷ ﻞ ‪ :١‬ورودی ﻧﻤﻮﻧﻪ ﺑﺮای ﺗﺎﺑ درﻫﻢﺳﺎزی‬
‫‪١‬‬
‫‪ .۴‬ﯾ‬
‫دﻧﺒﺎﻟﻪ ﺟﺴﺘﺠﻮ ﺑﻪ دﻧﺒﺎﻟﻪای ﮔﻔﺘﻪ ﻣﯿﺸﻮد ﮐﻪ ﻫﻨ ﺎم ﺟﺴﺘﺠﻮی ﯾ‬
‫ﻋﺪد در د‪.‬د‪.‬ج ﺑﺎ ﺷﺮوع از رﯾﺸﻪ و ﻧﻮﺷﺘﻦ اﻋﺪاد‬
‫ﻣﺮﺑﻮط ﺑﻪ راسﻫﺎﯾ ﮐﻪ در ﻣﺴﯿﺮ ﺟﺴﺘﺠﻮ ﻣ ﺑﯿﻨﯿﻢ ﺑﻪدﺳﺖ ﻣ آﯾﺪ‪ .‬دﻧﺒﺎﻟﻪای از ‪ n‬ﻋﺪد ﻃﺒﯿﻌ داده ﺷﺪه اﺳﺖ‪ ،‬اﻟ ﻮرﯾﺘﻤ‬
‫از )‪ O(n‬اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﻣﺸﺨﺺ ﮐﻨﯿﺪ آﯾﺎ اﯾﻦ دﻧﺒﺎﻟﻪ ﻣﯿﺘﻮاﻧﺪ دﻧﺒﺎﻟﻪ ﺟﺴﺘﺠﻮی ﻣﺮﺑﻮط ﺑﻪ ﯾ‬
‫‪ .۵‬آرش ﯾ‬
‫درﺧﺖ دﻟﺨﻮاه ﺑﺎﺷﺪ ﯾﺎ ﺧﯿﺮ‪.‬‬
‫آراﯾﻪ ﺑﻪ ﻃﻮل ‪ ١۵‬دارد و ﻣ ﺧﻮاﻫﺪ اﻋﺪاد زﯾﺮ را ﺑﻪ ﺗﺮﺗﯿﺐ در آن وارد ﮐﻨﺪ‪ .‬در ﻫﺮ ﮐﺪام از ﻗﺴﻤﺖﻫﺎ ﻣﺮﺣﻠﻪ‬
‫ﺑﻪ ﻣﺮﺣﻠﻪ وارد ﮐﺮدن اﻋﺪاد ﺑﻪ آراﯾﻪ ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑ ﻣﺸﺨﺺ ﺷﺪه را ﻧﺸﺎن دﻫﯿﺪ و ﺑ ﻮﯾﯿﺪ ﺗﺎﺑ ﻣﺸﺨﺺ ﺷﺪه ﻣﺮﺑﻮط ﺑﻪ‬
‫ﮐﺪام روش از آدرسدﻫ ﺑﺎز ﻣ ﺑﺎﺷﺪ‪.‬‬
‫دﻧﺒﺎﻟﻪ اﻋﺪاد ) از ﭼﭗ ﺑﻪ راﺳﺖ(‪١٠, ٢۴, ٢٩, ۴٣, ٣٩, ٢١, ۴۵, ١۴ :‬‬
‫)آ( ‪.h(k, i) = (k + i) mod ١۵‬‬
‫)ب( ‪.h(k, i) = (k + i ∗ (١ + k mod ١١)) mod ١۵‬‬
‫)ج( ‪.h(k, i) = (h٢,٧ (k) + ٠٫ ۵i + ٠٫ ۵i٢ ) mod ١۵‬‬
‫‪] .۶‬ﻋﻤﻠ [‬
‫رﺷﺘﻪی ‪ s‬و ﻋﺪد ‪ k ، m‬ﺑﻪ ﺷﻤﺎ داده ﺷﺪه اﺳﺖ‪ .‬از ﺑﯿﻦ زﯾﺮرﺷﺘﻪﻫﺎی ﺑﻪ ﻃﻮل ‪ m‬اوﻟﯿﻦ زﯾﺮ رﺷﺘﻪای ﮐﻪ ﺣﺪاﻗﻞ ‪ k‬ﺑﺎر آﻣﺪه‬
‫اﺳﺖ را ﭘﯿﺪا ﮐﻨﯿﺪ‪.‬‬
‫ورودی ﻣﺴﺌﻠﻪ‪ :‬رﺷﺘﻪ ‪ s‬و دو ﻋﺪد ‪ k‬و ‪.m‬‬
‫ﺧﺮوﺟ ﻣﺴﺌﻠﻪ‪ :‬ﻣ ﺎن اوﻟﯿﻦ زﯾﺮرﺷﺘﻪی ﺧﻮاﺳﺘﻪ ﺷﺪه را در ﺧﺮوﺟ ﭼﺎپ ﮐﻨﯿﺪ‪ .‬در ﺻﻮرﺗ ﮐﻪ ﭼﻨﯿﻦ زﯾﺮررﺷﺘﻪای‬
‫وﺟﻮد ﻧﺪاﺷﺖ‪ ”NoSolution” ،‬ﭼﺎپ ﮐﻨﯿﺪ‪) .‬اﻧﺪﯾﺲ رﺷﺘﻪ از ﺻﻔﺮ ﺷﺮوع ﻣﯿﺸﻮد‪(.‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‪:‬‬
‫‪|s| < ١٠۶‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‪:‬‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪3‬‬
‫‪uvklkjwqiosqpiucplkjwqpqwzvbiwlkjwq‬‬
‫‪rtashgdfjdfsjshiertq‬‬
‫‪5 3‬‬
‫‪٢‬‬
‫‪] .٧‬ﻧﻈﺮی‪ -‬ﻋﻤﻠ [‬
‫داده ﺳﺎﺧﺘﺎر ﺻﻒ اوﻟﻮﯾﺖ ﻣﯿﺎﻧﻪ ﺷﺎﻣﻞ ‪ n‬ﻋﻨﺼﺮ ﻣﺠﺰاﺳﺖ ﮐﻪ اﻋﻤﺎل زﯾﺮ را ﻣﯿﺘﻮان روی آن اﻧﺠﺎم داد‪:‬‬
‫• درج ﯾ‬
‫• ﺳﺎﺧﺖ ﯾ‬
‫ﻋﻨﺼﺮ و ﺣﺬف ﻣﯿﺎﻧﻪ‪ ،‬در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ در )‪O(lg n‬‬
‫ﺻﻒ اوﻟﻮﯾﺖ ﻣﯿﺎﻧﻪ )‪ (MPQ‬از ‪ n‬ﻋﻨﺼﺮ در زﻣﺎن )‪.O(n‬‬
‫در ﺑﺨﺶ ﻧﻈﺮی ﻻزم اﺳﺖ ﺑﺎ اﺳﺘﻔﺎده از ﻫﺮم‪ ،‬داده ﺳﺎﺧﺘﺎر ‪ MPQ‬را ﻃﺮاﺣ ﮐﻨﯿﺪ و ﻧﺤﻮه اﻧﺠﺎم اﻋﻤﺎل ﻓﻮق را دﻗﯿﻘﺎ‬
‫ﺗﻮﺿﯿ داده و ﺗﺤﻠﯿﻞ ﻧﻤﺎﯾﯿﺪ‪) .‬ﻣﯿﺘﻮاﻧﯿﺪ ﻓﺮض ﮐﻨﯿﺪ ﮐﻪ اﻟ ﻮرﯾﺘﻤ دارﯾﻢ ﮐﻪ ﻣﯿﺎﻧﻪ را در )‪ O(n‬ﺑﻪ ﻣﺎ ﻣﯿﺪﻫﺪ‪(.‬‬
‫در ﺑﺨﺶ ﻋﻤﻠ ﻣ ﺑﺎﯾﺴﺖ ﻃﺮاﺣ ﭘﯿﺸﻨﻬﺎدی ﺧﻮد در ﺑﺨﺶ ﻧﻈﺮی را ﭘﯿﺎدهﺳﺎزی ﮐﻨﯿﺪ‪.‬‬
‫ورودی ﻣﺴﺌﻠﻪ‪ :‬در ﺧﻂ اول ﻋﺪد ‪ k‬ﮐﻪ ﻧﺸﺎن دﻫﻨﺪه ﺗﻌﺪاد دﺳﺘﻮرﻫﺎﯾ اﺳﺖ ﮐﻪ ﺷﻤﺎ ﺑﺎﯾﺪ اﺟﺮا ﮐﻨﯿﺪ ﻣ آﯾﺪ‪ .‬در ‪ k‬ﺳﻄﺮ‬
‫ﺑﻌﺪ‪ k ،‬دﺳﺘﻮر داده ﻣﯿﺸﻮد ﮐﻪ دﺳﺘﻮر ‪ build‬ﻟﺰوﻣﺎ در ﺧﻂ اول داده ﺧﻮاﻫﺪ ﺷﺪ‪ .‬دﺳﺘﻮرات ﻣﻤ ﻦ ﺑﻪ ﺷﺮح زﯾﺮ اﻧﺪ‪.‬‬
‫• ) ‪ :build(x١ , x٢ , . . . , xm‬ﯾ‬
‫‪ MPQ‬از اﻋﺪاد ‪ x١‬ﺗﺎ ‪ xm‬در زﻣﺎن )‪ O(n‬ﻣﯿﺴﺎزد‪) .‬ﺑﺮای ﺑﺪﺳﺖ آوردن ﻣﯿﺎﻧﻪ‬
‫اﯾﻦ اﻋﺪاد ﻣﯿﺘﻮاﻧﯿﺪ )‪ O(n log n‬زﻣﺎن ﻫﺰﯾﻨﻪ ﮐﻨﯿﺪ و اﯾﻦ ﺟﺰ ﻣﺮاﺣﻞ ﺳﺎﺧﺖ ‪ MPQ‬ﺑﻪ ﺣﺴﺎب ﻧﻤ آﯾﺪ‪(.‬‬
‫• )‪ :insert(x‬ﻋﺪد ‪ x‬را در)‪ O(log n‬در ‪ MPQ‬درج ﻣﯿ ﻨﺪ‪.‬‬
‫• ‪ :remove‬ﻣﯿﺎﻧﻪ را در )‪ O(log n‬از ‪ MPQ‬ﺣﺬف ﻣﯿ ﻨﺪ‪) .‬اﮔﺮ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ زوج ﺑﺎﺷﺪ‪ ،‬ﻋﻨﺼﺮ ‪-n/٢‬اﻣﯿﻦ در‬
‫ﻟﯿﺴﺖ ﻣﺮﺗﺐ ﻋﻨﺎﺻﺮ را ﻣﯿﺎﻧﻪ در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ‪(.‬‬
‫ﺧﺮوﺟ ﻣﺴﺌﻠﻪ‪ :‬ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﻪ ﺗﻌﺪاد دﺳﺘﻮرﻫﺎی ‪ remove‬در ورودی‪ ،‬ﻋﺪد ﺣﺎﺻﻞ از ﻓﺮاﺧﻮاﻧ اﯾﻦ ﺗﺎﺑ را در ﺧﺮوﺟ‬
‫ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‪:‬‬
‫‪١٠۵‬‬
‫≤‪١≤t‬‬
‫‪١٠−٩ ≤ xi ≤ ١٠٩‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﺗﻌﺪاد ﺧﺮوﺟ ﻫﺎﯾ ﮐﻪ ﯾ‬
‫ﺑﺮﻧﺎﻣﻪ ﭼﺎپ ﻣﯿ ﻨﺪ ﺑﯿﺸﺘﺮ از ‪ ۵ ∗ ١٠۶‬ﻧﺨﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‪:‬‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪3‬‬
‫‪6‬‬
‫‪2‬‬
‫)‪build(1,2,3,4,5‬‬
‫‪5‬‬
‫‪remove‬‬
‫‪remove‬‬
‫)‪insert(7‬‬
‫)‪insert(9‬‬
‫‪remove‬‬
‫‪٣‬‬