Assignment1.pdf

‫ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ‬
‫ﺗﻤﺮﻳﻦ ﺳﺮﯼ اول ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ‬
‫دوﺷﻨﺒﻪ ‪ 23‬ﻣﻬﺮ ‪1386‬‬
‫ﺑﺮاﯼ هﺮ ﻳﮏ از ﻣﺴﺎﺋﻞ زﻳﺮ‪ ،‬ﻗﺒﻞ از رﺳﻢ ﻓﻠﻮﭼﺎرت‪ ،‬ﮔﺎم هﺎﯼ روش ﭘﻴﺸﻨﻬﺎدﯼ ﺧﻮد را ﻣﺨﺘﺼﺮًا ﺗﻮﺿﻴﺢ دهﻴﺪ‪ .‬ﻣﯽ ﺗﻮاﻧﻴﺪ ﻓﻠﻮﭼﺎرت هﺎﯼ ﺧﻮد را ﺑﻪ‬
‫ﮐﻤﮏ ﺑﺮﻧﺎﻣﻪ اﯼ ﮐﻪ در ﺳﺎﻳﺖ و در ﻗﺴﻤﺖ ‪ Resources‬ﮔﺬاﺷﺘﻪ ﺷﺪﻩ اﺳﺖ‪ 1‬رﺳﻢ ﮐﻨﻴﺪ ‪.‬‬
‫ﻣﺴﺎﻟﻪ اول ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫اﻋﺪاد ﻣﺘﻘﺎرن‬
‫ﻋﺪد ﻃﺒﻴﻌﯽ ‪ n‬را ﻣﺘﻘﺎرن‪ 2‬ﮔﻮﻳﻴﻢ ‪ ،‬هﺮﮔﺎﻩ ﺑﺎ ﻣﻘﻠﻮب ﺧﻮد‪ ،‬ﮐﻪ از ﻣﻌﮑﻮس ﻧﻤﻮدن ﺗﺮﺗﻴﺐ رﻗﻢ هﺎﻳﺶ ﺣﺎﺻﻞ ﻣﯽ ﺷﻮد‪ ،‬ﺑﺮاﺑﺮ‬
‫ﺑﺎﺷﺪ‪ .‬ﺑﺮاﯼ ﻣﺜﺎل ‪:‬‬
‫‪123 Æ 321‬‬
‫ﻧﺎﻣﺘﻘﺎرن‬
‫ﻣﺘﻘﺎرن‬
‫‪42324Æ 42324‬‬
‫ﻣﺘﻘﺎرن‬
‫‪86100168 Æ 86100168‬‬
‫روﺷﯽ ﺑﺮاﯼ ﺗﻌﻴﻴﻦ ﻣﺘﻘﺎرن ﺑﻮدن ورودﯼ دﻟﺨﻮاﻩ ‪ n‬ﭘﻴﺸﻨﻬﺎد ﮐﻨﻴﺪ‪.‬‬
‫ﻣﺴﺎﻟﻪ دوم ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫ﻣﺮﺗﺐ ﺳﺎزﯼ درﺟﯽ )‪(Insertion Sort‬‬
‫اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎزﯼ درﺟﯽ ﺑﺮ اﺳﺎس ﻣﺮﺗﺐ ﺳﺎزﻳﻬﺎﻳﯽ ﮐﻪ ﻣﻌﻤﻮﻻ ﺧﻮد ﻣﺎ ﺑﺼﻮرت دﺳﺘﯽ اﻧﺠﺎم ﻣﯽدﻳﻢ ﻃﺮاﺣﯽ ﺷﺪﻩ اﺳﺖ‪.‬‬
‫ﻣﺮاﺣﻞ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ را ﺑﺎ ﻣﺜﺎﻟﯽ ﺗﻮﺿﻴﺢ ﻣﯽ دهﻴﻢ‪.‬ﻓﺮض ﮐﻨﻴﺪ ﺁراﻳﻪ ورودﯼ ﭼﻨﻴﻦ ﺑﺎﺷﺪ‪:‬‬
‫‪3‬‬
‫‪1‬‬
‫‪6‬‬
‫‪4‬‬
‫‪2‬‬
‫‪5‬‬
‫در هﺮ ﻣﺮﺣﻠﻪ ﺁراﻳﻪ را ﺑﻪ دو ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺷﺪﻩ و ﻣﺮﺗﺐ ﻧﺸﺪﻩ ﺗﻘﺴﻴﻢ ﻣﯽ ﮐﻨﻴﻢ وﺑﺎ ﺑﺮرﺳﯽ اوﻟﻴﻦ ﻋﻨﺼﺮ از ﺁراﻳﻪ ﻧﺎﻣﺮﺗﺐ را در‬
‫ﺁراﻳﻪ ﻣﺮﺗﺐ ﺟﺎﯼ ﻣﯽ دهﻴﻢ‪ .‬اﻳﻦ ﮐﺎر را ﺗﺎ ﻣﺮﺗﺐ ﺷﺪن ﮐﻞ ﺁراﻳﻪ اداﻣﻪ ﻣﯽ دهﻴﻢ‪ .‬ﻣﺮاﺣﻞ ﮐﺎر در ﺷﮑﻞ زﻳﺮ ﺁوردﻩ ﺷﺪﻩ اﺳﺖ‪:‬‬
‫‪ ‬‬
‫‪1‬‬
‫‪ http://ce.sharif.edu/courses/86-87/1/ce153/resources/root/wptrial.exe‬‬
‫‪ Palindrome ‬‬
‫‪2‬‬
‫ﺑﺮاﯼ ﻣﺜﺎل در ﮔﺎم ﭘﻨﺠﻢ‪ ،‬ﻋﺪد ‪ 3‬اوﻟﻴﻦ ﻋﻀﻮ ﺁراﻳﻪ ﻧﺎﻣﺮﺗﺐ اﺳﺖ‪ .‬اﻳﻦ ﻋﺪد را در ﻳﮏ ﻣﺘﻐﻴﺮ ذﺧﻴﺮﻩ ﻣﯽ ﮐﻨﻴﻢ‪ .‬ﭼﻮن ‪ 6‬از ‪3‬‬
‫ﺑﻴﺸﺘﺮ اﺳﺖ‪ ،‬ﺑﻪ ﺳﻤﺖ راﺳﺖ ﻣﯽ رود‪ .‬ﺳﭙﺲ ‪ 3‬را ﺑﺎ ﻋﻀﻮ ﺑﻌﺪ ﻳﻌﻨﯽ ‪ 5‬ﻣﻘﺎﻳﺴﻪ ﻣﯽ ﮐﻨﻴﻢ‪ 5 .‬از ‪ 3‬ﺑﺰﮔﺘﺮ اﺳﺖ و ﺁن هﻢ ﻳﮏ ﺑﺎر‬
‫ﺑﻪ راﺳﺖ ﻣﯽ رود‪ 4 .‬هﻢ هﻤﻴﻦ ﻃﻮر‪ .‬وﻟﯽ ‪ 2‬از ‪ 3‬ﮐﻮﭼﮑﺘﺮ اﺳﺖ‪ .‬در اﻳﻨﺠﺎ ﻋﺪد ‪ 3‬در ﺟﻠﻮﯼ ‪ 2‬ﺟﺎﯼ ﻣﯽ ﮔﻴﺮد‪.‬‬
‫اﮔﻪ ‪ n‬ﺗﻌﺪاد ﻋﻨﺎﺻﺮ را ﻣﺸﺨﺺ ﮐﻨﺪ ‪ ،‬اﻳﻦ روش ‪ n-1‬ﻣﺮﺣﻠﻪ را ﺑﺮاﯼ ﻣﺮﺗﺐ ﮐﺮدن ﻃﯽ ﻣﯽﮐﻨﺪ‪ .‬ﺑﻌﺪ از اﺗﻤﺎم ﻣﺮﺣﻠﻪ ‪ i‬ام‬
‫ﻣﻄﻤﺌﻨﺎ ‪ i+1‬ﻋﻨﺼﺮ اول ﺑﻪ ﺻﻮرت ﻣﺮﺗﺐ ﺷﺪﻩ هﺴﺘﺪ‪.‬‬
‫ﻓﻠﻮﭼﺎرﺗﯽ ﺑﺮاﯼ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎزﯼ رﺳﻢ ﮐﻨﻴﺪ‪.‬‬
‫ﻣﺴﺎﻟﻪ ﺳﻮم ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫ﺟﺴﺘﺠﻮﯼ دودوﻳﯽ‪ 3‬ﺑﺮاﯼ ﺁراﻳﻪ هﺎﯼ ﻣﺮﺗﺐ‬
‫ﻣﯽ ﺧﻮاهﻴﻢ در ﻣﻴﺎن ﺁراﻳﻪ اﯼ ﻣﺮﺗﺐ از اﻋﺪاد)ﺑﻪ ﻃﻮر ﺻﻌﻮدﯼ(‪ ،‬ﺑ ﻪ دﻧﺒ ﺎل ﻋ ﺪد دﻟﺨ ﻮاﻩ ‪ x‬ﺑﮕ ﺮدﻳﻢ‪ .‬اﮔ ﺮ ﻋ ﺪد ﻣ ﻮرد ﻧﻈ ﺮ در‬
‫ﺁراﻳﻪ ﻣﻮﺟﻮد ﺑﻮد‪ ،‬ﻣﮑﺎن ﺁن ﻋﺪد در ﺁراﻳﻪ و ﮔﺮﻧﻪ ﭘﻴﻐﺎم ”‪ “Not Found‬ﭼﺎپ ﺷﻮد‪ .‬اﮔﺮ ﻋ ﺪد ﻣ ﻮرد ﻧﻈ ﺮ ﭼﻨ ﺪﻳﻦ ﺑ ﺎر در ﺁراﻳ ﻪ‬
‫ﺗﮑﺮار ﺷﺪﻩ ﺑﺎﺷﺪ‪ ،‬ﮐﺎﻓﯽ اﺳﺖ ﻣﮑﺎن ﻳﮑﯽ از اﻳﻦ ﻣﻘﺎدﻳﺮ ﭼﺎپ ﺷﻮد‪.‬ﺑﺮاﯼ اﻳﻦ ﮐﺎر از روش ﺟﺴﺘﺠﻮﯼ دودوﻳﯽ اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ ‪:‬‬
‫در اﻳﻦ روش ﻋﻨﺼﺮ ﻣﻮرد ﻧﻈﺮ ﺑﺎ ﻋﻨﺼﺮ وﺳﻂ ﺁراﻳﻪ ﻣﻘﺎﻳﺴﻪ ﻣﯽ ﺷﻮد‪.‬اﮔﺮ ﺑﺮاﺑﺮ ﺑﻮد‪،‬ﺟﺴﺘﺠﻮ ﺧﺎﺗﻤﻪ ﻣﯽ ﻳﺎﺑﺪ‪.‬اﮔﺮ ﻋﻨﺼﺮ ﻣ ﻮرد‬
‫ﺟﺴﺘﺠﻮ از ﻋﻨﺼﺮ وﺳﻂ ﺑﺰرﮔﺘﺮ ﻳﺎ ﮐﻮﭼﮑﺘﺮ ﺑﻮد ‪ ،‬ﺁراﻳﻪ ﺑﻪ دو ﺑﺨﺶ ﺗﻘﺴﻴﻢ ﻣﯽ ﺷﻮد‪:‬‬
‫‪ -1‬ﺑﺨﺸﯽ ﮐﻪ ﻋﻨﺎﺻﺮ ﺁن ﺑﺰرﮔﺘﺮ از ﻋﻨﺼﺮ ﻣﻮرد ﺟﺴﺘﺠﻮ هﺴﺘﻨﺪ‪.‬‬
‫‪ -2‬ﺑﺨﺸﯽ ﮐﻪ ﻋﻨﺎﺻﺮ ﺁن ﮐﻮﭼﮑﺘﺮ از ﻋﻨﺎﺻﺮ ﻣﻮرد ﺟﺴﺘﺠﻮ هﺴﺘﻨﺪ‪.‬‬
‫اﮔﺮ ﻋﻨﺼﺮ ﻣﻮرد ﺟﺴﺘﺠﻮ از ﻋﻨﺼﺮ وﺳﻂ ﺑﺰرﮔﺘﺮ ﺑﻮد ‪ ،‬ﺟﺴﺘﺠﻮ در ﺑﺨﺶ ﭘ ﺎﻳﻴﻨﯽ ﺁراﻳ ﻪ اﻧﺠ ﺎم ﻣ ﯽ ﮔﻴ ﺮد و در ﻏﻴ ﺮ اﻳﻨﺼ ﻮرت‬
‫در ﺑﺨﺶ ﺑﺎﻻﻳﯽ ﺁراﻳﻪ‪ .‬اﻳﻦ روﻧﺪ ﺗﺎ زﻣﺎﻧﯽ اداﻣﻪ ﻣﯽ ﻳﺎﺑﺪ ﮐﻪ ﻋﻨﺼﺮ ﻣﻮرد ﻧﻈﺮ ﻳﺎﻓ ﺖ ﺷ ﻮد و ﻳ ﺎ ﻣﻄﻤ ﺌﻦ ﺷ ﻮﻳﻢ ﮐ ﻪ ﻋﻨﺼ ﺮ ﻣ ﻮرد‬
‫ﻧﻈﺮ در ﺁراﻳﻪ ﻣﻮﺟﻮد ﻧﻴﺴﺖ‪.‬‬
‫راهﻨﻤﺎﻳﯽ‪ :‬دو ﻣﺘﻐﻴﺮ ‪ first , last‬را ﺑﺮاﯼ ﻧﮕﻬﺪارﯼ ﻣﮑﺎن اﺑﺘﺪا و اﻧﺘﻬﺎﯼ ﺁراﻳﻪ ﻣﻮرد ﺟﺴﺘﺠﻮ در هﺮ ﮔﺎم در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪.‬‬
‫‪ ‬‬
‫‪ Binary Search ‬‬
‫‪3‬‬