DS921-HW3.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ )‪(۴٠-٢۵۴‬‬
‫‪Data Structures and Fundamentals of Algorithms‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﻣﺪرس‪ :‬ﻣﺤﻤﺪ ﻗﺪﺳ‬
‫ﻣﻮﻋﺪ ارﺳﺎل‪١٣٩٢/٨/١٧ :‬‬
‫ﺗﻤﺮﯾﻦ ﺷﻤﺎرهی ‪٣‬‬
‫‪ .١‬ﻓﺮض ﮐﻨﯿﺪ دﻧﺒﺎﻟﻪ ‪ x١ , x٢ , x٣ , ...., xn‬داده ﺷﺪه اﺳﺖ‪ .‬ﻣ ﺧﻮاﻫﯿﻢ ﺑﻪ ﭘﺮﺳﺶﻫﺎﯾ ﻣﺎﻧﻨﺪ ﮐﻮﭼ ﺘﺮﯾﻦ ﻋﺪد ﺑﯿﻦ ‪،xi , xi+١ , ..., xj‬‬
‫ﺑﺮای ‪ i‬و ‪ j‬ﻫﺎی ﻣﺨﺘﻠﻒ ﭘﺎﺳ دﻫﯿﻢ‪.‬‬
‫)آ( دادهﺳﺎﺧﺘﺎری ﻃﺮاﺣ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎ ﺣﺎﻓﻈﻪ و ﭘﯿﺶﭘﺮدازش ) ‪ O(n٢‬ﺑﺘﻮاﻧﺪ ﺑﻪ ﻫﺮ ﭘﺮﺳﺶ در )‪ O(١‬ﭘﺎﺳ دﻫﺪ‪.‬‬
‫)ب( داده ﺳﺎﺧﺘﺎری ﻃﺮاﺣ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎ )‪ O(n‬ﺣﺎﻓﻈﻪ و ﭘﯿﺶﭘﺮدازﺷ ﻣﻨﺎﺳﺐ ﺑﺘﻮاﻧﺪ ﺑﻪ ﻫﺮ ﭘﺮﺳﺶ در )‪ O(lg n‬ﭘﺎﺳ‬
‫دﻫﺪ )ﺑﺮای ﮔﺮﻓﺘﻦ ﺑﺨﺸ از ﻧﻤﺮه ﻣ ﺗﻮاﻧﯿﺪ داده ﺳﺎﺧﺘﺎری ﺑﺎ ﺣﺎﻓﻈﻪ )‪ O(n lg n‬و زﻣﺎن ﭘﺎﺳ )‪ O(lg n‬ﻃﺮاﺣ‬
‫ﮐﻨﯿﺪ(‪.‬‬
‫)ج( دادهﺳﺎﺧﺘﺎری ﻃﺮاﺣ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎ ﺣﺎﻓﻈﻪ و ﭘﯿﺶﭘﺮدازش )‪ O(n lg n‬ﺑﺘﻮاﻧﺪ ﺑﻪ ﻫﺮ ﭘﺮﺳﺶ در )‪ O(١‬ﭘﺎﺳ دﻫﺪ‪.‬‬
‫‪ .٢‬داده ﺳﺎﺧﺘﺎر ”ﺻﻒ اوﻟﻮﯾﺖ ﻣﯿﺎﻧﻪ“ ‪ ١‬ﺷﺎﻣﻞ ‪ n‬ﻋﻨﺼﺮ ﻣﺠﺰاﺳﺖ ﮐﻪ اﻋﻤﺎل زﯾﺮ را ﻣ ﺗﻮان روی آن اﻧﺠﺎم داد‪:‬‬
‫• درج ﯾ‬
‫ﻋﻨﺼﺮ و ﺣﺬف ﻋﻨﺼﺮ ﻣﯿﺎﻧﻪ ‪ ،‬در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ در )‪.O(lg n‬‬
‫• ﺳﺎﺧﺖ ﯾ‬
‫‪ MPQ‬از ‪ n‬ﻋﻨﺼﺮ داده ﺷﺪه در زﻣﺎن )‪.O(n‬‬
‫ﺑﺎ اﺳﺘﻔﺎده از ﻫﺮم داده ﺳﺎﺧﺘﺎر ‪ MPQ‬را ﻃﺮاﺣ ﮐﻨﯿﺪ و ﻧﺤﻮهی اﻧﺠﺎم اﻋﻤﺎل ﻓﻮق را دﻗﯿﻘﺎً ﺗﻮﺿﯿ دﻫﯿﺪ و ﺗﺤﻠﯿﻞ ﻧﻤﺎﯾﯿﺪ‪.‬‬
‫‪ .٣‬ﯾ‬
‫دﻧﺒﺎﻟﻪ ﺟﺴﺖ و ﺟﻮ‪ ،‬ﺑﻪ دﻧﺒﺎﻟﻪای از اﻋﺪاد ﮔﻔﺘﻪ ﻣ ﺷﻮد ﮐﻪ ﻫﻨ ﺎم ﺟﺴﺖ و ﺟﻮی ﯾ‬
‫ﻋﺪد در د‪.‬د‪.‬ج ﺑﺎ ﺷﺮوع از‬
‫رﯾﺸﻪ و ﻧﻮﺷﺘﻦ اﻋﺪاد ﻣﺮﺑﻮط ﺑﻪ راسﻫﺎﯾ ﮐﻪ در ﻣﺴﯿﺮ ﺟﺴﺖ و ﺟﻮ ﻣ ﺑﯿﻨﯿﻢ ﺑﻪ دﺳﺖ ﻣ آﯾﺪ‪ .‬دﻧﺒﺎﻟﻪای از ‪ n‬ﻋﺪد ﻃﺒﯿﻌ‬
‫داده ﺷﺪه اﺳﺖ‪ ،‬اﻟ ﻮرﯾﺘﻤ از )‪ O(n‬اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﻣﺸﺨﺺ ﮐﻨﺪ آﯾﺎ اﯾﻦ دﻧﺒﺎﻟﻪ ﻣ ﺗﻮاﻧﺪ دﻧﺒﺎﻟﻪی ﺟﺴﺖ و ﺟﻮی ﻣﺮﺑﻮط‬
‫ﺑﻪ ﯾ‬
‫درﺧﺖ دﻟﺨﻮاه ﺑﺎﺷﺪ ﯾﺎ ﺧﯿﺮ‪.‬‬
‫د‪.‬د‪.‬ج ﻣﻌﻤﻮﻟ ﺑﺮای ﻫﺮ ﻋﻀﻮ ﺑﺘﻮاﻧﯿﻢ ﺑﻪ ﻓﺮزﻧﺪ ﭼﭗ‪ ،‬راﺳﺖ و ﭘﺪر در )‪ O(١‬دﺳﺘﺮﺳ‬
‫‪ .۴‬ﻓﺮض ﮐﻨﯿﺪ ﻣ ﺧﻮاﻫﯿﻢ در ﯾ‬
‫داﺷﺘﻪ ﺑﺎﺷﯿﻢ‪ .‬ﻣﺤﺪودﯾﺘ ﮐﻪ ﺑﺮای ﻣﺴﺎﻟﻪ دارﯾﻢ اﯾﻦ اﺳﺖ ﮐﻪ ﻫﺮ ﮔﺮه ﺗﻨﻬﺎ ﻣ ﺗﻮاﻧﺪ ﯾ‬
‫ﻣﻘﺪار )ﻣﻘﺪار اﺻﻠ آن ﮔﺮه( و‬
‫ﺗﻨﻬﺎ دو اﺷﺎرهﮔﺮ داﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬روﺷ ﺑﺮای ﭘﯿﺎدهﺳﺎزی اﯾﻦ درﺧﺖ ﺗﻮﺿﯿ دﻫﯿﺪ ﮐﻪ ﺷﺮاﯾﻂ ﮔﻔﺘﻪ ﺷﺪه را ﺑﺮآورده ﮐﻨﺪ و‬
‫ﻫﻤﭽﻨﯿﻦ ﺧﻮاص ﯾ‬
‫د‪.‬د‪.‬ج ﻣﻌﻤﻮﻟ را ﻫﻢ داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪ .۵‬اﻋﺪاد درون راسﻫﺎی ﯾ‬
‫درﺧﺖ دودوﯾ ﺟﺴﺖ و ﺟﻮ ﺑﻪ ﺗﺮﺗﯿﺐ ﻋﻤﻖ )در ﻫﺮ ﻋﻤﻖ از ﭼﭗ ﺑﻪ راﺳﺖ(‪ ،‬ﺑﺎ ﺷﺮوع از‬
‫ﺑﯿﺸﺘﺮﯾﻦ ﻋﻤﻖ ﭘﺸﺖ ﺳﺮﻫﻢ در ﯾ‬
‫داﺷﺘﻦ ﻟﯿﺴﺖ ﯾ‬
‫ﻟﯿﺴﺖ ﻧﻮﺷﺘﻪ ﺷﺪهاﻧﺪ )ﻫﻤﺎن ﻃﻮر ﮐﻪ در ﺷ ﻞ ﻧﺸﺎن داده ﺷﺪه(‪ .‬آﯾﺎ ﻓﻘﻂ ﺑﺎ در اﺧﺘﯿﺎر‬
‫درﺧﺖ دودوﯾ ﺟﺴﺖ و ﺟﻮ ﻣ ﺗﻮان آن درﺧﺖ را ﺑﻪ ﺻﻮرت ﯾ ﺘﺎ ﺑﺎزﺳﺎزی ﮐﺮد؟ ﺟﻮاب ﺧﻮد را‬
‫اﺛﺒﺎت ﮐﻨﯿﺪ‪.‬‬
‫)‪Median Proiority Queue (MPQ‬‬
‫‪١‬‬
‫‪١‬‬
‫‪) .۶‬اﺧﺘﯿﺎری( ﯾ‬
‫ﻫﺮم ﮐﻤﯿﻨﻪ ﺑﺎ ‪ n‬ﻋﻨﺼﺮ ﻣﺘﻤﺎﯾﺰ از اﻋﺪاد و ﯾ‬
‫ﮐﻪ ﻣﺸﺨﺺ ﮐﻨﺪ آﯾﺎ ‪ k‬اﻣﯿﻦ ﮐﻮﭼ‬
‫ﻋﺪد ‪ x‬داده ﺷﺪه اﺳﺖ‪ .‬اﻟ ﻮرﯾﺘﻤ از )‪ O(k‬اراﺋﻪ دﻫﯿﺪ‬
‫ﺗﺮﯾﻦ ﻋﻨﺼﺮ ﻣﻮﺟﻮد در ﻫﺮم از ‪ x‬ﮐﻮﭼ ﺘﺮ اﺳﺖ ﯾﺎ ﺧﯿﺮ )ﻻزم ﻧﯿﺴﺖ ﭘﺎﺳ اﯾﻦ‬
‫ﺗﻤﺮﯾﻦ را ﺗﺤﻮﯾﻞ دﻫﯿﺪ(‪.‬‬
‫‪ .٧‬اﻟﻒ( داده ﺳﺎﺧﺘﺎر درﺧﺖ دودوﯾ ﺟﺴﺖ و ﺟﻮ را ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ ﮐﻪ دﺳﺘﻮرات درج و ﺟﺴﺖ و ﺟﻮ را ﭘﺸﺘﯿﺒﺎﻧ ﮐﻨﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ‪ :‬در ﺧﻂ اول ورودی ﻋﺪد ‪ t‬ﺗﻌﺪاد دﺳﺘﻮراﻟﻌﻤﻞﻫﺎﯾ ﮐﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ داده ﺧﻮاﻫﺪ ﺷﺪ ﻣ آﯾﺪ‪ .‬در‬
‫‪ t‬ﺧﻂ ﺑﻌﺪی‪ ،‬در ﻫﺮ ﺧﻂ ﯾ‬
‫از دﺳﺘﻮرات زﯾﺮ ﺧﻮاﻫﺪ آﻣﺪ‪.‬‬
‫• )‪ :add(x‬ﻋﺪد ‪ x‬را در درﺧﺖ درج ﻣ ﮐﻨﺪ‪.‬‬
‫• )‪: search(x‬ﻣﺸﺨﺺ ﻣ ﮐﻨﺪ ﮐﻪ آﯾﺎ ﻋﺪد ‪ x‬در درﺧﺖ وﺟﻮد دارد ﯾﺎ ﺧﯿﺮ‪.‬‬
‫اﯾﻦ داده ﺳﺎﺧﺘﺎر ﺑﺎﯾﺪ اﻋﻤﺎل ﺑﺎﻻ را در )‪ O(h‬ﮐﻪ ‪ h‬ارﺗﻔﺎع درﺧﺖ اﺳﺖ‪ ،‬اﺟﺮا ﮐﻨﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‪:‬‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪No‬‬
‫‪6‬‬
‫‪Yes‬‬
‫)‪add(2‬‬
‫)‪add(5‬‬
‫)‪add(-3‬‬
‫)‪search(0‬‬
‫)‪add(0‬‬
‫)‪search(2‬‬
‫ب( داده ﺳﺎﺧﺘﺎری ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ ﮐﻪ ﻋﻼوه ﺑﺮ اﻋﻤﺎل ﮔﻔﺘﻪ ﺷﺪه در ﻗﺴﻤﺖ )اﻟﻒ( اﻋﻤﺎل زﯾﺮ را ﻧﯿﺰ ﭘﺸﺘﯿﺒﺎﻧ ﮐﻨﺪ‪:‬‬
‫• )‪: get(k‬ﻋﻨﺼﺮ ‪ k‬ام را در )‪ O(h‬ﺑﺮ ﻣ ﮔﺮداﻧﺪ‪.‬‬
‫• )‪: count(x, y‬ﺑﺎ داﺷﺘﻦ ﺑﺎزهی ]‪ [x, y‬ﺗﻌﺪاد اﻋﺪادی ﮐﻪ در اﯾﻦ ﺑﺎزه ﻫﺴﺘﻨﺪ را در )‪ O(h‬ﺑﺮﻣ ﮔﺮداﻧﺪ‪.‬‬
‫‪٢‬‬
‫• )‪: print(x, y‬ﺑﺎ داﺷﺘﻦ ﺑﺎزهی ]‪ [x, y‬ﺗﻤﺎم ﻋﻨﺎﺻﺮی ﮐﻪ در اﯾﻦ ﺑﺎزه ﻫﺴﺘﻨﺪ را در )‪ O(k + h‬ﮐﻪ ‪ k‬ﺳﺎﯾﺰ ﺧﺮوﺟ‬
‫اﺳﺖ‪ ،‬ﺑﻪ ﺗﺮﺗﯿﺐ ﺻﻌﻮدی ﭼﺎپ ﻣ ﮐﻨﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ‪ :‬در ﺧﻂ اول ورودی ﻋﺪد ‪ t‬ﺗﻌﺪاد دﺳﺘﻮرﻫﺎﯾ ﮐﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪ داده ﺧﻮاﻫﺪ ﺷﺪ ﻣ آﯾﺪ‪ .‬در ‪ t‬ﺧﻂ ﺑﻌﺪی‬
‫در ﻫﺮ ﺧﻂ ﯾ‬
‫از دﺳﺘﻮرات ﺑﺎﻻ ﻣ آﯾﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‪:‬‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪2‬‬
‫‪10‬‬
‫‪2‬‬
‫)‪add(2‬‬
‫‪-5 2 3‬‬
‫)‪add(-5‬‬
‫‪No‬‬
‫)‪add(3‬‬
‫)‪add(7‬‬
‫)‪get(2‬‬
‫)‪add(6‬‬
‫)‪count(1,5‬‬
‫)‪add(8‬‬
‫)‪print(-5,5‬‬
‫)‪search(1‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‪:‬‬
‫‪١ ⩽ t ⩽ ١٠۵‬‬
‫ﺗﻤﺎم اﻋﺪاد ورودی اﻋﺪاد ﺻﺤﯿ در ﺑﺎزهی ] ‪ [−١٠٩ , ١٠٩‬ﻫﺴﺘﻨﺪ‪.‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﺗﻌﺪاد ﺧﺮوﺟ ﻫﺎﯾ ﮐﻪ ﯾ‬
‫ﺑﺮﻧﺎﻣﻪ ﭼﺎپ ﻣ ﮐﻨﺪ از ‪ ۵ ∗ ١٠۶‬ﺑﯿﺸﺘﺮ ﻧﺨﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﻣ ﺗﻮاﻧﯿﺪ ﻓﺮض ﮐﻨﯿﺪ‪ ،‬در ﺻﻮرﺗ ﮐﻪ دﺳﺘﻮر درج را ﻣﻄﺎﺑﻖ ﺑﺎ آﻧﭽﻪ در ﮐﻼس ﺗﻮﺿﯿ داده ﺷﺪه اﺳﺖ ﭘﯿﺎدهﺳﺎزی ﮐﻨﯿﺪ‪،‬‬
‫ارﺗﻔﺎع درﺧﺖ از )‪ O(lg n‬ﻣ ﻣﺎﻧﺪ‪.‬‬
‫‪٣‬‬