ﺑﻪ ﻧﺎم اﻳﺰد ﻣﻨﺎن درس داده ﺳﺎﺧﺘﺎرﻫﺎ و اﻟﮕﻮرﻳﺘﻢ ﻫﺎ ﺗﻤﺮﻳﻦ ﻋﻤﻠﻲ ﺷﻤﺎره دوم ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ 89/9/22 : __________________________________________________________________ ﻓﺎﻳﻞ ﻫﺎي ﻻزم ﺑﺮاي اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ﻣﺮﺑﻮط ﺑﻪ ﻫﺮ ﺳﻮال را در ﭘﻮﺷﻪ اي ﻣﺠﺰا ﺑﻪ ﻧﺎم ﺷﻤﺎره ﺳﻮال ﺑﻪ ﺻﻮرت ﻋﺪدي ﻗﺮار دﻫﻴﺪ ،اﻳﻦ ﭘﻮﺷﻪ ﻫﺎ را در ﻳﻚ ﭘﻮﺷﻪ ﺑﺎ ﻧﺎم stdID_Project2ﻛﻪ ﺑﻪ ﺟﺎي stdIDﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ ﺧﻮد را ﻗﺮار ﻣﻴﺪﻫﻴﺪ ﺑﮕﺬارﻳﺪ ،اﻳﻦ ﭘﻮﺷﻪ را ﻓﺸﺮده ﻛﺮده و ﺗﺎ ﻗﺒﻞ از ﺳﺎﻋﺖ 12ﻧﻴﻤﻪ ﻧﻴﻤﻪ ﺷﺐ ﻣﻮﻋﺪ ﺗﺤﻮﻳﻞ ﻣﺬﻛﻮر ﺑﻪ آدرس [email protected]ارﺳﺎل ﻛﻨﻴﺪ .ﻋﻨﻮان اﻳﻤﻴﻞ ﻫﺎن ﻧﺎم ﻓﺎﻳﻞ ﺿﻤﻴﻤﻪ ﺷﺪه ﺑﺎﺷﺪ. در ﺻﻮرت وﺟﻮد ﻫﺮﮔﻮﻧﻪ اﺑﻬﺎم ﻳﺎ ﭘﺮﺳﺸﻲ در ﻣﻮرد ﺳﻮاﻻت ﺑﻪ آدرس [email protected]اﻳﻤﻴﻞ ﺑﺰﻧﻴﺪ. __________________________________________________________________ ﺳﻮال اول :درﺧﺖ دو ﺑﻌﺪي )(2d-tree ﻫﺪف اﻳﻦ ﺳﻮال ﻃﺮاﺣﻲ و ﭘﻴﺎده ﺳﺎزي داده ﺳﺎﺧﺘﺎر درﺧﺖ 2ﺑﻌﺪي و اﻟﮕﻮرﻳﺘﻢ ﻫﺎي ﻣﺮﺑﻮط ﺑﻪ آن اﺳﺖ. ﻣﻘﺪﻣﻪ: درﺧﺖ 2ﺑﻌﺪي از اﻧﻮاع درﺧﺖ ﻫﺎي k) kd-treeﺑﻌﺪي( اﺳﺖ و ﻫﻤﺎﻧﻄﻮر ﻛﻪ از ﻧﺎم آن ﺑﺮﻣﻴĤﻳﺪ ،ﮔﺮه ﻫﺎي آن ﻣﻮﺟﻮدﻳﺖ ﻫﺎﻳﻲ ﺑﺎ دو ﻛﻠﻴﺪ ﻫﺴﺘﻨﺪ ﻛﻪ ﻛﻠﻴﺪﻫﺎي ﻣﺬﻛﻮر ،ﻣﺨﺘﺼﺎت xو yﻳﻚ ﻧﻘﻄﻪ در ﺻﻔﺤﻪ ﻣﻴﺒﺎﺷﻨﺪ .اﻳﻦ درﺧﺖ ﻧﻴﺰ ﺳﺎﺧﺘﺎر درﺧﺖ دودوﻳﻲ ﺟﺴﺘﺠﻮ را دارد و ﻋﻤﻠﻴﺎت درج و ﺟﺴﺘﺠﻮ روي آن ﺗﺎ ﺣﺪ زﻳﺎدي ﺷﺒﻴﻪ BST اﺳﺖ .ﻋﻤﺪه ﺗﺮﻳﻦ ﻛﺎرﺑﺮد اﻳﻦ ﻧﻮع درﺧﺖ ﻫﺎ ﺑﺮاي ﺗﻘﺴﻴﻢ ﻓﻀﺎﻫﺎي 2ﺑﻌﺪي اﺳﺖ و ﺳﺎﺧﺘﺎر ﺧﺎص آﻧﻬﺎ اﻣﻜﺎن ﺟﺴﺘﺠﻮي ﺧﺎص ﻣﻨﻈﻮره ي ﺑﺎزه اي و ﻳﺎﻓﺘﻦ ﻧﺰدﻳﻚ ﺗﺮﻳﻦ ﻧﻘﻄﻪ ﺑﻪ ﻳﻚ ﻧﻘﻄﻪ را ﺑﺎ ﻣﺮﺗﺒﻪ ارﺗﻔﺎع درﺧﺖ ﻣﻴﺴﺮ ﻣﻴﻜﻨﺪ. ﺻﻮرت ﻣﺴﺎﻟﻪ: در اﻳﻦ ﺗﻤﺮﻳﻦ ﺷﻤﺎ ﺑﺎﻳﺪ داده ﺳﺎﺧﺘﺎر ﻣﺬﻛﻮر را ﺑﻪ ﻫﻤﺮاه ﺗﻮاﺑﻊ ﻻزم ﺑﺮاي درج و ﺣﺬف و ﺟﺴﺘﺠﻮي ﻋﻨﺼﺮ، ﺟﺴﺘﺠﻮي ﺑﺎزه اي و ﻳﺎﻓﺘﻦ ﻧﺰدﻳﻚ ﺗﺮﻳﻦ ﻧﻘﻄﻪ ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ ،ﺳﭙﺲ ﺑﺎ ﺧﻮاﻧﺪن دﺳﺘﻮراﺗﻲ ﺑﺎ ﻗﺎﻟﺐ ﻣﺸﺨﺺ از ورودي اﺳﺘﺎﻧﺪارد ﻋﻤﻠﻴﺎت ﻣﻮرد ﻧﻈﺮ را روي درﺧﺖ اﻧﺠﺎم دﻫﻴﺪ و ﺧﺮوﺟﻲ آن ﻋﻤﻞ را در ﺻﻮرت وﺟﻮد در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﺑﻨﻮﻳﺴﻴﺪ .ﻣﻨﻈﻮر از ﻋﻨﺼﺮ ،ﻧﻘﺎط ﺻﻔﺤﻪ ﻫﺴﺘﻨﺪ و ﺑﺮاي اﻳﻦ ﺳﻮال ﻓﺮض ﻣﻴﺸﻮد ﻛﻪ ﻧﻘﺎﻃﻲ ﻛﻪ ﺑﺎ آﻧﻬﺎ ﻛﺎر ﺧﻮاﻫﻴﺪ ﻛﺮد ﻫﻤﮕﻲ داﺧﻞ ﻣﺮﺑﻊ واﺣﺪ ﻣﺤﻮرﻫﺎي ﻣﺨﺘﺼﺎت و ﺑﺎ دﻗﺖ دو رﻗﻢ اﻋﺸﺎر ﻗﺮار دارﻧﺪ).ﺑﻨﺎﺑﺮاﻳﻦ xو yﺑﻴﻦ 0و 1و ﺑﻪ ﺻﻮرت 0.ddﺧﻮاﻫﻨﺪ ﺑﻮد ﻛﻪ (0=<d<=9ﺑﺎ ﻋﻨﺎﻳﺖ ﺑﻪ اﻳﻨﻜﻪ ﻋﻤﻠﻴﺎت درج و ﺟﺴﺘﺠﻮ در اﻳﻦ ﻧﻮع درﺧﺖ ﻫﺎ اﻧﺪﻛﻲ ﺑﺎ د.د.ج ﺗﻔﺎوت دارد ،ﺷﺮح ﻣﺨﺘﺼﺮي از ﭼﮕﻮﻧﮕﻲ اﻳﻦ اﻋﻤﺎل و ﺧﺮوﺟﻲ ﻫﺎي ﺷﻤﺎ در زﻳﺮ آﻣﺪه اﺳﺖ:1 درج: ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻗﺒﻼً ﮔﻔﺘﻴﻢ در اﻳﻦ درﺧﺖ ،ﻫﺮ ﻋﻨﺼﺮ 2ﻛﻠﻴﺪ دارد ﻟﺬا ﺑﺮاي درج در ﻫﺮ ﻣﺮﺣﻠﻪ از ﻳﻜﻲ از اﻳﻦ دو ﺑﺮاي ﻣﻘﺎﻳﺴﻪ اﺳﺘﻔﺎده ﻣﻴﺸﻮد ﺑﺪﻳﻦ ﺻﻮرت ﻛﻪ ﻫﻨﮕﺎم درج ﻳﻚ ﻋﻨﺼﺮ از رﻳﺸﻪ ﺷﺮوع ﻣﻴﻜﻨﻴﻢ و ﻣﺨﺘﺼﺎت xﻋﻨﺼﺮ را ﺑﺎ ﻣﺨﺘﺼﺎت xرﻳﺸﻪ ﻣﻘﺎﻳﺴﻪ ﻣﻴﻜﻨﻴﻢ و ﻣﺎﻧﻨﺪ د.د.ج اﮔﺮ xﻋﻨﺼﺮ ﻛﻮﭼﻜﺘﺮ ﺑﻮد ﺑﻪ ﭼﭗ و در ﻏﻴﺮاﻳﻨﺼﻮرت ﺑﻪ راﺳﺖ ﻣﻴﺮوﻳﻢ ،ﺳﭙﺲ در اﻳﻦ ﻣﺮﺣﻠﻪ ﻣﺨﺘﺼﺎت yﻋﻨﺼﺮ را ﺑﺎ ﻣﺨﺘﺼﺎت yﮔﺮﻫﻲ ﻛﻪ روي آن ﻗﺮار دارﻳﻢ ﻣﻘﺎﻳﺴﻪ ﻣﻴﻜﻨﻴﻢ و ﻣﺎﻧﻨﺪ ﺑﺎﻻ اﮔﺮ yﻋﻨﺼﺮ ﻛﻮﭼﻜﺘﺮ ﺑﻮد ﺑﻪ ﭼﭗ و در ﻏﻴﺮاﻳﻨﺼﻮرت ﺑﻪ راﺳﺖ ﻣﻴﺮﻳﻢ ،در ﻣﺮﺣﻠﻪ ﺑﻌﺪ دوﺑﺎره xﻫﺎ را ﻣﻘﺎﻳﺴﻪ ﻣﻴﻜﻨﻴﻢ و ﻫﻤﻴﻨﻄﻮر ﺑﻴﻦ اﻳﻦ دو ﺣﺎﻟﺖ اداﻣﻪ ﻣﻴﺪﻫﻴﻢ ﺗﺎ ﺑﻪ ﺑﺮگ ﺑﺮﺳﻴﻢ و ﻋﻨﺼﺮ را در آﻧﺠﺎ ﻗﺮار دﻫﻴﻢ. ﺣﺘﻤﺎً ﻣﺘﻮﺟﻪ ﺷﺪه اﻳﺪ ﻛﻪ ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﭼﻴﻦ درﺧﺘﻲ ﺑﺎﻳﺪ از ﺳﺎﺧﺘﺎر درﺧﺖ ﻗﺮﻣﺰ و ﺳﻴﺎه اﺳﺘﻔﺎده ﻛﻨﻴﺪ و ﻣﺜﻼً در ﮔﺮه ﻫﺎي ﻗﺮﻣﺰx ،ﻫﺎ را ﻣﻘﺎﻳﺴﻪ ﻛﻨﻴﺪ و در ﮔﺮه ﻫﺎي آﺑﻲ yﻫﺎ را .دﺳﺘﻮر درج ﻛﻪ ﺷﻤﺎ ﺑﺎﻳﺪ از ورودي ﺑﺨﻮاﻧﻴﺪ ﺑﻪ ﺻﻮرت Insert x yﺧﻮاﻫﺪ ﺑﻮد ﻛﻪ xو yﻣﺨﺘﺼﺎت ﻧﻘﻄﻪ ﺑﺮاي درج در درﺧﺖ اﺳﺖ و ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻗﺒﻼً ﮔﻔﺘﻪ ﺷﺪ ﺑﺎ دﻗﺖ دو رﻗﻢ اﻋﺸﺎر ﻫﺴﺘﻨﺪ .اﻳﻦ دﺳﺘﻮر ﺧﺮوﺟﻲ اي ﻧﺪارد. ﺟﺴﺘﺠﻮ :ﺑﺮاي ﺟﺴﺘﺠﻮ ﻫﻢ ﻃﺒﻖ ﺗﻮﺿﻴﺤﻲ ﻛﻪ ﺑﺮاي درج ﮔﻔﺘﻪ ﺷﺪ ﺑﺎﻳﺪ ﺑﻪ ﮔﻮﻧﻪ اي ﺑﺎزﮔﺸﺘﻲ ﻋﻤﻞ ﻛﻨﻴﺪ ﻛﻪ در ﻫﺮ ﻣﺮﺣﻠﻪ ﻛﻠﻴﺪ درﺳﺖ ﻣﻘﺎﻳﺴﻪ ﺷﻮد .دﺳﺘﻮر ﺟﺴﺘﺠﻮ ﺑﻪ ﺻﻮرت Search x yاﺳﺖ و ﺷﻤﺎ ﺑﺎﻳﺪ در ﺻﻮرت ﭘﻴﺪا ﺷﺪن ﻋﻨﺼﺮ ،ﺣﺮف Tو در ﻏﻴﺮاﻳﻨﺼﻮرت ﺣﺮف Fرا در ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﻴﺪ. 1ﺑﺮاي آﺷﻨﺎﻳﻲ ﻛﺎﻣﻞ ﺗﺮ ﺑﺎ اﻳﻦ ﻧﻮع درﺧﺖ ﻫﺎ و اﻋﻤﺎل روي آن ﻫﺎ ،اﺳﺘﻔﺎده از ﻣﻨﺎﺑﻊ اﻳﻨﺘﺮﻧﺘﻲ ﺑﻪ ﺧﺼﻮص وﻳﻜﻲ ﭘﺪﻳﺎ ﺑﻪ ﺷﺪت ﺗﻮﺻﻴﻪ ﻣﻴﺸﻮد. ﺣﺬف :ﺑﺮاي ﺣﺬف دﻗﻴﻘﺎً ﻣﺎﻧﻨﺪ د.د.ج ﻋﻤﻞ ﻛﻨﻴﺪ ﻓﻘﻂ ﺑﺮاي ﭘﻴﺪا ﻛﺮدن ﻋﻨﺼﺮ از ﺟﺴﺘﺠﻮي ﮔﻔﺘﻪ ﺷﺪه در ﺑﺎﻻ اﺳﺘﻔﺎده ﻛﻨﻴﺪ .ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﭘﻴﺪا ﻛﺮدن ﻋﻨﺼﺮ ﺑﻌﺪي و ﻗﺒﻠﻲ ﻳﻚ ﻋﻨﺼﺮ در ﭼﻨﻴﻦ درﺧﺘﻲ ﺑﺎﻳﺪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﺮﺣﻠﻪ آن ﺻﻮرت ﮔﻴﺮد ﻳﻌﻨﻲ ﻋﻨﺼﺮ ﺑﻌﺪي ﻧﺴﺒﺖ ﺑﻪ xﺑﺎﻳﺪ ﭘﻴﺪا ﺷﻮد ﻳﺎ .yﻣﺜﻼً اﮔﺮ ﻗﺮار اﺳﺖ رﻳﺸﻪ ﺣﺬف ﺷﻮد ﺑﺎﻳﺪ ﻋﻨﺼﺮ ﺑﻌﺪي ﻧﺴﺒﺖ ﺑﻪ xﺟﺎﻳﮕﺰﻳﻦ آن ﺷﻮد .دﺳﺘﻮر ﺣﺬف ﺑﻪ ﺻﻮرت Del x yاﺳﺖ و ﺧﺮوﺟﻲ اي ﻧﺪارد. ﭼﺎپ ﻋﻨﺎﺻﺮ :ﺑﺮاي ﭼﺎپ ﻋﻨﺎﺻﺮ ﻛﻪ ﺑﺎ دﺳﺘﻮر Printﻣﺸﺨﺺ ﻣﻴﺸﻮد ﺑﺎﻳﺪ از ﭘﻤﺎﻳﺶ ﻣﻴﺎن ﺗﺮﺗﻴﺐ درﺧﺖ اﺳﺘﻔﺎده ﻛﻨﻴﺪ و ﺗﻤﺎم ﻋﻨﺎﺻﺮ درﺧﺖ را در ﻳﻚ ﺳﻄﺮ ﺧﺮوﺟﻲ ﺑﻨﻮﻳﺴﻴﺪ .ﺑﺎﻳﺪ ﻋﻨﺎﺻﺮ ﺑﺎ ﻛﺎﻣﺎ از ﻫﻢ ﺟﺪا ﺷﻮﻧﺪ و ﻣﺨﺘﺼﺎت ﻫﺮ ﻋﻨﺼﺮ ﺑﺎ دو رﻗﻢ اﻋﺸﺎر و ﺑﻪ ﺻﻮرت x yﻧﻮﺷﺘﻪ ﺷﺪه و ﺑﺎ ﻳﻚ ﻓﺎﺻﻠﻪ از ﻫﻢ ﺟﺪا ﺷﻮﻧﺪ .ﻣﺜﻼً ﺑﻪ ﺻﻮرت ﺧﻂ زﻳﺮ: 0.20 0.30,0.50 0.40,0.40 0.70,0.70 0.20 ﺟﺴﺘﺠﻮي ﺑﺎزه اي :در اﻳﻦ ﻧﻮع ﺟﺴﺘﺠﻮ ﻳﻚ ﻣﺴﺘﻄﻴﻞ ﺑﻪ وﺳﻴﻠﻪ ﻣﺨﺘﺼﺎت 4رأس آن ﺑﻪ ﺷﻤﺎ داده ﻣﻴﺸﻮد و ﺷﻤﺎ ﺑﺎﻳﺪ ﺗﻤﺎم ﻋﻨﺼﺮﻫﺎي درﺧﺖ را ﻛﻪ در آن ﻣﺴﺘﻄﻴﻞ ﻳﺎ روي آن ﻗﺮار ﻣﻴﮕﻴﺮﻧﺪ ﭘﻴﺪا ﻛﻨﻴﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘﻲ درﺧﺖ را ﺑﻪ ﺳﻤﺖ ﺑﺮگ ﻫﺎ ﭘﻴﻤﺎﻳﺶ ﻛﻨﻴﺪ و در ﻫﺮ ﻣﺮﺣﻠﻪ ﻓﻘﻂ ﻣﺴﻴﺮي را اﻧﺘﺨﺎب ﻛﻨﻴﺪ ﻛﻪ زﻳﺮدرﺧﺖ آن ﻣﻤﻜﻦ اﺳﺖ ﻧﻘﻄﻪ اي در ﺑﺎزه ﻣﻮرد ﻧﻈﺮ داﺷﺘﻪ ﺑﺎﺷﺪ .ﺑﻨﺎﺑﺮاﻳﻦ از ﭘﻴﻤﺎﻳﺶ ﻛﻞ درﺧﺖ ﺧﻮدداري ﻛﻨﻴﺪ و اﻟﮕﻮرﻳﺘﻢ را ﺑﺎ ﺑﻬﺘﺮﻳﻦ ﻣﺮﺗﺒﻪ اي ﻛﻪ ﻣﻴﺘﻮاﻧﻴﺪ ﺑﻨﻮﻳﺴﻴﺪ .ﻗﺎﻟﺐ اﻳﻦ دﺳﺘﻮر ﭼﻨﻴﻦ اﺳﺖRect Search x1 y1 x2 : y2ﻛﻪ ) (x1,y1ﻣﺨﺘﺼﺎت ﻧﻘﻄﻪ ﺑﺎﻻﻳﻲ ﺳﻤﺖ ﭼﭗ ﻣﺴﺘﻄﻴﻞ و ) (x2,y2ﻣﺨﺘﺼﺎت ﻧﻘﻄﻪ ﭘﺎﻳﻴﻨﻲ ﺳﻤﺖ راﺳﺖ آن اﺳﺖ .ﺷﻤﺎ ﺑﺎﻳﺪ ﺗﻤﺎم ﻧﻘﺎط ﭘﻴﺪا ﺷﺪه را ﺑﻪ ﺗﺮﺗﻴﺐ ﺻﻌﻮدي xو ﺳﭙﺲ ﺻﻌﻮدي yدر ﻳﻚ ﺧﻂ از ﺧﺮوﺟﻲ ﺑﻨﻮﻳﺴﻴﺪ. ﻣﺎﻧﻨﺪ دﺳﺘﻮر ﭼﺎپ ﺑﺎﻳﺪ ﻧﻘﺎط ﺑﺎ ﻛﺎﻣﺎ از ﻫﻢ ﺟﺪا ﺷﻮﻧﺪ و xو yﻧﻴﺰ ﺑﺎ ﻳﻚ ﻓﺎﺻﻠﻪ از ﻫﻢ ﺟﺪا ﺷﻮﻧﺪ. ﻳﺎﻓﺘﻦ ﻧﺰدﻳﻚ ﺗﺮﻳﻦ ﻫﻤﺴﺎﻳﻪ ي ﻳﻚ ﻧﻘﻄﻪ :اﻟﮕﻮرﻳﺘﻢ اﻳﻦ ﻋﻤﻞ ﺑﻪ ﻋﻬﺪه ﺷﻤﺎﺳﺖ ،دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﻓﻘﻂ ﺑﻪ زﻳﺮدرﺧﺖ ﻫﺎﻳﻲ ﺑﺮوﻳﺪ ﻛﻪ ﻧﻴﺎز اﺳﺖ و از ﭘﻴﻤﺎﻳﺶ ﻛﻞ درﺧﺖ ﺧﻮدداري ﻛﻨﻴﺪ .دﺳﺘﻮر اﻳﻦ ﻋﻤﻠﻴﺎت FindCN x y اﺳﺖ و ﺷﻤﺎ ﺑﺎﻳﺪ ﻧﺰدﻳﻚ ﺗﺮﻳﻦ ﻧﻘﻄﻪ را در درﺧﺖ ﻧﺴﺒﺖ ﺑﻪ اﻳﻦ ﻧﻘﻄﻪ ﭘﻴﺪا ﻛﻨﻴﺪ و ﻣﺨﺘﺼﺎت آن را ﺑﻪ ﺻﻮرت x y در ﺧﺮوﺟﻲ ﺑﻨﻮﻳﺴﻴﺪ. ورودي و ﺧﺮوﺟﻲ ﻧﻤﻮﻧﻪ: ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﮔﻔﺘﻪ ﺷﺪ ﺷﻤﺎ ﺑﺎﻳﺪ دﺳﺘﻮرات را از ورودي اﺳﺘﺎﻧﺪارد ﺑﺨﻮاﻧﻴﺪ و ﻧﺘﺎﻳﺞ را در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﺑﻨﻮﻳﺴﻴﺪ. ﻋﺒﺎرت ENDﺑﻪ ﺗﻨﻬﺎﻳﻲ در ﻳﻚ ﺧﻂ ﻧﺸﺎن دﻫﻨﺪه ﭘﺎﻳﺎن دﺳﺘﻮرات اﺳﺖ و ﭘﺲ از آن ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ از اﺟﺮا ﺧﺎرج ﺷﻮد. ﺧﺮوﺟﻲ ورودي Insert 0.70 0.20 Insert 0.50 0.40 Insert 0.90 0.60 0.50 0.40,0.70 0.20,0.90 0.60 T Print Search 0.90 0.60 Del 0.70 0.20 0.50 0.40 FindCN 0.50 0.50 END ﺳﻮال دوم :ﻧﻤﺎﻳﺶ درﺧﺘﻲ s-termﻫﺎ ﻳﻚ s-termﺗﺮﻛﻴﺒﻲ از ﺣﺮف sو ﭘﺮاﻧﺘﺰ اﺳﺖ ﻛﻪ ﺑﻪ ﺻﻮرت زﻳﺮ ﺗﻌﺮﻳﻒ ﻣﻲﺷﻮد: • sﻳﻚ s-termاﺳﺖ. • اﮔﺮ Mو Nدو s-termﺑﺎﺷﻨﺪ (MN) ،ﻫﻢ ﻳﻚ s-termاﺳﺖ. ﻣﺜﺎل((((ss)(ss))s)(ss)) : ﻳﻚ s-termرا ﻣﻲﺗﻮان ﺑﻪ ﺻﻮرت ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻧﺸﺎن داد .ﺑﺮاي ﻣﺜﺎل درﺧﺖ ﻣﺮﺑﻮط ﺑﻪ ﻋﺒﺎرت ﻓﻮق ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ: s s s s s s ﻫﺪف اﻳﻦ اﺳﺖ ﻛﻪ ﺑﺎ درﻳﺎﻓﺖ ﻳﻚ s-termدرﺧﺖ آن ﺳﺎﺧﺘﻪ و ﭼﺎپ ﺷﻮد. ﺑﺮاي ﭼﺎپ اﻳﻦ درﺧﺖ ﺑﻪ رﺋﻮس آن اﻋﺪادي ﺑﻪ ﺷﻴﻮهاي ﻛﻪ ﮔﻔﺘﻪ ﻣﻲﺷﻮد ﻧﺴﺒﺖ داده ﻣﻲﺷﻮد ،و ﺳﭙﺲ ﺑﻪ ﺷﻴﻮه ﻣﻴﺎن ﺗﺮﺗﻴﺐ) (Preorderﻧﻮﺷﺘﻪ ﻣﻲﺷﻮد. ﺑﺮاي ﻧﺴﺒﺖ دادن اﻋﺪاد ﺑﻪ رﺋﻮس درﺧﺖ ،ﺑﻪ رﻳﺸﻪ آن ﻋﺪد 1ﻧﺴﺒﺖ داده ﻣﻲﺷﻮد و ﺳﭙﺲ ﺑﻪ راس ﺳﻤﺖ ﭼﭗ ﻳﻚ راس ﺑﺎ ﻋﺪد ،iﻋﺪد 2*iو ﺑﻪ راس ﺳﻤﺖ راﺳﺖ آن ﻋﺪد 2*i+1ﻧﺴﺒﺖ داده ﻣﻲﺷﻮد. s ﺳﺎﺧﺘﺎر ورودي: ﺧﻂ اول s-term :ﺑﺎ ﺣﺪاﻛﺜﺮ 105ﺣﺮف s ورودي ﺑﺎﻳﺪ از ورودي اﺳﺘﺎﻧﺪارد ﺧﻮاﻧﺪه ﺷﻮد و ﺧﺮوﺟﻲ ﻧﻴﺰ در ﻛﻨﺴﻮل )ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد( ﻧﻮﺷﺘﻪ ﺷﻮد. ﺳﺎﺧﺘﺎر ﺧﺮوﺟﻲ: ﻓﺮض ﻛﻨﻴﺪ ) N=size(treeﻛﻪ treeدرﺧﺖ ﻣﺘﻨﺎﻇﺮ s-termاﺳﺖ. ﺧﻂ اول ﺗﺎ Nام: ﻧﻤﺎﻳﺶ preorderدرﺧﺖ ﻣﺘﻨﺎﻇﺮ ﺑﺎ s-termورودي ﺑﻪ وﺳﻴﻠﻪ اﻋﺪاد ﻧﺴﺒﺖ داده ﺷﺪه ﺑﻪ رﺋﻮس)در ﻫﺮ ﺧﻂ ﻳﻚ ﻋﺪد( ﻣﺤﺪودﻳﺖ زﻣﺎﻧﻲ: 2 :C++ﺛﺎﻧﻴﻪ و 5 :Javaﺛﺎﻧﻴﻪ ﺧﺮوﺟﻲ ﻧﻤﻮﻧﻪ ورودي ﻧﻤﻮﻧﻪ 1 2 4 5 3 )((ss)s ﻧﻜﺎت ﻣﻬﻢ در اﻧﺠﺎم اﻳﻦ ﺗﻤﺮﻳﻦ: اﮔﺮ ﭼﻪ اﺳﺘﻔﺎده از ﻣﻨﺎﺑﻊ اﻳﻨﺘﺮﻧﺘﻲ ﺑﺮاي ﻓﻬﻢ ﺑﻬﺘﺮ اﻳﻦ داده ﺳﺎﺧﺘﺎرﻫﺎ و اﻋﻤﺎل ﻣﺮﺑﻮط ﺑﻪ آن ﻫﺎ ﺗﻮﺻﻴﻪ ﻣﻴﺸﻮد وﻟﻲ ﻫﺮﮔﻮﻧﻪ اﺳﺘﻔﺎده ﻣﺴﺘﻘﻴﻢ از ﻛﺪﻫﺎي ﻣﻮﺟﻮد در اﻳﻨﺘﺮﻧﺖ ﻳﺎ ﻛﺪ دوﺳﺘﺎﻧﺘﺎن ﺑﺎﻋﺚ از دﺳﺖ دادن ﻧﻤﺮه ﺗﻤﺮﻳﻦ و ﻧﻴﺰ ﺟﺮﻳﻤﻪ ﻣﻴﺸﻮد. در اﻧﺠﺎم اﻳﻦ ﺗﻤﺮﻳﻦ ﻣﺠﺎزﻳﺪ ﻛﻪ از ﻫﺮ ﻳﻚ از دو زﺑﺎن C++ﻳﺎ ﺟﺎوا اﺳﺘﻔﺎده ﻛﻨﻴﺪ اﻣﺎ ﻧﻤﻴﺘﻮاﻧﻴﺪ از ﻛﺘﺎﺑﺨﺎﻧﻪ ﻫﺎي آﻣﺎده اﻳﻦ زﺑﺎن ﻫﺎ ﻣﺜﻞ Treeﻳﺎ اﺳﺘﻚ اﺳﺘﻔﺎده ﻛﻨﻴﺪ .اﺳﺘﻔﺎده از Linked listﻫﺎ ﻣﺠﺎز اﺳﺖ. ﺗﻮﺻﻴﻪ ﻣﻴﺸﻮد اﻳﻦ ﺗﻤﺮﻳﻦ را ﺗﺎ ﺣﺪ ﺗﻮان ﺑﻪ ﺻﻮرت ﺷﻲء ﮔﺮا ﺑﻨﻮﻳﺴﻴﺪ ﺗﺎ ﺿﻤﻦ ﺻﺮﻓﻪ ﺟﻮﻳﻲ در ﻛﺪ ،در ﻣﺮاﺣﻞ ﺧﻄﺎﻳﺎﺑﻲ ﻣﺸﻜﻼت ﻛﻤﺘﺮي داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﺣﺘﻲ ﺷﺎﻳﺪ در ﺗﺤﻮﻳﻞ ﺣﻀﻮري ﻧﻤﺮه اﺿﺎﻓﻪ اي ﻧﻴﺰ ﺑﻪ آن ﺗﻌﻠﻖ ﺑﮕﻴﺮد. ﻧﮕﺮان ورودي ﻫﺎي ﻧﺎﻣﻌﻘﻮل و اﺳﺘﺜﻨﺎﺋﺎت ﻧﺎدر ﻧﺒﺎﺷﻴﺪ .اﮔﺮ ﺑﺮﻧﺎﻣﻪ ﺗﺎن ﻣﻨﻄﻘﺎً درﺳﺖ ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺎﺷﺪ اﻣﺘﻴﺎز ﻫﻤﻪ ﺗﺴﺖ ﻫﺎ را ﺧﻮاﻫﺪ ﮔﺮﻓﺖ. ﻓﺎﻳﻞ اﺻﻠﻲ ﻫﺮ ﺳﻮال ﺑﺎﻳﺪ ﺑﺎ ﻧﺎم Main.javaﻳﺎ Main.cppو داﺧﻞ ﭘﻮﺷﻪ ﻣﺨﺼﻮص آن ﺳﻮال ﺑﺎﺷﺪ. ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ.
© Copyright 2024 Paperzz