ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ )(۴٠-٢۵۴ 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 ٣
© Copyright 2025 Paperzz