DAexer1.pdf

‫))ﺑﻪ ﻧﺎم ﺧﺪاوﻧﺪ ﺑﺨﺸﻨﺪه ي ﻣﻬﺮﺑﺎن ((‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ي ‪ 1‬درس ﻃﺮاﺣﻲ اﻟﮕﻮرﻳﺘﻤﻬﺎ‬
‫ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ ﺗﻤﺮﻳﻦ ‪ 1387/1/23 :‬ﺳﺎﻋﺖ ‪23:59‬‬
‫) ‪( Amortized Analysis , Proof Method‬‬
‫ﻣﻼﺣﻈﺎت ‪:‬‬
‫ اﻳﻦ ﺗﻤﺮﻳﻦ ﻫﻢ داراي ﻗﺴﻤﺘﻬﺎي ﺗﺌﻮري و ﻫﻢ ﻋﻤﻠﻲ اﺳﺖ‪ .‬ﭘﺎﺳﺦ ﻗﺴﻤﺘﻬﺎي ﺗﺌﻮري و ﻋﻤﻠﻲ را در ﻗﺎﻟﺐ ﻳﻚ ﻓﺎﻳﻞ ﻓﺸﺮده ﺑﻪ ﻧﺎم‬‫‪ Ex1-yourId.zip‬ﺑﻪ آدرس ‪ [email protected]‬ﻣﻴﻞ ﻛﻨﻴﺪ‪.‬‬
‫ ﺑﻪ ﻫﻴﭻ وﺟﻪ ﻛﺎر ﻫﺎي ﻏﻴﺮ اﺧﻼﻗﻲ ﻣﺜﻞ روﻧﻮﻳﺴﻲ و ﻛﭙﻲ ﺑﺮﻧﺎﻣﻪ ي دﻳﮕﺮان و ‪ ....‬ﭘﺬﻳﺮﻓﺘﻪ ﻧﻴﺴﺖ‪ .‬درﺻﻮرت ﻣﺸﺎﻫﺪه ﻧﻤﺮه ي ﺷﻤﺎ ‪ -100‬در ﻧﻈﺮ‬‫ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮد‪) .‬اﮔﺮ ﺗﻤﺮﻳﻨﺎت را ﺑﺎ ﻫﻢ ﻣﻲ ﻧﻮﻳﺴﻴﺪ ﺳﻌﻲ ﻛﻨﻴﺪ ﻃﺮﻳﻖ ﻧﻮﺷﺘﻦ ﺷﻤﺎ ﻣﺎﻧﻨﺪ ﻳﻜﺪﻳﮕﺮ ﻧﺒﺎﺷﺪ‪ .‬ﭼﻮن در ﺻﻮرت ﻣﺸﺎﺑﻬﺖ ﺑﺎ وﺟﻮد ﺑﻲ‬
‫ﮔﻨﺎﻫﻲ‪ ،‬ﮔﻨﺎﻫﻜﺎر ﺷﻨﺎﺧﺘﻪ ﺧﻮاﻫﻴﺪ ﺷﺪ و ﻧﻤﺮه ي ﺧﻮد را از دﺳﺖ ﺧﻮاﻫﻴﺪ داد(‬
‫ ﺑﻪ ﻫﻴﭻ وﺟﻪ زﻣﺎن ﺗﺤﻮﻳﻞ اﻳﻦ ﺗﻤﺮﻳﻦ ﺗﻤﺪﻳﺪ ﻧﻤﻲ ﺷﻮد‪ .‬ﺑﻪ ازاي ﻫﺮﺳﺎﻋﺖ ﺗﺎﺧﻴﺮ‪ 20‬ﻧﻤﺮه )از ‪ 100‬ﻧﻤﺮه( را از دﺳﺖ ﻣﻲ دﻫﻴﺪ‪.‬‬‫‪ -‬ﻫﺮ ﮔﻮﻧﻪ ﺳﻮال و ﻣﺸﻜﻠﻲ و ﻳﺎ اﻳﺮادي را ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﺎ ‪ [email protected]‬در ﻣﻴﺎن ﺑﮕﺬارﻳﺪ‪.‬‬
‫‪ -1‬ﻧﻤﺎﻳﺶ در ﻣﺒﻨﺎي ﻓﺎﻛﺘﻮرﻳﻞ‬
‫☺ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﻫﺮ ﻋﺪد ﻃﺒﻴﻌﻲ ﻣﺎﻧﻨﺪ ‪ n‬را ﻣﻲ ﺗﻮان ﺑﻪ ﺻﻮرت‬
‫ﻛﻪ در آن ‪ k‬و‬
‫ﻫﺎ اﻋﺪاد ﺻﺤﻴﺢ و ﻧﺎﻣﻨﻔﻲ ﻫﺴﺘﻨﺪ و ﺑﻪ ازاي ﻫﺮ ‪ i‬دارﻳﻢ ‪:‬‬
‫ﺑﺮاي اﺛﺒﺎت اﻟﮕﻮرﻳﺘﻤﻲ اراﺋﻪ دﻫﻴﺪ‪ .‬ﺑﻪ روش رﺳﻤﻲ اﺛﺒﺎت ﻛﻨﻴﺪ ﻛﻪ اﻟﮕﻮرﻳﺘﻢ ﺷﻤﺎ درﺳﺖ ﻛﺎر ﻣﻲ ﻛﻨﺪ) ﺗﻤﺎﻣﻲ ﻗﺴﻤﺘﻬﺎي‪، Initialization‬‬
‫‪ Maintenance‬و ‪ Termination‬را ﺑﻪ دﻗﺖ ﺑﻴﺎن ﻛﻨﻴﺪ(‬
‫☻ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ اﻋﺪاد ﻃﺒﻴﻌﻲ داده ﺷﺪه را در ﻣﺒﻨﺎي ﻓﺎﻛﺘﻮرﻳﻞ ﻧﻤﺎﻳﺶ دﻫﺪ‪ .‬ﺑﺮﻧﺎﻣﻪ ي ﺧﻮد را در ﻓﺎﻳﻞ ‪ fact.java‬ﻳﺎ ‪fact.cpp‬‬
‫ﺿﻤﻴﻤﻪ ي ﻣﺘﻦ ﭘﺎﺳﺦ ﺧﻮد ﺑﻪ اﻳﻦ ﺗﻤﺮﻳﻦ ارﺳﺎل ﻧﻤﺎﻳﻴﺪ‪ .‬در ﻓﺎﻳﻞ ورودي ﺑﻪ ﺗﺮﺗﻴﺐ در ﻫﺮ ﺳﻄﺮ ﻳﻚ ﻋﺪد ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ ﻛﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻣﻌﺎدل آن‬
‫در ﻣﺒﻨﺎي ﻓﺎﻛﺘﻮرﻳﻞ رادر ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﺑﻨﻮﻳﺴﻴﺪ‪ .‬ﻓﺎﻳﻞ ورودي را از ‪ fact.in‬و ﺧﺮوﺟﻲ را ﺑﻪ ﻓﺎﻳﻞ ‪ fact.out‬ﺑﺮﻳﺰﻳﺪ‪ .‬ﺷﻜﻞ ﺧﺮوﺟﻲ‬
‫ﺷﻤﺎ ﺑﺎﻳﺪ ﻛﺎﻣﻼ ﺑﻪ ﻗﺎﻟﺐ ﻣﺜﺎل زﻳﺮﺷﺒﻴﻪ ﺑﺎﺷﺪ ) از ﻟﺤﺎظ ﻓﺎﺻﻠﻪ ﮔﺬاري و ‪: ( ...‬‬
‫‪fact.in‬‬
‫‪fact.out‬‬
‫‪ -2‬آﻧﺎﻟﻴﺰ ﺳﺮﺷﻜﻦ داده ﺳﺎﺧﺘﺎر ﺧﻮدﺳﺎﺧﺘﻪ‬
‫☺ ﻳﻚ ﺻﻒ ‪ FIFO‬ﺑﻪ ﻧﺎم ‪ Q‬داراي ﻋﻤﻠﻴﺎت ﻫﺎي )‪ dequeue(Q‬و )‪ enqueue(Q, x‬ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ اوﻟﻲ از اﺑﺘﺪاي ﺻﻒ ﻳﻚ ﻋﻨﺼﺮ‬
‫را ﺑﺮداﺷﺘﻪ و ﺑﺎزﻣﻲ ﮔﺮداﻧﺪ و دوﻣﻲ ﻋﻨﺼﺮ ‪ x‬را ﺑﺎ اﻧﺘﻬﺎي ﺻﻒ اﺿﺎﻓﻪ ﻣﻲ ﻛﻨﺪ‪ .‬ﻧﺸﺎن دﻫﻴﺪ ﻛﻪ ﻣﻲ ﺗﻮاﻧﻴﻢ اﻳﻦ ﺳﺎﺧﺘﻤﺎن داده را ﺑﺎ ﻛﻤﻚ دو ﭘﺸﺘﻪ‬
‫ي ‪ S‬و ’‪ S‬ﭘﻴﺎده ﺳﺎزي ﻛﺮد ﺑﻪ اﻳﻦ ﻧﺤﻮ ﻛﻪ ﻫﺰﻳﻨﻪ ي ﺳﺮﺷﻜﻦ ﻫﺮ ﻛﺪام از دو ﻋﻤﻞ ﺑﺎﻻ از)‪ O(1‬ﺑﺎﺷﺪ‪.‬‬
‫♪ اﺑﺘﺪا اﻋﻤﺎل )‪ dequeue(Q‬و )‪ enqueue(Q, x‬را ﺑﺎ اﻋﻤﺎل ﭘﺸﺘﻪ اي زﻳﺮ ﺷﺒﻴﻪ ﺳﺎزي ﻛﻨﻴﺪو ﺑﺮاي ﻫﺮ ﻛﺪام ﻳﻚ ﺷﺒﻪ ﻛﺪ‬
‫ﺑﻨﻮﻳﺴﻴﺪ‪:‬‬
‫ )‪ : push(Q, x‬ﻋﻨﺼﺮ ‪ x‬را ﺑﻪ ﺑﺎﻻ ي ﭘﺸﺘﻪ ي ‪ Q‬اﺿﺎﻓﻪ ﻣﻲ ﻛﻨﺪ‪.‬‬‫ )‪ : pop(Q‬ﺑﺎﻻﺗﺮﻳﻦ ﻋﻨﺼﺮ ﭘﺸﺘﻪ را ﺣﺬف ﻣﻲ ﻛﻨﺪ و ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﺑﻴﺮون ﻣﻲ دﻫﺪ‪.‬‬‫ )‪ : empty(Q‬ﺑﻪ ﻣﺤﺾ ﺧﺎﻟﻲ ﺷﺪن ﭘﺸﺘﻪ ‪ true‬ﺑﺮ ﻣﻲ ﮔﺮداﻧﺪ‪.‬‬‫♫ ﺣﺪاﻗﻞ ﺑﻪ دو روش از ﺑﻴﻦ روش ﻫﺎي ‪ aggregate‬و ‪ accounting‬و ‪potential‬‬
‫اﻳﻦ اﻋﻤﺎل ﺷﺒﻴﻪ ﺳﺎزي ﺷﺪه از )‪ O(1‬ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫‪٢‬‬
‫ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﻛﻪ ﻫﺰﻳﻨﻪ ي ﺳﺮﺷﻜﻦ ﻫﺮ ﻳﻚ‬