Assignment3.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪاوﻧﺪ زﻳﺒﺎﻳﻲﻫﺎ‬
‫ﺳﺎﺧﺘﻤﺎن دادهﻫﺎ و اﻟﮕﻮرﻳﺘﻢﻫﺎ‬
‫داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫‪Data Structures and Algorithms‬‬
‫داﻧﺸﻜﺪه ﻣﻬﻨﺪﺳﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ‬
‫ﺗﻤﺮﻳﻦ ﺳﺮي ‪3‬‬
‫‪ (1‬داده ﺳﺎﺧﺘﺎري ﻃﺮاﺣﻲ ﻛﻨﻴﺪ ﻛﻪ اﻋﻤﺎل ‪) FindMin ،Pop ،Push‬ﻳﺎﻓﺘﻦ و ﺑﺮﮔﺮداﻧﺪن ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮﺑﻴﻦ ﻋﻨﺎﺻﺮ ﻣﻮﺟﻮد( و‬
‫‪ FindMax‬را ﺑﺘﻮاﻧﺪ در ‪ 1‬اﻧﺠﺎم دﻫﺪ‪ .‬اﻋﻤﺎل را ﺑﻪ زﺑﺎن ‪ CLRS‬ﺑﻨﻮﻳﺴﻴﺪ‪.‬‬
‫اﺧﺘﻴﺎري‪ :‬اﺛﺒﺎت ﻛﻨﻴﺪ اﮔﺮ ﻋﻤﻞ ‪ Deletemin‬ﻫﻢ اﺿﺎﻓﻪ ﺷﻮد‪ ،‬دﺳﺖ ﻛﻢ ﻳﻜﻲ از اﻳﻦ اﻋﻤﺎل ﺑﺎﻳﺪ در ‪ Ω lg n‬اﻧﺠﺎم ﺷﻮد‪.‬‬
‫‪ (2‬ﻧﺸﺎن دﻫﻴﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﻣﻲﺗﻮان ﻳﻚ ﭘﺸﺘﻪ را ﺑﺎ اﺳﺘﻔﺎده از دو ﺻﻒ ﭘﻴﺎدهﺳﺎزي ﻛﺮد و زﻣﺎن ﻋﻤﻠﻴﺎت ﻣﺮﺑﻮط ﺑﻪ ﭘﺸﺘﻪ را ﺑﻪ دﺳﺖ‬
‫آورﻳﺪ‪.‬‬
‫‪ (3‬ﺗﻮﺿﻴﺢ دﻫﻴﺪ ﭼﮕﻮﻧﻪ ﻣﻲﺗﻮان ﻳﻚ ﻟﻴﺴﺖ دوﭘﻴﻮﻧﺪي را ﺑﺎ اﺳﺘﻔﺎده از ﺗﻨﻬﺎ ﻳﻚ ﻓﻴﻠﺪ اﺷﺎرهﮔﺮ ﺳﺎﺧﺖ‪) .‬ﻳﻌﻨﻲ ﺑﻪ ﺟﺎي دو ﻓﻴﻠﺪ‬
‫‪ next‬و ‪ ،prev‬ﻳﻚ ﻓﻴﻠﺪ ‪ npx‬داﺷﺘﻪ ﺑﺎﺷﻴﻢ( ﻓﺮض ﻛﻨﻴﺪ ﻣﻘﺎدﻳﺮ اﺷﺎرهﮔﺮﻫﺎ ﺑﻪ ﺻﻮرت اﻋﺪاد ‪ k‬ﺑﻴﺘﻲ ﻧﻤﺎﻳﺶ داده ﺷﻮﻧﺪ و‬
‫‪ npx‬را ﺑﻪ اﻳﻦ ﺻﻮرت ﺗﻌﺮﻳﻒ ﻛﺮده ﺑﺎﺷﻴﻢ‪) npx nextx XOR prevx :‬ﻣﻘﺪار ‪ Nil‬ﺑﺼﻮرت ‪ 0‬ﻧﺸﺎن داده ﻣﻲ‪-‬‬
‫ﺷﻮد( ﺗﻮﺿﻴﺢ دﻫﻴﺪ داﺷﺘﻦ ﭼﻪ اﻃﻼﻋﺎﺗﻲ ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﺳﺮﻟﻴﺴﺖ )‪ (head‬ﻻزم اﺳﺖ و ﻧﺸﺎن دﻫﻴﺪ ﻋﻤﻠﻴﺎت ‪Insert ،Search‬‬
‫و ‪ Delete‬را ﭼﮕﻮﻧﻪ ﺑﺎﻳﺪ در ﭼﻨﻴﻦ ﻟﻴﺴﺘﻲ ﭘﻴﺎدهﺳﺎزي ﻛﺮد‪.‬‬
‫‪ (4‬ﻋﻤﻞ ‪ UNION‬روي ﻣﺠﻤﻮﻋﻪﻫﺎ ﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ دو ﻣﺠﻤﻮﻋﻪي ﺟﺪا از ﻫﻢ ‪ S1‬و ‪ S2‬را ﺑﻪ ﻋﻨﻮان ورودي ﻣﻲﮔﻴﺮد و‬
‫ﻣﺠﻤﻮﻋﻪي ‪ S S1∪ S2‬را ﺑﺮﻣﻲﮔﺮداﻧﺪ‪ .‬ﺑﻌﺪ از اﻧﺠﺎم اﻳﻦ ﻋﻤﻞ ﻣﺠﻤﻮﻋﻪﻫﺎي ‪ S1‬و ‪ S2‬از ﺑﻴﻦ ﻣﻲروﻧﺪ‪ .‬ﻧﺸﺎن دﻫﻴﺪ ﻋﻤﻞ ‪UNION‬‬
‫ﺑﺎ اﺳﺘﻔﺎده از داده ﺳﺎﺧﺘﺎر ﻟﻴﺴﺖ در زﻣﺎن‪ O1‬اﻧﺠﺎم ﻣﻲﺷﻮد‪.‬‬
‫‪ (5‬ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻳﻜﻲ از روشﻫﺎي ﭘﻴﺎدهﺳﺎزي اﻋﺪاد ﺑﺎ ﺗﻌﺪاد ارﻗﺎم زﻳﺎد و ﻧﺎﻣﺸﺨﺺ اﺳﺖ‪ .‬ﻣﺜﻼً اﻋﺪاد ‪ *1097‬و ‪ -209‬را ﻣﻲ‪-‬‬
‫ﺗﻮان ﺑﻪ ﺻﻮرت دو ﻟﻴﺴﺖ زﻳﺮ ﭘﻴﺎدهﺳﺎزي ﻛﺮد‪ .‬ﻣﻮﻟﻔﻪﻫﺎي ﻫﺮ ﻋﻨﺼﺮ ﻟﻴﺴﺖ‪) char ،‬ﻛﻪ ﻳﺎ ‪ +‬و ﻳﺎ – و ﻳﺎ ﻳﻜﻲ از ارﻗﺎم ‪ 0‬ﺗﺎ ‪ 9‬اﺳﺖ( و‬
‫‪ prev‬ﻛﻪ ﺑﻪ رﻗﻢ ﻗﺒﻠﻲ اﺷﺎره ﻣﻲﻛﻨﺪ‪ ،‬ﻫﺴﺘﻨﺪ‪ .‬ﻟﻴﺴﺖﻫﺎ ﺳﺮﻟﻴﺴﺖ دارﻧﺪ و ﻋﻼﻣﺖ ﻋﺪد را در ﺧﻮد ذﺧﻴﺮه ﻣﻲﻛﻨﻨﺪ‪.‬‬
‫‪1‬‬
‫روﻳﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﺗﺎ دو ﻋﺪد )ﻣﺜﺒﺖ ﻳﺎ ﻣﻨﻔﻲ( را ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻛﻨﺪ و ﻳﻚ ﻟﻴﺴﺖ ﺟﺪﻳﺪ ﺑﺮاي ﻋﺪد ﻣﺠﻤﻮع ﺑﺴﺎزد‪.‬‬
‫‪ (6‬ﻳﻚ روﻳﻪي ﻏﻴﺮ ﺑﺎزﮔﺸﺘﻲ ﺑﺎ زﻣﺎن اﺟﺮاي ‪ On‬ﺑﻨﻮﻳﺴﻴﺪ ﺑﻄﻮرﻳﻜﻪ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي را ﻛﻪ ﺷﺎﻣﻞ ‪ n‬ﻋﻨﺼﺮ اﺳﺖ‪ ،‬واروﻧﻪ ﻛﻨﺪ‪.‬‬
‫اﻳﻦ روﻳﻪ ﻣﺠﺎز اﺳﺖ ﻋﻼوه ﺑﺮ ﻓﻀﺎي ﺧﻮد ﻟﻴﺴﺖ ﻓﻘﻂ از ﻣﻘﺪار ﺛﺎﺑﺘﻲ )‪ (constant‬ﺣﺎﻓﻈﻪ اﺳﺘﻔﺎده ﻛﻨﺪ‪.‬‬
‫‪ (7‬ﻣﻌﻤﻮﻻً ﻣﺎ ﺑﻪ دﻧﺒﺎل اﻳﻦ ﻫﺴﺘﻴﻢ ﻛﻪ ﺗﻤﺎﻣﻲ ﻋﻨﺎﺻﺮ ﻳﻚ ﻟﻴﺴﺖ دوﭘﻴﻮﻧﺪي را ﺑﺼﻮرت ﻓﺸﺮده ذﺧﻴﺮه ﻛﻨﻴﻢ‪ .‬ﺑﺮاي ﻣﺜﺎل‪ ،‬از ‪ m‬ﻣﻜﺎن‬
‫اول ﺑﺮاي ﻧﻤﺎﻳﺶ آراﻳﻪي ﭼﻨﺪﮔﺎﻧﻪ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻴﻢ‪ .‬ﺗﻮﺿﻴﺢ دﻫﻴﺪ ﭼﮕﻮﻧﻪ ﻣﻲﺗﻮان روﻳﻪﻫﺎي ‪ ALLOCATE - OBJECT‬و‬
‫‪ FREE - OBJECT‬را ﭘﻴﺎدهﺳﺎزي ﻛﺮد ﺑﻄﻮرﻳﻜﻪ ﻧﻤﺎﻳﺶ ﻓﺸﺮده ﺑﺎﺷﺪ‪ .‬ﻓﺮض ﻛﻨﻴﺪ ﻫﻴﭻ اﺷﺎرهﮔﺮﺧﺎرﺟﻲ ﺑﻪ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ وﺟﻮد‬
‫ﻧﺪارد‪) .‬راﻫﻨﻤﺎﻳﻲ‪ :‬از ﻧﻤﺎﻳﺶ آراﻳﻪاي ﭘﺸﺘﻪ‪ ،‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪(.‬‬
‫‪ (8‬اﻟﮕﻮرﻳﺘﻤﻲ اراﺋﻪ دﻫﻴﺪ ﺑﺎ زﻣﺎن اﺟﺮاي ‪ ،On6‬ﻛﻪ ﺑﻠﻨﺪﺗﺮﻳﻦ زﻳﺮدﻧﺒﺎﻟﻪي اﻛﻴﺪاً ﺻﻌﻮدي از ﻳﻚ دﻧﺒﺎﻟﻪي ‪ n‬ﺗﺎﻳﻲ اﻋﺪاد را ﺑﻴﺎﺑﺪ‪.‬‬
‫‪2‬‬