Quiz_1_Answers.pdf

‫پاسخ سوال اول‬
‫(در این راه حل‪ ،‬هزینه ‪ allocate‬کردن آرایه در نظر گرفته نشده است‪ .‬با در نظر گرفتن این هزینه‪ ،‬باز هم کلیت راه حل به‬
‫همین صورت باقی می ماند‪).‬‬
‫فرض کنید‬
‫هزینه عمل‬
‫ام باشد‪ .‬به طور کلی دو نوع عمل داریم‪:‬‬
‫‪ -1‬درج و حذف عادی که در آن مقدار‬
‫برابر با یک است‪.‬‬
‫‪ -2‬درج و حذف غیر عادی که عالوه بر درج و حذف شامل انتقال اعضای آرایه به آرایه جدید هم می باشند‪ .‬در این حالت‬
‫برابر با ‪ 1‬به عالوه تعداد اعضای انتقال یافته می باشد‪.‬‬
‫هزینه‬
‫الف) روش حسابداری‬
‫در روش حسابداری‪ ،‬به این صورت عمل می کنیم‪:‬‬
‫‪ -1‬به ازای هر درج و حذف هر عنصر‪ 4 ،‬ریال هزینه می کنیم که ‪ 3‬ریال آن در حساب ذخیره می شود و ‪ 1‬ریال آن صرف‬
‫انجام عمل می شود‪.‬‬
‫‪ -2‬انتقال بین آرایه ها را با استفاده از ذخیره موجود در حساب انجام می دهیم‪.‬‬
‫لم‪ ) 1‬حساب هیچ گاه منفی نمی شود‪ .‬به عبارتی همیشه موجودی کافی در حساب برای انجام عملیات انتقال بین آرایه ها وجود‬
‫دارد‪.‬‬
‫اثبات) اولین زمانی که اعضا به یک آرایه با اندازه‬
‫منتقل شده اند را در نظر بگیرید‪ .‬در این زمان‪ ،‬اعضا یا از یک آرایه با اندازه‬
‫و یا از یک آرایه با اندازه به این آرایه منتقل شده اند‪ .‬بنابراین در حالت اول‬
‫آرایه و در حالت دوم‬
‫از آرایه پر می‬
‫باشد‪.‬‬
‫حال زمانی را در نظر بگیرید که می خواهیم عناصر این آرایه را انتقال دهیم‪ .‬در این صورت یکی از شرایط زیر رخ داده است‪:‬‬
‫‪ -1‬تعداد اعضای آرایه به رسیده است‪ :‬از آنجا که آرایه در ابتدا حداقل‬
‫میزان‬
‫عنصر داشته است‪ ،‬در طول این مدت حداقل به‬
‫عملیات حذف صورت گرفته است‪ .‬توجه نمایید که به ازای هر کدام از آنها‪ 3 ،‬ریال در حساب قرار گرفته است و‬
‫این یعنی حداقل میزان‬
‫‪ -2‬تعداد اعضای آرایه به‬
‫ریال در حساب قرار دارد که این مقدار برای انتقال‬
‫رسیده است‪ :‬از آنجا که در ابتدا حداکثر‬
‫عنصر کافی است‪.‬‬
‫عضو در آرایه داشتیم‪ ،‬در طول این مدت حداقل‬
‫درج داشته ایم که به ازای هر کدام ‪ 3‬ریال در حساب ذخیره شده است و این یعنی حساب در حال حاضر دارای‬
‫حداقل‬
‫ریال می باشدکه برای انتقال این‬
‫بنابراین حساب هیچ گاه خالی نمی شود‪.‬‬
‫عنصر کافی است‪.‬‬
‫ب) روش تابع پتانسیل‬
‫تابع پتانسیل زیر را در نظر بگیرید‪:‬‬
‫{‬
‫که در آن‬
‫برابر با تعداد عناصر موجود در آرایه می باشد‪.‬‬
‫برابر با طول آرایه فعلی و‬
‫است و همیشه حداقل‬
‫ابتدا توجه نمایید که چون همیشه مقدار‬
‫عنصر در آرایه قرار دارد‪ ،‬تابع پتانسیل هیچ گاه‬
‫منفی نمی شود‪.‬‬
‫حال قرار دهید‪:‬‬
‫̂‬
‫در این قسمت‪ ،‬از توضیح درج و حذف عادی صرف نظر می کنیم و انجام آن به عهده خواننده است‪( .‬توجه کنید که در زمان‬
‫‪ ،‬دو عبارت‬
‫با یکدیگر برابر می شوند)‪ .‬به طور کلی می توان نشان داد در این حالت‪،‬‬
‫و‬
‫̂‬
‫برای حذف غیر عادی داریم‪:‬‬
‫در این حذف‪ ،‬ابتدا اندازه آرایه ) ( برابر با‬
‫بوده است‪ ،‬اما چون عناصر آرایه کمتر از شده است‪ ،‬عناصر به یک آرایه به اندازه‬
‫منتقل شده اند‪ .‬لذا برای آرایه دوم‪،‬‬
‫است‪ .‬هزینه این عملیات هم طبق آنجا در ابتدا گفته شد برابر با بوده است‪ ،‬به عالوه‬
‫یک حذف که در مجموع میشود‬
‫است‪.‬‬
‫همچنین بعد از حذف‪ ،‬تعداد اعضای آرایه برابر با‬
‫̂‬
‫)‬
‫)‬
‫(‬
‫(‬
‫̂‬
‫)‬
‫(‬
‫)‬
‫(‬
‫)‬
‫(‬
‫)‬
‫(‬
‫̂‬
‫̂‬
‫̂‬
‫همچنین برای درج غیر عادی نیز داریم‪:‬‬
‫در این درج‪ ،‬ابتدا اندازه آرایه ) ( برابر با‬
‫بوده است‪ .‬اما چون عناصر آرایه بیشتر از‬
‫منتقل شده اند‪ .‬هزینه این عملیات برابر با‬
‫شده اند‪ ،‬عناصر به یک آرایه با اندازه‬
‫بوده است‪ .‬تعداد اعضا بعد از درج برابر با‬
‫می شود‪ .‬بنابراین‬
‫داریم‪:‬‬
‫̂‬
‫)‬
‫)‬
‫(‬
‫(‬
‫)‬
‫(‬
‫)‬
‫̂‬
‫(‬
‫̂‬
‫̂‬
‫لذا در همه حالت های درج و حذف عادی و غیر عادی‪،‬‬
‫می باشد‪ .‬بنابراین برای‬
‫̂‬
‫و چون داریم‪:‬‬
‫̂‬
‫و بنابراین‪ ،‬هزینه سرشکن عملیات برابر با ) ( است‪.‬‬
‫عمل حذف و درج داریم‪:‬‬
‫ﭘﺎﺳﺦ ﺳﻮال ‪٢‬‬
‫اﻟﻒ(‬
‫ﺑﺎ ﻓﺮض اﯾﻦﮐﻪ آراﯾﻪی اول را ‪ A‬و آراﯾﻪ دوم را ‪ B‬ﺑﻨﺎﻣﯿﻢ و ﻫﻤﭽﻨﯿﻦ ﻋﻀﺮ ‪i‬ام آراﯾﻪی ‪ A‬را ﺑﺎ ‪ ai‬ﻧﺸﺎن دﻫﯿﻢ و ﻫﻤﯿﻦﻃﻮر ﻋﻀﻮ‬
‫‪i‬ام آراﯾﻪی ‪ B‬را ﺑﺎ ‪ bi‬ﻧﺸﺎن دﻫﯿﻢ‪ ،‬اﻟ ﻮرﯾﺘﻢ ﺑﻪ ﺷﺮح زﯾﺮ اﺳﺖ‪:‬‬
‫‪ .١‬اﮔﺮ ‪ k = 1‬ﺑﻮد ﭘﺎﺳﺦ ﻣﺴﺌﻠﻪ ﺑﺮاﺑﺮ ﺑﺎ } ‪ min{a1 , b1‬اﺳﺖ‪ .‬در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﺑﻪ ﻣﺮﺣﻠﻪ ‪ ٢‬ﺑﺮو‬
‫‪ A′ .٢‬و ‪ B ′‬را ﺑﻪ ﺻﻮرت زﯾﺮ ﺑﺴﺎز‪:‬‬
‫)آ( اﮔﺮ ⌋ ‪ |A| ≥ ⌊ k2‬و ⌋ ‪:|B| ≥ ⌊ k2‬‬
‫ﻋﻀﻮ ⌋‪ a⌊k/2‬و ⌋‪ b⌊k/2‬را ﺑﺮرﺳ ﮐﻦ و ﮐﻤﯿﻨﻪ آندو را در ﻧﻈﺮ ﺑ ﯿﺮ‪ .‬اﮔﺮ ﮐﻤﯿﻨﻪ آنﻫﺎ ⌋‪ a⌊k/2‬ﺑﺎﺷﺪ‪ ⌊ k2 ⌋ ،‬ﻋﻀﻮ اول‬
‫آراﯾﻪی ‪ A‬را ﺣﺬف ﮐﻦ و اﻋﻀﺎی ﺑﺎﻗﯿﻤﺎﻧﺪه را در آراﯾﻪی ‪ A′‬ﻗﺮار ﺑﺪه و ﻫﻤﭽﻨﯿﻦ ‪ .B ′ = B‬در ﺻﻮرﺗ ﮐﻪ ﮐﻤﯿﻨﻪ آن‬
‫دو ⌋‪ b⌊k/2‬ﺑﻮد ﻧﯿﺰ ﺑﻪ ﻃﻮر ﻣﺸﺎﺑﻪ ‪ A′ = A‬و ‪ B ′‬ﻧﯿﺰ از ﺣﺬف ﮐﺮدن ⌋ ‪ ⌊ k2‬ﻋﻀﻮ اول ‪ B‬ﺑﻪ دﺳﺖ ﻣ آﯾﺪ‪.‬‬
‫)ب( اﮔﺮ ﺗﻌﺪاد اﻋﻀﺎی ﯾ از دو آراﯾﻪ ﮐﻤﺘﺮ از ⌋ ‪ ⌊ k2‬ﺑﺎﺷﺪ‪:‬‬
‫⌋ ‪ ⌊ k2‬ﻋﻀﻮ اول آراﯾﻪی ﺑﺰرﮔﺘﺮ را ﺣﺬف ﮐﻦ و ﻣﺎﻧﻨﺪ ﻗﺴﻤﺖ ﻗﺒﻞ ‪ A′‬و ‪ B ′‬را ﺑﺴﺎز‪.‬‬
‫)ج( اﮔﺮ اﻧﺪازهی ﻫﺮ دو آراﯾﻪ ﮐﻤﺘﺮ از ‪ k‬ﺑﺎﺷﺪ‪:‬‬
‫اﯾﻦ ﺣﺎﻟﺖ اﻣ ﺎنﭘﺬﯾﺮ ﻧﯿﺴﺖ‪ .‬زﯾﺮا در اﯾﻦ ﺻﻮرت ﺗﻌﺪاد ﮐﻞ اﻋﻀﺎی ﻣﻮﺟﻮد ﮐﻤﺘﺮ از ‪ k‬اﺳﺖ و ﺑﻨﺎﺑﺮاﯾﻦ ﻋﻀﻮ ‪k‬ام‬
‫در ﮐﻞ وﺟﻮد ﻧﺪارد‪.‬‬
‫ﺳﭙﺲ ﺑﻪ ﻣﺮﺣﻠﻪ ‪ ٣‬ﺑﺮو‪.‬‬
‫‪ .٣‬ﺑﺎ ﻣﻘﺪار ⌋ ‪ k′ = k − ⌊ k2‬و آراﯾﻪﻫﺎی ﻣﺮﺗﺐ ‪ A′‬و ‪ B ′‬ﺑﻪ ﻣﺮﺣﻠﻪ ‪ ١‬ﺑﺮو )ﺑﺎ اﺳﺘﻔﺎده از ﻫﻤﯿﻦ اﻟ ﻮرﯾﺘﻢ ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘ‬
‫ﻋﻀﻮ ‪k′‬ام اﺟﺘﻤﺎع دو آراﯾﻪی ﻣﺮﺗﺐ ‪ A′‬و ‪ B ′‬را ﭘﯿﺪا ﮐﻦ(‪.‬‬
‫*ﺗﻮﺿﯿﺢ درﺳﺘ اﻟ ﻮرﯾﺘﻢ‪ :‬اﻟ ﻮرﯾﺘﻢ ﺑﻪ اﯾﻦ ﺻﻮرت ﻋﻤﻞ ﻣ ﮐﻨﺪ ﮐﻪ ﺗﻌﺪادی از اﻋﻀﺎﯾﯽ ﮐﻪ ﻣﻄﻤﺌﻦ ﻫﺴﺘﯿﻢ از ﻋﻀﻮ ‪k‬ام‬
‫ﻣﺠﻤﻮﻋﻪی دو آراﯾﻪ ﮐﻮﭼ ﺘﺮ ﻫﺴﺘﻨﺪ را ﺑﺎ ﺣﻔﻆ ﻣﺮﺗﺐ ﺑﻮدن آراﯾﻪﻫﺎ ﺣﺬف ﻣ ﮐﻨﯿﻢ و ﺳﭙﺲ ﺑﻪ دﻧﺒﺎل ‪k′‬اﻣﯿﻦ ﻋﻀﻮ اول آراﯾﻪﻫﺎی‬
‫ﺟﺪﯾﺪ )ﮐﻪ ﻫﻤﺎن ‪k‬اﻣﯿﻦ ﻋﻀﻮ آراﯾﻪﻫﺎی ﻗﺒﻠ اﺳﺖ( ﻣ ﮔﺮدﯾﻢ‪.‬‬
‫اﺛﺒﺎت اﯾﻦﮐﻪ اﻋﻀﺎی ﺣﺬف ﺷﺪه ﻫﻤ از ﻋﻀﻮ ‪k‬ام ﻣﺠﻤﻮﻋﻪی دو آراﯾﻪ ﮐﻮﭼ ﺘﺮ ﻫﺴﺘﻨﺪ ﻧﯿﺰ ﺑﻪ اﯾﻦ ﺻﻮرت اﺳﺖ ﮐﻪ‪:‬‬
‫• اﮔﺮ ﺣﺎﻟﺖ اول رخ دﻫﺪ )ﮐﻪ اﻧﺪازهی ﻫﺮ دو آراﯾﻪ از( ⌋ ‪ ⌊ k2‬ﺑﺰرﮔﺘﺮ اﺳﺖ‪ ،‬اﮔﺮ ﻓﺮض ﮐﻨﯿﻢ ⌋‪ a⌊k/2⌋ ≤ b⌊k/2‬در اﯾﻦ ﺻﻮرت‬
‫ﺣﺪاﮐﺜﺮ ⌋ ‪ ⌊ k2‬ﻋﻀﻮ اول آراﯾﻪی ‪ A‬و ﻫﻤﭽﻨﯿﻦ ‪ ⌊ k2 ⌋ − 1‬ﻋﻀﻮ اول آراﯾﻪی ‪ B‬ﮐﻮﭼ ﺘﺮ از ⌋‪ a⌊k/2‬ﻫﺴﺘﻨﺪ‪ .‬ﺑﻨﺎﺑﺮاﯾﻦ ⌋‪a⌊k/2‬‬
‫ﺣﺪاﮐﺜﺮ ﻣ ﺗﻮاﻧﺪ ﻋﻀﻮ ‪ k − 1‬ام ﺑﺎﺷﺪ و اﻋﻀﺎی ﻗﺒﻞ از آن در آراﯾﻪی ‪ A‬ﻧﯿﺰ از آن ﮐﻮﭼ ﺘﺮ ﻫﺴﺘﻨﺪ‪.‬‬
‫• در ﺣﺎﻟﺖ دﯾ ﺮ ﮐﻪ ﺗﻌﺪاد اﻋﻀﺎی ﯾ از آنﻫﺎ ﮐﻮﭼ ﺘﺮ از ⌋ ‪ ⌊ k2‬ﺑﺎﺷﺪ ﻧﯿﺰ ﻫﺮ ﯾ از ⌋ ‪ ⌊ k2‬ﻋﻀﻮ اول آراﯾﻪی ﺑﺰرﮔﺘﺮ ﺣﺪاﮐﺜﺮ‬
‫ﻣ ﺗﻮاﻧﻨﺪ از ﮐﻞ اﻋﻀﺎی ﻗﺒﻠ ﻫﻤﺎن آراﯾﻪ و ﺗﻤﺎم اﻋﻀﺎی آراﯾﻪی دﯾ ﺮ ﺑﺰرﮔﺘﺮ ﺑﺎﺷﺪ‪ .‬ﺑﻨﺎﺑﺮاﯾﻦ ﺣﺪاﮐﺜﺮ ﻣ ﺗﻮاﻧﺪ ﻋﻀﻮ ‪k − 1‬‬
‫ام ﺑﺎﺷﺪ‪.‬‬
‫ب(‬
‫ﺑﺎ اﺳﺘﻔﺎده از ﻗﻀﯿﻪی اﺻﻠ ﺛﺎﺑﺖ ﻣ ﮐﻨﯿﻢ اﮔﺮ زﻣﺎن اﺟﺮای ﻣﺴﺌﻠﻪ ﺑﻪ ازای ورودی ‪ k‬را )‪ T (k‬ﺑﻨﺎﻣﯿﻢ‪:T (k) ∈ O(log k) ،‬‬
‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺻﻮرت اﻟ ﻮرﯾﺘﻢ‪،‬‬
‫‪k‬‬
‫‪T (k) = T (k − ⌊ ⌋) + C‬‬
‫‪2‬‬
‫‪T (1) = 1‬‬
‫ﮐﻪ ‪ C‬ﻣﻘﺪاری ﺛﺎﺑﺖ اﺳﺖ )زﯾﺮا در ﻫﺮ ﻣﺮﺣﻠﻪ ﺣﺪاﮐﺜﺮ اﻧﺪازهی آراﯾﻪﻫﺎ و ﻫﻤﭽﻨﯿﻦ ﯾ ﻋﻀﻮ از آراﯾﻪﻫﺎ ﻣﻘﺎﯾﺴﻪ ﻣ ﺷﻮد و ﺳﺎﺧﺘﯿﻦ‬
‫‪ A′‬و ‪ B ′‬را ﻧﯿﺰ ﻣ ﺗﻮان ﺑﺎ اﺳﺘﻔﺎده از ﯾ اﺷﺎرهﮔﺮ و ﺟﺎﺑﻪﺟﺎ ﮐﺮدن آن ﭘﯿﺎدهﺳﺎزی ﮐﺮد(‪.‬‬
‫ﺣﺎل اﮔﺮ ﺑﺮای راﺣﺘ ﻓﺮض ﮐﻨﯿﻢ ﮐﻪ ‪ k‬ﺗﻮاﻧ از ‪ ٢‬ﺑﺎﺷﺪ دارﯾﻢ‪:‬‬
‫‪k‬‬
‫‪T (k) = T ( ) + c‬‬
‫‪2‬‬
‫‪١‬‬
‫ﺑﻨﺎﺑﺮاﯾﻦ‬
‫}‬
‫‪⇒ c = logb a = 0‬‬
‫و ﻫﻤﭽﻨﯿﻦ‬
‫‪a=1‬‬
‫‪b=2‬‬
‫)‪f (k) = C ⇒ f (k) ∈ Θ(k c log k‬‬
‫ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺣﺎﻟﺖ دوم ﻗﻀﯿﻪی اﺻﻠ دارﯾﻢ‬
‫)‪T (k) ∈ Θ(k c log k) ⇒ T (k) ∈ O(k c log k‬‬
‫و ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﯾﻦ ﮐﻪ ‪ c = 0‬دارﯾﻢ‬
‫)‪T (k) ∈ O(log k‬‬
‫ﮐﻪ در ﻧﻬﺎﯾﺖ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﯾﻦ ﮐﻪ ‪ k < n‬ﻣ ﺗﻮان ﮔﻔﺖ ﻣﺴﺌﻠﻪ از )‪ O(log n‬اﺳﺖ‪.‬‬
‫‪٢‬‬