اﻟ ﻮرﯾﺘﻢﻫﺎی ﭘﯿﺸﺮﻓﺘﻪ ﻧﯿﻢﺳﺎل اول ٩١-٩٠ ﻣﺪرس :ﺣﻤﯿﺪ ﺿﺮاﺑ زاده داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﺗﻤﺮﯾﻦ اول زﻣﺎن ﺗﺤﻮﯾﻞ ١٧ :آﺑﺎن ﻣﺴﺌﻠﻪی .١ﻣﺠﻤﻮﻋﻪﻫﺎ ] ٧ﻧﻤﺮه[ ﻣﺠﻤﻮﻋﻪای از nزﯾﺮﻣﺠﻤﻮﻋﻪی } S1 , S2 , . . . , Sn ⊆ {1, . . . , nداده ﺷﺪه اﺳﺖ .ﻣ ﺧﻮاﻫﯿﻢ ﺑﺒﯿﻨﯿﻢ ﮐﻪ آﯾﺎ دو زﯾﺮﻣﺠﻤﻮﻋﻪی Siو (i ̸= j) Sjوﺟﻮد دارﻧﺪ ﻃﻮری ﮐﻪ .Si ⊆ Sjﻧﺸﺎن دﻫﯿﺪ اﯾﻦ ﻣﺴﺌﻠﻪ در زﻣﺎن ) ) O(n2.81ﯾﺎ ) (O(n2.376ﻗﺎﺑﻞ ﺣﻞ اﺳﺖ. ﻣﺜﺎل :اﮔﺮ } ،S1 = {1, 2, 4}, S2 = {2, 3}, S3 = {2, 4, 5}, S4 = {1, 3, 4, 5}, S5 = {1, 4آنﮔﺎه ﺟﻮاب ﻣﺴﺌﻠﻪ ﺑﻠ ﺧﻮاﻫﺪ ﺑﻮد ،زﯾﺮا .S5 ⊆ S1 ﻣﺴﺌﻠﻪی .٢ﻫﺮم ﻓﯿﺒﻮﻧﺎﭼ ] ١٢ﻧﻤﺮه[ ﻓﺮض ﮐﻨﯿﺪ اﻟ ﻮرﯾﺘﻢ Fredmanو Tarjanرا ﺑﻪ ﺷ ﻠ ﺗﻐﯿﯿﺮ دادهاﯾﻢ ﮐﻪ از ﯾ ﮔﺮهی ﻏﯿﺮرﯾﺸﻪ ﺑﻪ ﺟﺎی ﯾ ﻓﺮزﻧﺪ ،ﺑﺘﻮان ﺣﺪاﮐﺜﺮ دو ﻓﺮزﻧﺪ را ﻗﻄﻊ ﮐﺮد .ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﻫﺮ درﺧﺖ nرأﺳ ﮐﻪ ﺗﻮﺳﻂ اﯾﻦ اﻟ ﻮرﯾﺘﻢ ﺳﺎﺧﺘﻪ ﺷﻮد ،ﺣﺪاﮐﺜﺮ درﺟﻪی ) O(log nدارد) .ﻧﻮﺷﺘﻦ ﺷﺒﻪ ﮐﺪ ﻻزم ﻧﯿﺴﺖ .راﻫﻨﻤﺎﯾ :راﺑﻄﻪی ﺑﺎزﮔﺸﺘ fi ⩾ 2fi−cﭘﺎﺳﺨ ﺑﻪ ﺷ ﻞ ) fi = Ω(2i/cدارد(. ﻣﺴﺌﻠﻪی .٣ﭘﺸﺘﻪ ] ٢٢ﻧﻤﺮه[ ﻫﻤﺎنﻃﻮر ﮐﻪ از درس ﺳﺎﺧﺘﻤﺎن دادهﻫﺎ ﺑﻪ ﺧﺎﻃﺮ دارﯾﺪ ،دو ﭘﯿﺎدهﺳﺎزی ﻣﻌﻤﻮل ﺑﺮای دادهﺳﺎﺧﺘﺎر ﭘﺸﺘﻪ وﺟﻮد دارد :آراﯾﻪ و ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی. زﻣﺎن ﺑﻪروزرﺳﺎﻧ در ﻫﺮدوی اﯾﻦ ﭘﯿﺎدهﺳﺎزیﻫﺎ ) O(1اﺳﺖ ،اﻣﺎ از ﻧﻈﺮ ﻓﻀﺎی اﺷﻐﺎلﺷﺪه اﯾﻦ دو روش ﻣﺸ ﻼﺗ دارﻧﺪ .در ﭘﯿﺎدهﺳﺎزی ﺑﻪ روش آراﯾﻪ زﻣﺎﻧ ﮐﻪ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ ﭘﺸﺘﻪ ،n ،از اﻧﺪازهی آراﯾﻪ ﺑﯿﺶﺗﺮ ﺷﻮد ،ﺑﺎﯾﺪ آراﯾﻪ را از ﻧﻮ ﺑﺴﺎزﯾﻢ .ﺑﻨﺎﺑﺮاﯾﻦ در اﯾﻦ روش ﻣﻌﻤﻮﻻ ﻓﻀﺎﯾ ﺑﯿﺶﺗﺮ از ﺣﺪ ﻻزم اﺳﺘﻔﺎده ﻣ ﺷﻮد .در ﭘﯿﺎدهﺳﺎزی ﭘﺸﺘﻪ ﺑﻪ روش ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی ،ﺑﺮای ﻫﺮ ﻋﻨﺼﺮ ﯾ اﺷﺎرهﮔﺮ اﺿﺎﻓ ﻫﻢ ﻻزم اﺳﺖ ﮐﻪ ﺑﺎﻋﺚ اﻓﺰاﯾﺶ ﻓﻀﺎ ﺑﻪ اﻧﺪازهی ) Θ(nﻣ ﺷﻮد. در اﯾﻦ ﺗﻤﺮﯾﻦ روﺷ را ﭘﯿﺶﻧﻬﺎد ﻣ ﮐﻨﯿﻢ ﮐﻪ ﺣﺎﻓﻈﻪی اﺿﺎﻓ ﻣﻮردﻧﯿﺎز آن ﺑﺴﯿﺎر ﮐﻢﺗﺮ ،ﯾﻌﻨ ) O(log nاﺳﺖ .در اﯾﻦ روش ﯾ ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی از آراﯾﻪﻫﺎ ﺑﻪ ﺻﻮرت ⟩ ⟨A1 , A2 , . . .ﻧ ﻪداری ﻣ ﮐﻨﯿﻢ ﮐﻪ در آن اﻧﺪازهی آراﯾﻪی Ajدﻗﯿﻘﺎً ﺑﺮاﺑﺮ jاﺳﺖ .ﻫﻨ ﺎم اﻓﺰودن ﻋﻨﺎﺻﺮ ﺑﻪ ﭘﺸﺘﻪ ،اﺑﺘﺪا A1ﭘﺮ ﻣ ﺷﻮد ،ﺳﭙﺲ ،A2ﺳﭙﺲ A3و اﻟ آﺧﺮ .در اﯾﻦ دادهﺳﺎﺧﺘﺎر ،وﻗﺘ ﯾ آراﯾﻪ ﺧﺎﻟ ﻣ ﺷﻮد ،ﻟﺰوﻣﺎً دور اﻧﺪاﺧﺘﻪ ﻧﻤ ﺷﻮد .اﮔﺮ Akآﺧﺮﯾﻦ آراﯾﻪی ﻏﯿﺮﺧﺎﻟ ﭘﺸﺘﻪ ﺑﺎﺷﺪ ،ﻣﺎ Ak+1را ﮐﻪ ﻗﺒﻼ ﺳﺎﺧﺘﻪ ﺷﺪه و اﮐﻨﻮن ﺧﺎﻟ ﺷﺪه ﻧ ﻪ ﻣ دارﯾﻢ ،اﻣﺎ آراﯾﻪﻫﺎی Ak+3 ،Ak+2و ...را دور ﻣ اﻧﺪازﯾﻢ .ﺟﺰﺋﯿﺎت دادهﺳﺎﺧﺘﺎر در ﺷﺒﻪﮐﺪ زﯾﺮ آﻣﺪه اﺳﺖ: initialize(): 1: i = k = l = 0 push(x): 2: if i < k then 3: Ak [i + 1] = x, i = i + 1 4: else 5: if Ak+1 does not exists then 6: create a new array Ak+1 of size k + 1 Ak+1 [1] = x, i = 1, k = k + 1 ١ 7: pop(): 8: if i > 1 then 9: i=i−1 10: else 11: if Ak+1 exists then 12: destroy Ak+1 i=k−1 k =k−1 13: 14: √ اﻟﻒ( ] ۵ﻧﻤﺮه[ ﻧﺸﺎن دﻫﯿﺪ ﻓﻀﺎی ﻻزم ﺑﺮای اﯾﻦ دادهﺳﺎﺧﺘﺎر ﺣﺪاﮐﺜﺮ ) n + O( nاﺳﺖ ،ﮐﻪ nﺗﻌﺪاد اﻋﻀﺎی ﺟﺎری ﭘﺸﺘﻪ را ﻧﺸﺎن ﻣ دﻫﺪ) .راﻫﻨﻤﺎﯾ (.1 + 2 + · · · + k = Θ(k 2 ) : ب( ] ٢ﻧﻤﺮه[ در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ ،ﻫﺰﯾﻨﻪی pushو popﭼﻘﺪر اﺳﺖ؟ ﻓﺮض ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪی ﺳﺎﺧﺖ و از ﺑﯿﻦ ﺑﺮدن ﯾ jاز ﻣﺮﺗﺒﻪی ) Θ(jاﺳﺖ. آراﯾﻪ ﺑﺎ اﻧﺪازهی ج( ] ١٠ﻧﻤﺮه[ ﺛﺎﺑﺖ ﮐﻨﯿﺪ ﻫﺰﯾﻨﻪی ﺳﺮﺷ ﻨ pushو popاز ﻣﺮﺗﺒﻪی ) O(1اﺳﺖ .از ﺗﺎﺑﻊ ﭘﺘﺎﻧﺴﯿﻞ زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ: i اﮔﺮ Ak+1وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ، اﮔﺮ Ak+1وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪk − i . { =Φ د( ] ۵ﻧﻤﺮه[ ﺑﺎ اراﺋﻪی ﯾ دﻧﺒﺎﻟﻪ از ) O(nﻋﻤﻠﯿﺎت ﭘﺸﺘﻪ ﻧﺸﺎن دﻫﯿﺪ ﮐﻪ اﮔﺮ ﺧﻄﻮط ١١و ١٢را ﺑﺎ ﺧﻂ زﯾﺮ ﺟﺎﯾ ﺰﯾﻦ ﮐﻨﯿﻢ، دﯾ ﺮ ﻫﺰﯾﻨﻪی ﺳﺮﺷ ﻨ pushو popاز ﻣﺮﺗﺒﻪی ) O(1ﻧﯿﺴﺖ) .ﺑﺎ اﯾﻦ ﺗﻐﯿﯿﺮ ﻣﺎ ﻋﻤﻼ ﯾ آراﯾﻪ را ﺑﻪ ﻣﺤﺾ ﺧﺎﻟ ﺷﺪن از ﺑﯿﻦ ﻣ ﺑﺮﯾﻢ(. destroy Ak ﻣﺴﺌﻠﻪی .۴ﻣﻌﻤﺎی ﻧﺠﯿﺐزادﮔﺎن 11′ : ] ١٢ﻧﻤﺮه[ ﺷﻤﺎ ﺑﻪ ﺟﺰﯾﺮهای رﺳﯿﺪهاﯾﺪ ﮐﻪ ﺳﺎﮐﻨﺎﻧﺶ ﺑﻪ ﺳﻪ ﮔﺮوه »ﻧﺠﯿﺐزادﮔﺎن« ﮐﻪ ﻫﻤﻮاره راﺳﺘ ﻮ ﻫﺴﺘﻨﺪ» ،ﻓﺮوﻣﺎﯾ ﺎن« ﮐﻪ ﻫﻤﻮاره دروغ ﻣ ﮔﻮﯾﻨﺪ، و »ﺟﺎﺳﻮﺳﺎن« ﮐﻪ ﺑﺮﺧ ﻣﻮاﻗﻊ راﺳﺖ و ﺑﺮﺧ ﻣﻮاﻗﻊ دروغ ﻣ ﮔﻮﯾﻨﺪ ،ﺗﻘﺴﯿﻢ ﻣ ﺷﻮﻧﺪ .ﻓﺮض ﮐﻨﯿﺪ ﺟﻤﻌﯿﺖ اﯾﻦ ﺟﺰﯾﺮه nﻧﻔﺮ ﺑﺎﺷﺪ ﮐﻪ ٩٠%آﻧﻬﺎ ﻧﺠﯿﺐزاده ،و ١٠%ﺑﻘﯿﻪ ﻓﺮوﻣﺎﯾﻪ ﯾﺎ ﺟﺎﺳﻮس ﻫﺴﺘﻨﺪ .ﺷﻤﺎ ﺑﺎﯾﺪ اﻓﺮاد ﺧﻮب و ﺑﺪ را از ﻫﻢ ﺟﺪا ﮐﻨﯿﺪ ،ﯾﻌﻨ ﻣﺸﺨﺺ ﮐﻨﯿﺪ ﻫﺮ ﻓﺮد در ﮐﺪام ﮔﺮوه ﻗﺮار ﻣ ﮔﯿﺮد .ﺑﺮای اﯾﻦ ﮐﺎر ﺷﻤﺎ ﻓﻘﻂ ﻣ ﺗﻮاﻧﯿﺪ از ﻫﺮ ﻓﺮد Aﺳﺆالﻫﺎﯾ ﺑﻪ ﺷ ﻞ »آﯾﺎ ﻓﺮد Bﯾ ﻧﺠﯿﺐزاده/ﻓﺮوﻣﺎﯾﻪ/ﺟﺎﺳﻮس اﺳﺖ؟« ﺑﭙﺮﺳﯿﺪ .اﻓﺮاد ﺟﺰﯾﺮه ﯾ دﯾ ﺮ را ﻣ ﺷﻨﺎﺳﻨﺪ .واﺿﺢ اﺳﺖ ﮐﻪ اﮔﺮ ﯾ ﻧﺠﯿﺐزاده را ﺷﻨﺎﺳﺎﯾ ﮐﻨﯿﺪ ،ﺑﺎ ﭘﺮﺳﯿﺪن nﺳﺆال اﺿﺎﻓ ﻣﺴﺌﻠﻪ ﺣﻞ ﻣ ﺷﻮد. اﻟﻒ( ] ٢ﻧﻤﺮه[ اﻟ ﻮرﯾﺘﻢ ﻣﻮﻧﺖ ﮐﺎرﻟﻮی )ﺧﯿﻠ ( ﮐﺎراﯾ اراﺋﻪ ﮐﻨﯿﺪ ﮐﻪ ﯾ ﮐﻨﯿﺪ) .راﻫﻨﻤﺎﯾ :اﯾﻦ ﻗﺴﻤﺖ ﺳﺆال ﺑﺴﯿﺎر ﺳﺎده اﺳﺖ!( ﻧﺠﯿﺐزاده را ﺷﻨﺎﺳﺎﯾ ﮐﻨﺪ .اﺣﺘﻤﺎل ﺧﻄﺎ را ﻣﺸﺨﺺ ب( ] ١٠ﻧﻤﺮه[ اﻟ ﻮرﯾﺘﻢ ﻻسوﮔﺎﺳ اراﺋﻪ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎ ﭘﺮﺳﯿﺪن ﺑﻪ ﻃﻮر ﻣﺘﻮﺳﻂ ) O(nﺳﺆال ،ﯾ ﻧﺠﯿﺐزاده را ﺷﻨﺎﺳﺎﯾ ﮐﻨﺪ .ﺿﺮﯾﺐ ﺛﺎﺑﺖ در اُی ﺑﺰرگ را ﺗﺤﻠﯿﻞ ﮐﻨﯿﺪ و آن را ﺑﻪ ﮐﻤﺘﺮ از ٠/۵ﺑﺮﺳﺎﻧﯿﺪ) .راﻫﻨﻤﺎﯾ :از اﻟ ﻮرﯾﺘﻢ ﻗﺴﻤﺖ )اﻟﻒ( اﺳﺘﻔﺎده ﮐﻨﯿﺪ .ﭼ ﻮﻧﻪ ﻣ ﺗﻮاﻧﯿﺪ ﺑﺎ ﭘﺮﺳﯿﺪن ) O(nﺳﺆال ،ﻣﻄﻤﺌﻦ ﺷﻮﯾﺪ ﮐﻪ ﯾ ﻓﺮد ﺧﺎص ﻧﺠﯿﺐزاده اﺳﺖ؟( ]ﻧ ﺘﻪ :ﺑﺮای اﯾﻦ ﻣﺴﺌﻠﻪ ﯾ اﻟ ﻮرﯾﺘﻢ ﻗﻄﻌ ﺑﺎ ) O(nﺳﺆال وﺟﻮد دارد ،اﻣﺎ اﻟ ﻮرﯾﺘﻢ ﻣﺬﮐﻮر ﭘﯿﭽﯿﺪهﺗﺮ و ﺿﺮﯾﺐ ﺛﺎﺑﺖ آن ﺑﺰرگﺗﺮ اﺳﺖ[. ﻣﺴﺌﻠﻪی .۵ﯾ رﯾﺨﺘ درﺧﺖﻫﺎ ] ١۵ﻧﻤﺮه[ در اﯾﻦ ﻣﺴﺌﻠﻪ ﻣ ﺧﻮاﻫﯿﻢ ﺗﻌﯿﯿﻦ ﮐﻨﯿﻢ ﮐﻪ آﯾﺎ دو درﺧﺖ T1و T2ﯾ رﯾﺨﺖ ﻫﺴﺘﻨﺪ ﯾﺎ ﺧﯿﺮ .ﯾ رﯾﺨﺘ دو درﺧﺖ ﺑﻪ اﯾﻦ ﻣﻌﻨﺎ اﺳﺖ ﮐﻪ ﻣ ﺗﻮان ﺑﺎ ﺗﻐﯿﯿﺮ ﺗﺮﺗﯿﺐ ﻓﺮزﻧﺪان ﮔﺮهﻫﺎ ،دو درﺧﺖ را ﺷﺒﯿﻪ ﺑﻪ ﻫﻢ ﮐﺮد .ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ،دو درﺧﺖ زﯾﺮ ﯾ رﯾﺨﺖ ﻫﺴﺘﻨﺪ: ٢ اﻟﻒ( ] ۵ﻧﻤﺮه[ اﺑﺘﺪا ﻣﺴﺌﻠﻪی ﺗﻌﯿﯿﻦ ﯾ ﺴﺎن ﺑﻮدن دو ﻟﯿﺴﺖ ﺑﺎ ﺗﻐﯿﯿﺮ ﺗﺮﺗﯿﺐ ﻋﻨﺎﺻﺮ آنﻫﺎ را ﺣﻞ ﮐﻨﯿﺪ )ﻣﺜﻼ دو ﻟﯿﺴﺖ ⟩ ⟨3, 5, 9, 3, 4و ⟩ ⟨5, 4, 3, 3, 9ﯾ ﺴﺎن ﻫﺴﺘﻨﺪ( .ﺑﻪﻃﻮر ﺧﺎص ،اﻟ ﻮرﯾﺘﻢ ﺗﺼﺎدﻓ زﯾﺮ را در ﻧﻈﺮ ﺑ ﯿﺮﯾﺪ :اﺑﺘﺪا ﯾ ﻋﺪد اول p > nرا اﻧﺘﺨﺎب ﮐﻨﯿﺪ .ﺑﺮای ﯾ ﻟﯿﺴﺖ ⟩ L = ⟨a1 , . . . , anاز اﻋﺪاد ﺻﺤﯿﺢ در ﺑﺎزهی }) {0, . . . , p − 1ﺑﺎ اﻣ ﺎن ﺗ ﺮار اﻋﺪاد در ﻟﯿﺴﺖ(، ﺗﺎﺑﻊ ) Fx (Lرا ﺑﻪ ﺻﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﮐﻨﯿﺪ: mod p. ) Fx (L) = (x − a1 )(x − a2 ) · · · (x − an ﺑﺮای دو ﻟﯿﺴﺖ L1و L2ﺑﺎ اﻧﺪازهی nاز اﻋﺪاد } ،{0, . . . , p − 1ﯾ ﻋﺪد ﺗﺼﺎدﻓ xاز ﻣﺠﻤﻮﻋﻪی } {0, . . . , p − 1اﻧﺘﺨﺎب ﮐﻨﯿﺪ .ﺛﺎﺑﺖ ﮐﻨﯿﺪ اﮔﺮ L1و L2ﺑﺎ ﺗﻐﯿﯿﺮ ﺗﺮﺗﯿﺐ ﯾ ﺴﺎن ﻧﺒﺎﺷﻨﺪ ،اﺣﺘﻤﺎل اﯾﻦﮐﻪ ) Fx (L1 ) = Fx (L2ﺣﺪاﮐﺜﺮ (n − 1)/p اﺳﺖ. ب( ] ١٠ﻧﻤﺮه[ اﮐﻨﻮن ﯾ اﻟ ﻮرﯾﺘﻢ ﻣﻮﻧﺖ ﮐﺎرﻟﻮ ﺑﺎ زﻣﺎن اﺟﺮای ﺧﻄ ﻃﺮاﺣ و ﺗﺤﻠﯿﻞ ﮐﻨﯿﺪ ﮐﻪ ﺗﻌﯿﯿﻦ ﮐﻨﺪ آﯾﺎ دو درﺧﺖ داده ﺷﺪه ﯾ رﯾﺨﺖ ﻫﺴﺘﻨﺪ ﯾﺎ ﺧﯿﺮ .اﻟ ﻮرﯾﺘﻢ ﺷﻤﺎ ﺑﺎﯾﺪ ﺣﺪاﮐﺜﺮ اﺣﺘﻤﺎل ﺧﻄﺎی 1/nداﺷﺘﻪ ﺑﺎﺷﺪ .ﻣﺤﺎﺳﺒﺎت روی اﻋﺪاد ﺑﺎ ﺗﻌﺪاد ﺑﯿﺖ ) O(log nدر زﻣﺎن ﺛﺎﺑﺖ اﻧﺠﺎم ﻣ ﭘﺬﯾﺮد) .راﻫﻨﻤﺎﯾ :ﻗﺴﻤﺖ )اﻟﻒ( را ﺑﻪ روش ﭘﺎﯾﯿﻦ ﺑﻪ ﺑﺎﻻ روی درﺧﺖﻫﺎ اﺟﺮا ﮐﻨﯿﺪ(. ﻣﺴﺌﻠﻪی k .۶ﮐﻮﭼ ﺘﺮﯾﻦ اﻋﺪاد ] ٢٠ﻧﻤﺮه[ ﺗﻌﺪاد nآراﯾﻪی ﻣﺮﺗﺐ ،ﮐﻪ ﻫﺮﮐﺪام دارای nﻋﻨﺼﺮ ﺑﺎ ﺗﺮﺗﯿﺐ ﺻﻌﻮدی اﺳﺖ ،داده ﺷﺪه اﺳﺖ .ﺑﻪ ازای ﯾ ﻣﻘﺪار kدادهﺷﺪه ،ﻣ ﺧﻮاﻫﯿﻢ k ﻋﻨﺼﺮ ﮐﻤﯿﻨﻪ در ﺑﯿﻦ اﯾﻦ n2ﻋﻨﺼﺮ را ﭘﯿﺪا ﮐﻨﯿﻢ .ﻻزم ﻧﯿﺴﺖ اﯾﻦ ﻋﻨﺎﺻﺮ ﺑﻪ ﺻﻮرت ﻣﺮﺗﺐﺷﺪه در ﺧﺮوﺟ ﺑﯿﺎﯾﻨﺪ .ﺿﻤﻨﺎً ﻣ ﺗﻮاﻧﯿﺪ ﻓﺮض ﮐﻨﯿﺪ ﮐﻪ اﻋﺪاد ﺗ ﺮاری ﻧﯿﺴﺘﻨﺪ .ﺑﻪﻃﻮر ﻣﺜﺎل ،اﮔﺮ ،k = 5 ،n = 3و ﺳﻪ آراﯾﻪ ﺑﻪ ﺻﻮرت ⟩ ،⟨5, 11, 20⟩ ،⟨2, 10, 22و ⟩⟨1, 30, 32 ﺑﺎﺷﻨﺪ ،آنﮔﺎه ﺧﺮوﺟ ﻣﺎ اﻋﺪاد ) 2, 1, 10, 11, 5ﺑﺎ ﺗﺮﺗﯿﺐ دلﺧﻮاه( ﺧﻮاﻫﺪ ﺑﻮد. اﻟﻒ( ] ٣ﻧﻤﺮه[ ﯾ اﻟ ﻮرﯾﺘﻢ ﻗﻄﻌ ﺑﺮای اﯾﻦ ﻣﺴﺌﻠﻪ ﺷﺮح دﻫﯿﺪ ﮐﻪ در زﻣﺎن ) O(n + k log nاﺟﺮا ﺷﻮد) .راﻫﻨﻤﺎﯾ :از ﻫﺮم اﺳﺘﺎﻧﺪارد اﺳﺘﻔﺎده ﮐﻨﯿﺪ(. ب( ] ۶ﻧﻤﺮه[ ﻓﺮض ﮐﻨﯿﺪ Sﻣﺠﻤﻮﻋﻪای از Nﻋﻨﺼﺮ اﺳﺖ .ﻋﻨﺎﺻﺮ x1 , . . . , xrرا ﺑﻪﺻﻮرت ﺗﺼﺎدﻓ و ﻣﺴﺘﻘﻞ از ﻫﻢ از ﻣﺠﻤﻮﻋﻪی Sاﻧﺘﺨﺎب ﮐﻨﯿﺪ .ﻓﺮض ﮐﻨﯿﺪ ∗ xﮐﻮﭼ ﺗﺮﯾﻦ ﻋﻨﺼﺮ از ﺑﯿﻦ ،x1 , . . . , xrو ∗ kرﺗﺒﻪی ∗ xدر Sﺑﺎﺷﺪ .ﺛﺎﺑﺖ ﮐﻨﯿﺪ: • اﺣﺘﻤﺎل اﯾﻦ ﮐﻪ ) k ∗ ⩽ N/(2rﺣﺪاﮐﺜﺮ ٠/۵اﺳﺖ. • اﺣﺘﻤﺎل اﯾﻦ ﮐﻪ k ∗ ⩾ 2N/rﺣﺪاﮐﺜﺮ ٠/١۵اﺳﺖ. )راﻫﻨﻤﺎﯾ :ﻣ ﺗﻮاﻧﯿﺪ از راﺑﻄﻪی 1 − x ⩽ e−xاﺳﺘﻔﺎده ﮐﻨﯿﺪ(. ج( ] ۴ﻧﻤﺮه[ ﯾ اﻟ ﻮرﯾﺘﻢ ﻗﻄﻌ ﺑﺮای ﻣﺴﺌﻠﻪی ﺑﺎﻻ ﺷﺮح دﻫﯿﺪ ﮐﻪ در زﻣﺎن ) ∗ O(n + kاﺟﺮا ﺷﻮد ،ﺑﺎ اﯾﻦ ﻓﺮض ﮐﻪ ﻋﻨﺼﺮ ∗ xﺑﺎ رﺗﺒﻪی ∗ (k ∗ ⩾ k) kﺑﻪ ﻣﺎ داده ﺷﺪه اﺳﺖ) .راﻫﻨﻤﺎﯾ :از اﻟ ﻮرﯾﺘﻢ اﻧﺘﺨﺎب ﺑﺎ زﻣﺎن ﺧﻄ اﺳﺘﻔﺎده ﮐﻨﯿﺪ(. د( ] ٧ﻧﻤﺮه[ اﮐﻨﻮن ﯾ اﻟ ﻮرﯾﺘﻢ ﻻسوﮔﺎس ﺳﺮﯾﻊﺗﺮ ﺑﺮای ﻣﺴﺌﻠﻪی ﺑﺎﻻ )در ﺣﺎﻟﺖ ﮐﻠ ( ﻃﺮاﺣ و ﺗﺤﻠﯿﻞ ﮐﻨﯿﺪ ﮐﻪ زﻣﺎن ﻣﺘﻮﺳﻂ آن ) O(n + kﺑﺎﺷﺪ) .راﻫﻨﻤﺎﯾ :اﮔﺮ ،k > nاز ﻗﺴﻤﺖ )ب( ﺑﺎ ﻓﺮض N = n2و ) r = N/(2kاﺳﺘﻔﺎده ﮐﻨﯿﺪ(... ٣
© Copyright 2025 Paperzz