ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ )(۴٠-٢۵۴ Data Structures and Fundamentals of Algorithms داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﻣﺪرس :ﻣﺤﻤﺪ ﻗﺪﺳ ﻣﻮﻋﺪ ارﺳﺎل ٢۵ :آﺑﺎن ١٣٩٣ ﺗﻤﺮﯾﻦ ﺷﻤﺎرهی ٣ .١ﺧﺎﻧﻮاده درﺧﺘﺎن دودوﯾ ﺑﺎ nراس را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ ﺑﻪ ﻃﻮرﯾ ﻪ ﺑﺮای ﻫﺮ راس از درﺧﺖ ﺧﺎﺻﯿﺖ زﯾﺮ ﺑﺮﻗﺮار ﺑﺎﺷﺪ: اﮔﺮ n١و n٢ﺑﻪ ﺗﺮﺗﯿﺐ ﺗﻌﺪاد راﺳﻬﺎ در زﯾﺮ درﺧﺖ ﭼﭗ و راﺳﺖ اﯾﻦ راس ﺑﺎﺷﻨﺪ راﺑﻄﻪ زﯾﺮ ﺑﺮﻗﺮار اﺳﺖ. max (n١ , n٢ ) ≤ ٢ min (n١ , n٢ ) + ١ آﯾﺎ ارﺗﻔﺎع اﯾﻦ درﺧﺖ ) O(log nاﺳﺖ؟ ﭘﺎﺳ ﺧﻮد را اﺛﺒﺎت ﮐﻨﯿﺪ. .٢درﺧﺖ Tداده ﺷﺪه اﺳﺖ .ﻣ داﻧﯿﻢ ﭘﯿﺎده ﺳﺎزی اﯾﻦ درﺧﺖ ﺑﻪ ﮔﻮﻧﻪ ای اﺳﺖ ﮐﻪ اﻋﻤﺎل ) LM C(node, T ) ، root(T و ) RS(node, Tﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻫﺴﺘﻨﺪ .ﻣ ﺧﻮاﻫﯿﻢ ﻓﺎﺻﻠﻪ ی دو ﮔﺮه ی qو pاز اﯾﻦ درﺧﺖ را ﺑﻪ دﺳﺖ آورﯾﻢ .اﯾﻦ ﻓﺎﺻﻠﻪ ﺑﺮاﺑﺮ ﺗﻌﺪاد ﯾﺎل ﻫﺎی ﮐﻮﺗﺎهﺗﺮﯾﻦ ﻣﺴﯿﺮ ﺑﯿﻦ اﯾﻦ دو ﮔﺮه اﺳﺖ. )آ( روﯾﻪ ای ﺑﺎزﮔﺸﺘ ﺑﻨﻮﯾﺴﯿﺪ ﺗﺎ ﺑﺎ ﮔﺮﻓﺘﻦ ﮔﺮهﻫﺎی rو pﻓﺎﺻﻠﻪی ﮔﺮه ی pاز زﯾﺮ درﺧﺘ ﺑﻪ رﯾﺸﻪ ی rرا ﻣﺤﺎﺳﺒﻪ ﮐﻨﺪ و در ﺻﻮرﺗ ﮐﻪ اﯾﻦ ﮔﺮه در زﯾﺮ درﺧﺖ ﻧﺒﻮد ﻋﺪد −١را ﺑﺮﮔﺮداﻧﺪ. )ب( ﺑﻪ ﮐﻤ روﯾﻪ ی ﺑﺎﻻ ،روﯾﻪ ای ﺑﺎزﮔﺸﺘ ﺑﻨﻮﯾﺴﯿﺪ ﺗﺎ ﮐﻮﺗﺎﻫﺘﺮﯾﻦ ﻓﺎﺻﻠﻪ ی ﺑﯿﻦ دو ﮔﺮه ی qو pرا در درﺧﺘ ﺑﻪ رﯾﺸﻪ ی rﺑﻪ دﺳﺖ آورد. )ج( ﻫﺮ رو روﯾﻪ را را ﺑﺮ ﺣﺴﺐ ﭘﺎراﻣﺘﺮ ﻫﺎی درﺧﺖ ﺗﺤﻠﯿﻞ ﮐﻨﯿﺪ. .٣درﺳﺘ ﻋﺒﺎرات زﯾﺮ را اﺛﺒﺎت ﮐﻨﯿﺪ و ﯾﺎ ﺑﺎ ﻣﺜﺎل ﻧﻘﺾ رد ﮐﻨﯿﺪ: )آ( آﯾﺎ ﻋﻤﻞ ﺣﺬف در د.د.ج ﺟﺎﺑﻪ ﺟﺎﯾ ﭘﺬﯾﺮ اﺳﺖ؟ )ب( در ﯾ د.د.ج ﺑﺮای ﯾ ﻋﻨﺼﺮ ﯾ ﻣﺴﯿﺮ از رﯾﺸﻪ ﺗﺎ ﯾ ﺑﺮگ را ﭘﯿﻤﻮدهاﯾﻢ .ﻋﻨﺎﺻﺮی ﮐﻪ در ﺳﻤﺖ ﭼﭗ اﯾﻦ ﻣﺴﯿﺮ ﻫﺴﺘﻨﺪ A ،آن ﻫﺎﯾ را ﮐﻪ روی ﻣﺴﯿﺮ ﻫﺴﺘﻨﺪ B ،و ﻋﻨﺎﺻﺮی ﮐﻪ در ﺳﻤﺖ راﺳﺖ ﻣﺴﯿﺮ ﻫﺴﺘﻨﺪ C ،ﻣ ﻧﺎﻣﯿﻢ. آﯾﺎ ﺑﺮای ﻫﺮ a ∈ A, b ∈ B, c ∈ Cﻣ ﺗﻮان ﻣﻄﻤﺌﻦ ﺑﻮد ﮐﻪ c > b > a؟ .۴در ﯾ ارﺗﻔﺎع ﯾ درﺧﺖ دودوﯾ ارﺗﻔﺎع ﻫﺮ راس را ﺑﺮاﺑﺮ ﺑﺎ ﻃﻮل ﺑﻠﻨﺪﺗﺮﯾﻦ ﻣﺴﯿﺮ از آن راس ﺗﺎ ﯾ راس ﮐﻪ ﻓﺮزﻧﺪی ﻧﺪارد را ﻧﯿﺰ ﺑﺮاﺑﺮ ﺑﺎ ١در ﻧﻈﺮ ﻣﯿ ﯿﺮﯾﻢ .ﯾ راس ﺑﺮگ ،ﺗﻌﺮﯾﻒ ﻣﯿ ﻨﯿﻢ. درﺧﺖ ﺑﺎ ارﺗﻔﺎع ﻣﺘﻮازن را ﺑﻪ ﺻﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﻣﯿ ﻨﯿﻢ :در ﻫﺮ راس ،اﺧﺘﻼف ارﺗﻔﺎع ﻓﺮزﻧﺪ راﺳﺖ آن و ﻓﺮزﻧﺪ ﭼﭗ آن ﺣﺪاﮐﺜﺮ ١واﺣﺪ اﺳﺖ) .ﻣﯿﺘﻮاﻧﯿﺪ ﺑﺮای ﻫﺮ راس ﺧﺼﯿﺼﻪای ﺑﻪ ﻧﺎم ارﺗﻔﺎع در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ (.اﮔﺮ iاﻣﯿﻦ ﻋﺪد دﻧﺒﺎﻟﻪ ﻓﯿﺒﻮﻧﺎﺗﭽ را ﺑﺎ ) f ib(iﻧﺸﺎن دﻫﯿﻢ ،آﻧ ﺎه ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﮐﻪ در ﯾ درﺧﺖ دودوﯾ ﺑﺎ ارﺗﻔﺎع ﻣﺘﻮازن ﺑﺎ ارﺗﻔﺎع hﺣﺪاﻗﻞ ) f ib(hراس وﺟﻮد دارد(h > ٠) . ]راﻫﻨﻤﺎﯾ [f ib(n) > ١٫ ۶n : ] .۵اﺧﺘﯿﺎری[ درﺧﺖ دودوﯾ ﮐﺎﻣﻞ Tرا ﺑﻪ ﺻﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﻣﯿ ﻨﯿﻢ :در اﯾﻦ درﺧﺖ ﻫﺮ راس pﻣﯿﺘﻮاﻧﺪ ﺻﻔﺮ ﯾﺎ ٢ ﻓﺮزﻧﺪ داﺷﺘﻪ ﺑﺎﺷﺪ)ﻧﻪ ١ﻓﺮزﻧﺪ( .ﻫﻤﭽﻨﯿﻦ ﺑﺮای ﻫﺮ راس pاﯾﻦ درﺧﺖ اﯾﻦ وﻳﮋﮔ ﺑﺮﻗﺮار اﺳﺖ ﮐﻪ ﻫﻤﻪ راسﻫﺎی ﻣﻮﺟﻮد ١ در زﯾﺮدرﺧﺖ ﭼﭗ راس pﻣﻘﺪاری ﮐﻤﺘﺮ از ﻣﻘﺪار راس pدارﻧﺪ و راسﻫﺎی ﻣﻮﺟﻮد در زﯾﺮدرﺧﺖ راﺳﺖ pﻣﻘﺪاری ﺑﯿﺸﺘﺮ از ﻣﻘﺪار راس pدارﻧﺪ و ﻧﯿﺰ ﺗﻤﺎم راﺳﻬﺎﯾ ﮐﻪ ﺻﻔﺮ ﻓﺮزﻧﺪ دارﻧﺪ در ﯾ ارﺗﻔﺎع ﻫﺴﺘﻨﺪ.ﺣﺎل درﺧﺖ Tرا ﺑﻪ ﮔﺮاف ﺟﻬﺘﺪارﺗﺒﺪﯾﻞ ﻣﯿ ﻨﯿﻢ ،ﺑﻪ اﯾﻦ ﺻﻮرت ﮐﻪ راسﻫﺎی Tرا راسﻫﺎی ﮔﺮاف Gدر ﻧﻈﺮ ﻣﯿ ﯿﺮﯾﻢ و از ﻫﺮ راس ﻣﺎﻧﻨﺪ pﺑﻪ ﻓﺮزﻧﺪ راﺳﺘﺶ ﯾ ﯾﺎل ﺟﻬﺖ دار و از pﺑﻪ ﻓﺮزﻧﺪ ﭼﭙﺶ ﻧﯿﺰ ﯾ )آ( ﺑﺮای راس ،pﯾ ﻫﻨ ﺎﻣ ﮐﻪ ﯾ ﯾﺎل ﺟﻬﺖ دار رﺳﻢ ﻣﯿ ﻨﯿﻢ. ﭘﯿﻤﺎﯾﺶ DF Sﺑﺮ روی زﯾﺮ درﺧﺖ ﭼﭗ و ﺳﭙﺲ ﺑﺮ روی زﯾﺮدرﺧﺖ راﺳﺖ pاﻧﺠﺎم ﻣﯿﺪﻫﯿﻢ. راس ﺑﺴﻂ داده ﺷﺪ)ﯾﻌﻨ درﺳﺖ ﻗﺒﻞ از returnﮐﺮدن از ﺗﺎﺑ df sدر زﯾﺮ درﺧﺖ ﭼﭗ و راﺳﺖ آن(آن راس را ﭼﺎپ ﻣﯿ ﻨﯿﻢ .اوﻟﯿﻦ راﺳ ﮐﻪ ﭼﺎپ ﻣﯿﺸﻮد ﭼﯿﺴﺖ؟ آﺧﺮﯾﻦ راﺳ ﮐﻪ ﭼﺎپ ﻣﯿﺸﻮد ﭼﯿﺴﺖ؟ ﭘﺎﺳ ﺧﻮد را ﺗﻮﺿﯿ دﻫﯿﺪ. )ب( آﯾﺎ اﻟ ﻮرﯾﺘﻢ DF Sدر اﯾﻦ درﺧﺖ)ﺑﻪ ﺻﻮرﺗ ﮐﻪ در ﻗﺴﻤﺖ اﻟﻒ ﺗﻮﺿﯿ داده ﺷﺪ( راس ﻫﺎ را ﺑﻪ ﺻﻮرت ﺻﻌﻮدی ﯾﺎ ﻧﺰوﻟ ﭼﺎپ ﻣﯿ ﻨﺪ؟ ﭘﺎﺳ ﺧﻮد را اﺛﺒﺎت ﮐﻨﯿﺪ. .۶ﻓﺮض ﮐﻨﯿﺪ nزوج ﻣﺮﺗﺐ از اﻋﺪاد و ﺣﺮوف دارﯾﻢ .ﺗﻤﺎم درﺧﺖ ﻫﺎی دودوﯾ ﺟﺴﺖوﺟﻮی ﻗﺎﺑﻞ ﺳﺎﺧﺖ ﺑﺎ اﯾﻦ nزوج ﻣﺮﺗﺐ را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ).ﻣﻘﺎﯾﺴﻪ ﺑﯿﻦ ﻋﻨﺎﺻﺮ در د.د.ج ﺑﺮ اﺳﺎس ﻋﺪدﺷﺎن ﺻﻮرت ﻣ ﮔﯿﺮد( .ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﻫﺮ د.د.ج ﯾ رﺷﺘﻪ در ﻧﻈﺮ ﻣﯿ ﯿﺮﯾﻢ ﺑﻪ اﯾﻦ ﺻﻮرت ﮐﻪ رﺋﻮس آن درﺧﺖ را ﺑﻪ ﺻﻮرت ﭘﯿﺶ ﺗﺮﺗﯿﺐ ﭘﯿﻤﺎﯾﺶ ﻣ ﮐﻨﯿﻢ و ﺣﺮفﻫﺎی رﺋﻮس در اﯾﻦ ﭘﯿﻤﺎﯾﺶ را ﭘﺸﺖ ﺳﺮ ﻫﻢ ﻣ ﻧﻮﯾﺴﯿﻢ ﺗﺎ ﺑﻪ ﯾ رﺷﺘﻪ ﺑﺮﺳﯿﻢ .اﻟ ﻮرﯾﺘﻤ ﮐﺎرا اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﺑﺎ ﮔﺮﻓﺘﻦ ﻋﺪد kﺑﻪ ﻋﻨﻮان ورودی-k ،اﻣﯿﻦ رﺷﺘﻪ از اﯾﻦ رﺷﺘﻪ ﻫﺎ را ﺑﻪ دﺳﺖ آورد. ] .٧ﻋﻤﻠ [ در اﯾﻦ ﺳﻮال ﻗﺮار اﺳﺖ داده ﺳﺎﺧﺘﺎری ﻃﺮاﺣ و ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ ﮐﻪ ﻗﺎﺑﻠﯿﺖ درج ،ﺣﺬف و ﭘﯿﺪا ﮐﺮدن ﻣﺠﻤﻮع دﻧﺒﺎﻟﻪ ای از اﻋﺪاد a١ , a٢ , ..., anﺷﺪه را داﺷﺘﻪ ﺑﺎﺷﺪ) .ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ در اﯾﻦ ﺳﻮال ﻧﻤ ﺗﻮاﻧﯿﺪ از داده ﺳﺎﺧﺘﺎر segment treeاﺳﺘﻔﺎده ﮐﻨﯿﺪ(. ورودی ﻣﺴﺌﻠﻪ :در ﺧﻂ اول ﻋﺪد mﺗﻌﺪاد ﻋﻤﻠﯿﺎﺗ ﮐﻪ ﻗﺮار اﺳﺖ اﻧﺠﺎم ﺷﻮد آﻣﺪه اﺳﺖ و در mﺧﻂ ﺑﻌﺪی ﺑﻪ ﺗﺮﺗﯿﺐ ﺗﻌﺪادی دﺳﺘﻮر آﻣﺪه اﻧﺪ ﮐﻪ ﺑﺪﯾﻦ ﺻﻮرت ﻫﺴﺘﻨﺪ: ) insert(x, iﻋﺪد xرا در ﻣ ﺎن iام دﻧﺒﺎﻟﻪ ی اﻋﺪاد درج ﻣ ﮐﻨﺪ. ) delete(iﻋﻀﻮ iام از دﻧﺒﺎﻟﻪ اﻋﺪاد را ﺣﺬف ﻣ ﮐﻨﺪ. ) sum(i, jﻣﺠﻤﻮع اﻋﺪاد ai + ai+١ , .... + ajرا ﻣﺤﺎﺳﺒﻪ و در ﺧﺮوﺟ ﭼﺎپ ﻣ ﮐﻨﺪ. ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ: stdin stdout 17 )insert(5,1 14 )insert(10,1 9 )insert(7,2 )sum(1,2 )insert(4,3 )delete(2 )sum(1,2 )sum(2,3 ٢ ] .٨ﻧﻈﺮی و ﻋﻤﻠ [ ﻓﺮض ﮐﻨﯿﺪ ﯾ ﯾ درﺧﺖ دودوﯾ ﺑﺎ ارﺗﻔﺎع hو ﺗﻌﺪاد ٢hﮔﺮه ﺑﺮگ دارﯾﻢ .ﻫﺮ ﮔﺮه درﺧﺖ ﻧﯿﺰ دارای ﻣﻘﺪار ﻣﯿﺒﺎﺷﺪ .ﺗﻌﺮﯾﻒ ﻣﯿ ﻨﯿﻢ: • اﮔﺮ ﮔﺮه xﺑﺮگ ﺑﺎﺷﺪ α(x) ،ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ ﻣﺠﻤﻮﻋﻪ ﺷﺎﻣﻞ ﮔﺮه xو اﺟﺪادش ﺗﺎ رﯾﺸﻪ درﺧﺖ ) .ﺑﻪ ﻫﻤﺮاه رﯾﺸﻪ درﺧﺖ( • اﮔﺮ xو yدو ﮔﺮه ﺑﺮگ ﻣﺠﺰا ﺑﺎﺷﻨﺪ α(x, y) ،ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ اﺟﺘﻤﺎع ) α(xو )α(y • ) f (x, yﺣﺎﺻﻞ ﺟﻤ ﻋﻨﺎﺻﺮ ) α(x, yرا ﻣﯿﺪﻫﺪ. اﻟﻒ( اﻟ ﻮرﯾﺘﻤ اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﺑﺮای ﯾ آﻧﻬﺎ ﺣﺪاﮐﺜﺮ اﺳﺖ را ﭘﯿﺪا ﮐﻨﺪ و درﺧﺖ دودوﯾ ﮐﺎﻣﻞ دو ﮔﺮه ﺑﺮگ ∗ xو ∗ yرا ﮐﻪ ﻣﻘﺪار ) ∗ f (x∗ , yﺑﺮای ) ∗ f (x∗ , y را ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟ ﺑﺮﮔﺮداﻧﺪ. ب( اﻟ ﻮرﯾﺘﻢ ﺧﻮد را ﺗﺤﻠﯿﻞ ﮐﻨﯿﺪ و زﻣﺎن اﺟﺮا را ﺑﺮ ﺣﺴﺐ ورودی و ﺑﺎ اﺳﺘﻔﺎده از ﻧﻤﺎدﻫﺎی ﻣﺠﺎﻧﺒ ﺑﺪﺳﺖ آورﯾﺪ. ج( ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ورودیﻫﺎی ﻣﺴﺌﻠﻪ ،اﻟ ﻮرﯾﺘﻢ ﺧﻮد را ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ. ﺷ ﻞ :١ﺷ ﻞ : ١ﯾ درﺧﺖ ﺑﺎ ∗ xو ∗ yﻣﺸﺨﺺ ﺷﺪه در درﺧﺖ ﺑﺎﻻ دارﯾﻢ : }α(x∗ ) = {١٩, ١۵, ٢١, ٣۶ }α(y ∗ ) = {٢٠, ٣٠, ٢١, ٣۶ }α(x∗ , y ∗ ) = {١٩, ١۵, ٢١, ٣۶, ٢٠, ٣٠ f (x∗ , y ∗ ) = ١٩ + ١۵ + ٢١ + ٣۶ + ٢٠ + ٣٠ = ١۴١ ﯾﻌﻨ ﺧﺮوﺟ اﻟ ﻮرﯾﺘﻢ ﺷﻤﺎ ﺑﺮای درﺧﺖ ﺑﺎﻻ ﺑﺎﯾﺪ ﺑﺮاﺑﺮ ١۴١ﺑﺎﺷﺪ. ورودی ﻣﺴﺌﻠﻪ :ﯾ ﻋﺪد mﮐﻪ ﺗﻌﺪاد ﻧﻤﻮﻧﻪﻫﺎی ﻣﺴﺌﻠﻪ را ﺑﯿﺎن ﻣﯿ ﻨﺪ .ﺳﭙﺲ ٢mرﺷﺘﻪ ﮐﻪ ﺑﺎ زﯾﺮ رﺷﺘﻪ pre :و ﯾﺎ post :ﺷﺮوع ﻣﯿﺸﻮﻧﺪ و ﻫﺮﮐﺪام ﻧﺸﺎن دﻫﻨﺪه دﻧﺒﺎﻟﻪ pref ixو ﯾﺎ postf ixﻧﻤﻮﻧﻪ ﺧﻮد ﻣﯿﺒﺎﺷﻨﺪ. ﺧﺮوﺟ ﻣﺴﺌﻠﻪ :ﺑﺮای ﻫﺮ ﻧﻤﻮﻧﻪ ورودی ﯾ ﻋﺪد ﮐﻪ ﻧﺸﺎن دﻫﻨﺪه ) ∗ f (x∗ , yﻣﯿﺒﺎﺷﺪ. stdout stdtin 141 1 pre: 36, 21, 15, 10, 19, 30, 20, 14, 6, 11, 5, 9, 10, 2, 7 post: 10, 19, 15, 20, 14, 30, 21, 5, 9, 11, 2, 7, 10, 6, 36 ٣
© Copyright 2025 Paperzz