A1.pdf

‫اﻟ ﻮرﯾﺘﻢﻫﺎی ﭘﯿﺸﺮﻓﺘﻪ‬
‫ﻧﯿﻢﺳﺎل اول ‪٩١-٩٠‬‬
‫ﻣﺪرس‪ :‬ﺣﻤﯿﺪ ﺿﺮاﺑ زاده‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﺗﻤﺮﯾﻦ اول‬
‫زﻣﺎن ﺗﺤﻮﯾﻞ‪ ١٧ :‬آﺑﺎن‬
‫ﻣﺴﺌﻠﻪی ‪ .١‬ﻣﺠﻤﻮﻋﻪﻫﺎ‬
‫]‪ ٧‬ﻧﻤﺮه[‬
‫ﻣﺠﻤﻮﻋﻪای از ‪ 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‬اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪(...‬‬
‫‪٣‬‬