DSA-HW2.pdf

‫ﺑﺴﻤﻪ ﺗﻌﺎﻟﻲ‬
‫ﺗﻤﺮﻳﻦ ﺳﺮي دوم ﺳﺎﺧﺘﻤﺎندادهﻫﺎ و اﻟﮕﻮرﻳﺘﻢﻫﺎ‬
‫ﺑﻬﺮوز رﺑﻴﻌﻲ‪ ،‬ﻋﻠﻲ ﺑﺎﺑﺎﻳﻲ‬
‫ﺳﺎل ﻧﻮي ﻫﻤﮕﻲ ﻣﺒﺎرك!‬
‫ﻟﻄﻔﺎ اﮔﺮ ﺳﻮاﻟﻲ دارﻳﺪ‪ ،‬آن را در ﮔﺮوه درس ﺑﻪ آدرس ‪ sharif‐ce‐dsa‐[email protected]‬ﻣﻄﺮح ﻛﻨﻴﺪ‪.‬‬
‫داده ﺳﺎﺧﺘﺎري اﺳﺖ ﻛﻪ ﻫﻢ ﻗﺎﺑﻠﻴﺖﻫﺎي ﭘﺸﺘﻪ را دارد و ﻫﻢ ﻗﺎﺑﻠﻴﺖﻫﺎي ﺻﻒ را‪ .‬در واﻗﻊ آن را ﻣﻲﺗﻮان ﺑﻪ ﺻﻮرت‬
‫‪1‬ـ ﻳﻚ‬
‫ﻳﻚ ﻟﻴﺴﺖ از اﻋﻀﺎ ﻛﻪ از ﭼﭗ ﺑﻪ راﺳﺖ ﻧﻮﺷﺘﻪ ﺷﺪهاﻧﺪ‪ ،‬ﻣﺸﺎﻫﺪ ﻛﺮد ﻛﻪ ﺳﻪ ﻋﻤﻞ زﻳﺮ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﺪ‪:‬‬
‫‪‬‬
‫ﻳﻚ ﻋﻀﻮ ﺟﺪﻳﺪ ﺑﻪ اﻧﺘﻬﺎي ﺳﻤﺖ ﭼﭗ ﻟﻴﺴﺖ اﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ‪.‬‬
‫‪‬‬
‫ﺳﻤﺖ ﭼﭗﺗﺮﻳﻦ ﻋﻀﻮ ﻟﻴﺴﺖ را ﺣﺬف ﻣﻲﻛﻨﺪ‪.‬‬
‫‪‬‬
‫ﺳﻤﺖ راﺳﺖﺗﺮﻳﻦ ﻋﻀﻮ ﻟﻴﺴﺖ را ﺣﺬف ﻣﻲﻛﻨﺪ‪.‬‬
‫را ﺑﺎ اﺳﺘﻔﺎده از ‪ 3‬ﭘﺸﺘﻪ و ﺣﺎﻓﻈﻪ اﺿﺎﻓﻲ ‪ 1‬ﻃﻮري ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ ﻛﻪ زﻣﺎن ﺳﺮﺷﻜﻦ ﻫﺮ ﻳﻚ از اﻳﻦ‬
‫داده ﺳﺎﺧﺘﺎر‬
‫و‬
‫اﻋﻤﺎل ﺑﺮاﺑﺮ ﻣﻘﺪار ﺛﺎﺑﺘﻲ ﺑﺎﺷﺪ‪ .‬ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺗﻨﻬﺎ ﻧﻮع دﺳﺘﺮﺳﻲ ﺑﻪ ﻫﺮ ﻛﺪام از اﻳﻦ ‪ 3‬ﭘﺸﺘﻪ از ﻃﺮﻳﻖ اﻋﻤﺎل‬
‫ﻣﻲﺑﺎﺷﺪ‪) .‬راﻫﻨﻤﺎﻳﻲ‪ :‬در ﻳﻚ ﭘﺸﺘﻪ ﻧﻴﻤﻪ اﺑﺘﺪاﻳﻲ و در دﻳﮕﺮي ﻧﻴﻤﻪ اﻧﺘﻬﺎﻳﻲ را ﺑﺮﻋﻜﺲ ﻧﮕﻪ دارﻳﺪ(‬
‫‪2‬ـ ﻳﻚ ﻟﻴﻨﻚﻟﻴﺴﺖ از اﻋﺪاد دارﻳﻢ ﻛﻪ ﻫﺮ ﻋﻀﻮ ﺗﻨﻬﺎ ﺑﻪ ﻋﻀﻮ ﺑﻌﺪي ﺧﻮد دﺳﺘﺮﺳﻲ دارد‪ .‬اﻟﮕﻮرﻳﺘﻤﻲ ﻛﺎرا اراﺋﻪ دﻫﻴﺪ ﻛﻪ ﺑﺎ اﺳﺘﻔﺎده از‬
‫ﺣﺎﻓﻈﻪ اﺿﺎﻓﻲ ‪ 1‬ﻣﺸﺨﺺ ﻛﻨﺪ آﻳﺎ در اﻳﻦ ﻟﻴﺴﺖ دور وﺟﻮد دارد ﻳﺎ ﺧﻴﺮ‪ .‬ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ ﻣﺸﺨﺺ ﻧﻴﺴﺖ و‬
‫ﻫﻤﭽﻨﻴﻦ اﻟﮕﻮرﻳﺘﻢ ﺷﻤﺎ ﻧﺒﺎﻳﺪ ﺳﺎﺧﺘﺎر ﻟﻴﺴﺖ را ﺑﻬﻢ ﺑﺰﻧﺪ ﻳﺎ ﻣﺤﺘﻮﻳﺎت ﺧﺎﻧﻪ ﻫﺎ را ﺗﻐﻴﻴﺮ دﻫﺪ‪.‬‬
‫‪3‬ـ ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﺗﻌﺪاد ‪BST‬ﻫﺎﻳﻲ ﻛﻪ ﻣﻲﺗﻮان ﺑﺎ ﻳﻚ آراﻳﻪ ‪n‬ﺗﺎﻳﻲ از اﻋﺪاد ﺳﺎﺧﺖ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ ﺗﻌﺪاد ﭘﺮاﻧﺘﺰﮔﺬاري ﻫﺎي ﻣﻌﺘﺒﺮ ﺑﺎ ‪n‬ﺟﻔﺖ‬
‫ﭘﺮاﻧﺘﺰ‪) .‬راﻫﻨﻤﺎﻳﻲ‪ :‬از ﺗﻌﺪاد درﺧﺖ ﻫﺎي دودوﻳﻲ ﻧﺎﻫﻤﺮﻳﺨﺖ ﺑﺎ ‪ n‬راس ﻛﻤﻚ ﺑﮕﻴﺮﻳﺪ(‬
‫‪4‬ـ ﻧﻮع ﺧﺎﺻﻲ از درﺧﺖ ﻫﺎي دودوﻳﻲ ﻛﻪ ﺗﺮﻛﻴﺐ ﻳﻚ ‪ BST‬و ﻳﻚ‪ Heap‬اﺳﺖ را درﺧﺖ ﻛﺎرﺗﺰﻳﻦ ﻣﻲﻧﺎﻣﻴﻢ‪ .‬در اﻳﻦ درﺧﺖ‪ ،‬ﻫﺮ‬
‫ﮔﺮه ‪ 2‬ﻣﻘﺪار ‪ Key‬و ‪ Value‬دارد‪.‬‬
‫‪Key (a‬ﻫﺎ ﺧﺎﺻﻴﺖ ﻳﻚ ‪ BST‬را دارﻧﺪ‪ .‬ﻳﻌﻨﻲ اﮔﺮ ﮔﺮهي ‪ u‬در زﻳﺮ درﺧﺖ ﭼﭗ ﮔﺮهي ‪ v‬ﺑﺎﺷﺪ دارﻳﻢ‬
‫‪.‬‬
‫ﺑﺮﻋﻜﺲ اﮔﺮ ﮔﺮهي ‪ u‬در زﻳﺮدرﺧﺖ راﺳﺖ ﮔﺮهي ‪ v‬ﺑﺎﺷﺪ دارﻳﻢ‬
‫‪Value (b‬ﻫﺎ ﺧﺎﺻﻴﺖ ﻳﻚ ‪ Heap‬را دارﻧﺪ‪ .‬ﻳﻌﻨﻲ اﮔﺮ ﮔﺮهي ‪ u‬ﻓﺮزﻧﺪ ﮔﺮهي ‪ v‬ﺑﺎﺷﺪ دارﻳﻢ‬
‫و‬
‫‪.‬‬
‫اﻟﻒ( ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﺑﺎ داﺷﺘﻦ ‪ n‬ﺟﻔﺖ ﻋﺪد )‪ (value ,key‬ﻫﻤﻮاره ﻣﻲﺗﻮان ﻳﻚ درﺧﺖ ﻛﺎرﺗﺰﻳﻦ ﻳﻜﺘﺎ ﺳﺎﺧﺖ‪) .‬راﻫﻨﻤﺎﻳﻲ‪:‬‬
‫ﺳﻌﻲ ﻛﻨﻴﺪ رﻳﺸﻪ را ﭘﻴﺪا ﻛﻨﻴﺪ و ﻣﺴﺎﻟﻪ را ﺑﻪ ﻃﻮر ﺑﺎزﮔﺸﺘﻲ ﺣﻞ ﻛﻨﻴﺪ(‬
‫ب( ﺑﺎ اﺳﺘﻔﺎده از راﺑﻄﻪي ﺑﺎزﮔﺸﺘﻲ ﻛﻪ در ﻗﺴﻤﺖ ﻗﺒﻞ ﭘﻴﺪا ﻛﺮدﻳﺪ‪ ،‬اﻟﮕﻮرﻳﺘﻤﻲ از ﻣﺮﺗﺒﻪي )‪ O(n2‬اراﺋﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎ ﮔﺮﻓﺘﻦ‬
‫ﻣﻘﺎدﻳﺮ )‪ (value, key‬درﺧﺖ ﻛﺎرﺗﺰﻳﻦ را ﺑﺴﺎزد‪.‬‬
‫ج( ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﻛﻪ اﮔﺮ ﻋﻨﺎﺻﺮ را ﺑﺮﺣﺴﺐ ﻣﻘﺪار ‪Key‬ﺷﺎن ﺑﻪ ﺷﻜﻞ ﺻﻌﻮدي ﻣﺮﺗﺐ ﻛﻨﻴﻢ‪ ،‬ﭘﺪر ﻫﺮ ﻋﻨﺼﺮ ﻣﺜﻞ ‪) v‬در ﺻﻮرت‬
‫وﺟﻮد( ﻳﻜﻲ از دو ﻋﻨﺼﺮ زﻳﺮ اﺳﺖ‪.‬‬
‫‪‬‬
‫اوﻟﻴﻦ ﻋﻨﺼﺮ در ﺳﻤﺖ ﭼﭗ ‪ v‬ﻛﻪ ﻣﻘﺪار ‪Key‬ﻟﺶ از آن ﻛﻤﺘﺮ اﺳﺖ‪ .‬‬
‫‪‬‬
‫اوﻟﻴﻦ ﻋﻨﺼﺮ در ﺳﻤﺖ راﺳﺖ ‪ v‬ﻛﻪ ﻣﻘﺪار ‪Key‬اش از آن ﻛﻤﺘﺮ اﺳﺖ‪ .‬‬
‫د( ﺛﺎﺑﺖ ﻛﻨﻴﺪ در ﺑﻴﻦ دو ﻣﻮرد ﮔﻔﺘﻪ ﺷﺪه در ﻗﺴﻤﺖ ج‪ ،‬ﭘﺪر ‪ v‬ﻋﻨﺼﺮي اﺳﺖ ﻛﻪ ﻣﻘﺪار ‪ Key‬آن ﺑﻴﺸﺘﺮ اﺳﺖ‪.‬‬
‫ه( ﺑﺎ اﺳﺘﻔﺎده از ﻗﺴﻤﺖ ج و د‪ ،‬اﻟﮕﻮرﺗﻴﻤﻲ از ﻣﺮﺗﺒﻪي )‪ O(n log n‬اراﺋﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎ ﮔﺮﻓﺘﻦ ﻣﻘﺎدﻳﺮ )‪ (value, key‬درﺧﺖ‬
‫ﻛﺎرﺗﺰﻳﻦ را ﺑﺴﺎزد‪.‬‬
‫‪5‬ـ زﺑﺎن ‪ A‬از ‪ n‬ﻛﻠﻤﻪ و زﺑﺎن ‪ B‬از ‪ m‬ﻛﻠﻤﻪ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ‪ .‬ﺣﺮوف ﺑﻪ ﻛﺎر رﻓﺘﻪ در ﻛﻠﻤﺎت اﻳﻦ دو زﺑﺎن از ﻣﺠﻤﻮﻋﻪ ﺣﺮوف اﻟﻔﺒﺎي‬
‫ﻓﺎرﺳﻲ اﺳﺖ‪ .‬ﺑﻨﺎﺑﺮاﻳﻦ ﺣﺪاﻛﺜﺮ ‪ 32‬ﺣﺮف دارﻳﻢ‪ .‬ﻣﻲداﻧﻴﻢ ﻃﻮل ﻫﺮ ﻛﻠﻤﻪ در ﻫﺮﻳﻚ از اﻳﻦ دو زﺑﺎن ﺣﺪاﻛﺜﺮ ‪ 100‬ﺣﺮف اﺳﺖ‪ .‬ﻣﻲﮔﻮﻳﻴﻢ‬
‫ﻛﻠﻤﻪ ‪ w‬در زﺑﺎن ‪ X‬ﻳﺎﻓﺖ ﻣﻲﺷﻮد اﮔﺮ و ﻓﻘﻂ اﮔﺮ ﻛﻠﻤﻪاي ﻣﺎﻧﻨﺪ ‪ S‬ﻣﺘﻌﻠﻖ ﺑﻪ ‪ X‬وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ﻛﻪ ‪ w‬ﭘﻴﺸﻮﻧﺪ ‪ S‬ﺑﺎﺷﺪ‪.‬‬
‫اراﺋﻪ دﻫﻴﺪ ﻛﻪ ﻫﻤﻪي ﻛﻠﻤﺎﺗﻲ از زﺑﺎن ‪ B‬را ﻛﻪ درون زﺑﺎن ‪ A‬ﻳﺎﻓﺖ ﻣﻲﺷﻮﻧﺪ‪ ،‬ﭼﺎپ ﻛﻨﺪ‪.‬‬
‫اﻟﮕﻮرﻳﺘﻤﻲ از‬
‫‪6‬ـ ‪ ،SegmentTree‬ﻳﻚ درﺧﺖ دو دوﻳﻲ ﻛﺎﻣﻞ رﻳﺸﻪدار اﺳﺖ ﻛﻪ ﺑﺮ روي ﻳﻚ آراﻳﻪ ‪n‬ﺗﺎﻳﻲ )ﻛﻪ ﺑﺮاي راﺣﺘﻲ ‪ n‬را ﺗﻮاﻧﻲ از ‪ 2‬ﻓﺮض‬
‫ﻣﻲﻛﻨﻴﻢ( ﺳﺎﺧﺘﻪ ﻣﻲﺷﻮد‪ .‬اﻳﻦ داده ﺳﺎﺧﺘﺎر ﻛﺎرﺑﺮدﻫﺎي ﺑﺴﻴﺎري در اﻟﮕﻮرﻳﺘﻢ دارد‪ .‬در اﻳﻦ ﺗﻤﺮﻳﻦ ﭼﻨﺪ ﺧﺎﺻﻴﺖ ﻣﻬﻢ از آن را اﺛﺒﺎت‬
‫ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫ﻫﺮ ﮔﺮه‪ Segment Tree‬ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﻳﻚ ﺑﺎزه ﺑﺮ روي آراﻳﻪ اوﻟﻴﻪ اﺳﺖ‪ .‬ﻓﺮض ﻛﻨﻴﺪ ‪ .n = 2h‬ﺑﺎزه ﻫﺎي ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﮔﺮه ﻫﺎ ﺑﻪ ﺻﻮرت‬
‫ﺑﺎزﮔﺸﺘﻲ ﺑﻪ ﺷﻜﻞ زﻳﺮ ﺗﻌﺮﻳﻒ ﻣﻲﺷﻮﻧﺪ‪:‬‬
‫‪ (a‬رﻳﺸﻪي درﺧﺖ ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺑﺎزه ‪ 0, 2‬اﺳﺖ‪.‬‬
‫‪ (b‬اﮔﺮ راﺳﻲ ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺑﺎزه ‪ ,‬ﺑﺎﺷﺪ‪ ،‬در ﺻﻮرﺗﻲ ﻛﻪ ﻃﻮل ﺑﺎزه از ﻳﻚ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ‪ ،‬ﺑﭽﻪ ﺳﻤﺖ ﭼﭗ آن ﻣﺘﻨﺎﻇﺮ ﺑﺎ‬
‫‪ ,‬و ﺑﭽﻪ ﺳﻤﺖ راﺳﺖ آن ﻣﺘﻨﺎﻇﺮ ﺑﺎ ﺑﺎزهي ‪ ,‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﺑﺎزهي‬
‫‪‬‬
‫اﻟﻒ( ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﺗﻌﺪاد ﻛﻞ ﮔﺮه ﻫﺎي درﺧﺖ از‬
‫‪‬‬
‫ب( ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﻫﺮ ﺑﺮگ دﻗﻴﻘﺎ ﺑﺎ ﻳﻚ ﺧﺎﻧﻪ از آراﻳﻪ اوﻟﻴﻪ ﺗﻨﺎﻇﺮ دارد‪.‬‬
‫‪‬‬
‫ج( ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﻫﺮ ﺑﺎزه ﻣﺎﻧﻨﺪ ‪ ,‬در آراﻳﻪ اوﻟﻴﻪ ﺑﻪ ﺻﻮرت ﻣﺠﻤﻮﻋﻪاي از ﮔﺮه ﻫﺎ ﻣﺎﻧﻨﺪ ‪ S‬ﻗﺎﺑﻞ ﺑﻴﺎن اﺳﺖ‪ ،‬ﺑﻪ ﻃﻮري ﻛﻪ‬
‫ﺑﺎزهﻫﺎي ﻫﺮ دو ﮔﺮه درون ‪ S‬ﻣﺴﺘﻘﻞ ﺑﺎﺷﻨﺪ و اﺟﺘﻤﺎع اﻳﻦ ﺑﺎزهﻫﺎ دﻗﻴﻘﺎ ﺑﺮاﺑﺮ ﺑﺎ ‪ ,‬ﺑﺎﺷﺪ‪.‬‬
‫اﺳﺖ و ارﺗﻔﺎع درﺧﺖ از‬
‫‪log‬‬
‫ اﺳﺖ‪.‬‬
‫‪7‬ـ داده ﺳﺎﺧﺘﺎري ﺑﺮاي ﻧﮕﻬﺪاري اﻋﺪاد ﻃﺮاﺣﻲ ﻛﻨﻴﺪ ﻛﻪ اﻋﻤﺎل زﻳﺮ را در زﻣﺎن ﺧﻮاﺳﺘﻪ ﺷﺪه اﻧﺠﺎم دﻫﺪ‪.‬‬
‫‪‬‬
‫ﺑﺎ اﺟﺰاي اﻳﻦ روﻳﻪ‪ ،‬ﺑﺮاي داده ﺳﺎﺧﺘﺎر ﺣﺎﻓﻈﻪ اﺧﺘﺼﺎص داده ﻣﻲﺷﻮد و ‪ n‬ﻋﻀﻮ ﺑﺎ ﻣﻘﺎدﻳﺮ اوﻟﻴﻪ ﺻﻔﺮ در آن‬
‫ﻗﺮار ﻣﻲﮔﻴﺮد‪ .‬ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺑﻌﺪ از اﻳﻦ ﻋﻤﻞ اﻧﺪازهي داده ﺳﺎﺧﺘﺎر ﺗﻐﻴﻴﺮ ﻧﻤﻲﻛﻨﺪ و ﻋﻀﻮ ﺟﺪﻳﺪي ﺑﻪ آن‬
‫اﺿﺎﻓﻪ ﻳﺎ ﻛﻢ ﻧﻤﻲﺷﻮد‪:‬‬
‫‪‬‬
‫‪,‬‬
‫‪ :‬ﺑﻪ ﻋﻀﻮ ‪I‬ام ﺑﻪ ﻣﻘﺪار ‪ k‬ﺗﺎ اﺿﺎﻓﻪ ﻛﻦ‪ .‬زﻣﺎن اﺟﺮا‪:‬‬
‫‪log‬‬
‫‪‬‬
‫‪,‬‬
‫‪ :‬ﻣﺠﻤﻮع اﻋﻀﺎي ‪i‬ام ﺗﺎ ‪j‬ام را ﭼﺎپ ﻛﻦ‪ .‬زﻣﺎن اﺟﺮا‪:‬‬
‫‪log‬‬
‫‬
‫)راﻫﻨﻤﺎﻳﻲ‪ :‬از ‪ SegmentTree‬ﻣﻌﺮﻓﻲ ﺷﺪه ﺗﻤﺮﻳﻦ ﻗﺒﻞ اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪ .‬درون ﻫﺮ ﮔﺮه ﻋﻼوه ﺑﺮ ﺑﺎزهاي ﻛﻪ ﺑﺎ آن ﻣﺘﻨﺎﻇﺮ‬
‫اﺳﺖ اﻃﻼﻋﺎت دﻳﮕﺮي ﻧﻴﺰ در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ(‬
‫‪ -8‬در ﺗﻤﺮﻳﻦ ﻗﺒﻞ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻋﻤﻞ ‪ add‬را ﻧﺪاﺷﺘﻴﻢ و ﻫﻤﭽﻨﻴﻦ ﻋﻤﻞ ‪ init‬ﺑﻪ اﻳﻦ ﺷﻜﻞ ﺗﻐﻴﻴﺮ ﻣﻲﻛﻨﺪ ﻛﻪ ﺑﻪ ﺟﺎي اﻳﻨﻜﻪ اﻋﺪاد‬
‫ﺑﺎ ﻣﻘﺪار اوﻟﻴﻪ ﺻﻔﺮ‪ ،‬ﻣﻘﺪاردﻫﻲ ﺷﻮﻧﺪ‪ ،‬ﻣﻘﺎدﻳﺮ آﻧﻬﺎ ﻣﺴﺘﻘﻴﻤﺎ از ورودي ﺧﻮاﻧﺪه ﻣﻲﺷﻮد‪ .‬ﻧﺸﺎن دﻫﻴﺪ ﻛﻪ ﻣﻲﺗﻮان ﻋﻤﻞ ‪ sum‬را در زﻣﺎن‬
‫)‪ O(1‬اﻧﺠﺎم داد‪.‬‬
‫‪ -9‬در ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ﻣﻌﻤﻮﻟﻲ ﺗﻌﺪاد ﻓﺮزﻧﺪان ﻫﺮ ﮔﺮه ﺑﺮاﺑﺮ ‪ 2‬اﺳﺖ‪ .‬ﻣﻲﺧﻮاﻫﻴﻢ ﺑﺮرﺳﻲ ﻛﻨﻴﻢ اﮔﺮ ﺑﻪ ﺟﺎي ‪ 2‬ﻓﺮزﻧﺪ ﻫﺮ ﮔﺮه ‪ d‬ﻓﺮزﻧﺪ‬
‫داﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﭼﻪ ﺗﺎﺛﻴﺮي در ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ اﻋﻤﺎل ﻫﺮم اﻳﺠﺎد ﻣﻲﻛﻨﺪ‪.‬‬
‫‪‬‬
‫اﻟﻒ( ﻧﺸﺎن دﻫﻴﺪ ﻛﻪ ﻋﻤﻞ ‪ insert‬در زﻣﺎن )‪ O(logdn‬اﻧﺠﺎم ﻣﻲﺷﻮد‪ .‬‬
‫‪‬‬
‫ب( ﻧﺸﺎن دﻫﻴﺪ ﻛﻪ ﻋﻤﻞ ‪ delete min‬در زﻣﺎن )‪ O(d*logdn‬اﻧﺠﺎم ﻣﻲﺷﻮد‪ .‬‬
‫‪‬‬
‫ج( ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻣﻲداﻧﻴﻢ ‪ n‬ﻋﻤﻞ ‪ insert‬دارﻳﻢ و ‪ m‬ﻋﻤﻞ ‪ ،delete‬ﻣﻘﺪار ‪ d‬را ﭼﻘﺪر اﻧﺘﺨﺎب ﻛﻨﻴﻢ ﺗﺎ در ﻣﺠﻤﻮع‬
‫ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ ﺑﻬﻴﻨﻪاي داﺷﺘﻪ ﺑﺎﺷﻴﻢ‪.‬‬
‫‪10‬ـ ‪k‬اﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ در ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ‪:‬‬
‫‪‬‬
‫‪‬‬
‫اﻟﻒ( در ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ‪ k‬اﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ را از‬
‫ب( آﻳﺎ در ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ در‬
‫‪log‬‬
‫ﭘﻴﺪا ﻛﻨﻴﺪ‪.‬‬
‫ﺑﮕﻮﻳﻴﺪ ﻛﻪ آﻳﺎ ‪ k‬اﻣﻴﻦ ﻋﻨﺼﺮ از ‪ x‬ﻛﻤﺘﺮ اﺳﺖ ﻳﺎ ﻧﻪ‪.‬‬
‫ﺗﻤﺮﻳﻨﺎت ﻛﺘﺎب‪:‬‬
‫‪4‬ـ‪2‬ـ‪2. 5‬‬
‫‪4‬ـ‪4 .3‬‬
‫‪4‬ـ‪7 .3‬‬
‫‪4‬ـ‪8 .5‬‬
‫‪4‬ـ‪7 .6‬‬
‫‪4‬ـ‪8 .6‬‬
‫‪) 2 .4‬راﻫﻨﻤﺎﻳﻲ‪ :‬از ‪ Segment Tree‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ(‬
‫‪8 .4‬‬
‫ﺗﻤﺮﻳﻨﺎت ﭘﻴﺸﻨﻬﺎدي‬
‫اﻳﻦ ﺗﻤﺮﻳﻦﻫﺎ در ﻛﻮﻳﻴﺰ ﻣﺮﺑﻮط ﺑﻪ اﻳﻦ ﺗﻤﺮﻳﻦ ﻧﺨﻮاﻫﺪ آﻣﺪ‪ ،‬اﻣﺎ ﺣﻞ ﻛﺮدن آﻧﻬﺎ ﺗﻮﺻﻴﻪ ﻣﻲﺷﻮد‪.‬‬
‫‪9 .4‬‬
‫‪4‬ـ‪3 .5‬‬
‫‪۴‬ـ‪٣ .٣‬‬
‫‪4‬ـ‪1 .4‬‬
‫‪4‬ـ‪19 .5‬‬