HEAP 1 ﺑﺎ ﺳﻼم و ﻋﺮض ﭘﻮزش ﺑﺮاي ﺗﺎﺧﻴﺮ در ارﺳﺎل ﻓﺎﻳﻞ ذﻛﺮ ﭼﻨﺪ ﻧﻜﺘﻪ را ﺑﺮاي داوﻃﻠﺒﻴﻦ ﻣﺤﺘﺮم ﻻزم ﻣﻲ داﻧﻢ: -1در اﻳﻦ ﻣﺠﻤﻮﻋﻪ ﻛﻪ ﻳﻜﻲ از ﻓﺼﻠﻬﺎي آن )ﻓﺼﻞ (heapدر اداﻣﻪ ﺗﻘﺪﻳﻢ ﻣﻲ ﮔﺮدد .ﺳﻌﻲ ﺑﺮآن ﺷﺪه اﺳﺖ ﻛﻪ از ﺗﺠﺮﺑﻴﺎت ﺗﺪرﻳﺲ در ﻛﻼﺳﻬﺎي ﻣﺨﺘﻠﻒ اﺳﺘﻔﺎده ﺷﻮد و ﺗﺎ ﺟﺎي ﻣﻤﻜﻦ ﺗﻤﺎم ﺳﻠﻴﻘﻪ ﻫﺎ را ﭘﻮﺷﺶ دﻫﺪ -2در ﺳﻮاﻻت اﻧﺘﻬﺎي ﻓﺼﻞ از ﻣﺠﻤﻮﻋﻪ ﺳﻮاﻻت ﻛﻨﻜﻮر ،داﻧﺸﮕﺎه ﻣﻌﺘﺒﺮ ، MITﻛﺘﺎب CLRSو ﺳﺎﻳﺘﻬﺎي ﻣﻌﺘﺒﺮ ﻛﻪ ﺳﻮاﻻت ﻛﻨﻜﻮر از آن ﻃﺮح ﻣﻲ ﺷﻮد اﺳﺘﻔﺎده ﺷﺪه اﺳﺖ ﺑﻄﻮر ﻣﺜﺎل در دو ﺳﺎل ﮔﺬﺷﺘﻪ ﺳﻮاﻻت ﻣﺮﺑﻮط ﺑﻪ ﻓﺼﻞ hashاز آدرس زﻳﺮ ﻛﭙﻲ ﺷﺪه اﺳﺖ ﺧﻮدﺗﺎن ﻣﺸﺎﻫﺪه و ﻗﻀﺎوت ﻛﻨﻴﺪ ﻛﻨﻜﻮر :93 http://math.stackexchange.com/questions/915009/hashing-with-chaining-collision ﻛﻨﻜﻮر http://math.stackexchange.com/questions/1145022/hash-with-chaining-problems?rq=1 :94 ﻣﺠﻤﻮﻋﻪ اي ﻛﻪ در ﺷﻬﺮﻳﻮر 1394آﻣﺎده ﻣﻲ ﺷﻮد ﺑﻪ ﮔﻮﻧﻪ اي اﺳﺖ ﻛﻪ در ﻛﻤﺘﺮﻳﻦ زﻣﺎن ﻣﻲ ﺗﻮاﻧﺪ ﻣﻄﺎ ﻟﺐ ﻛﻨﻜﻮر و ﻣﺮﺗﺒﻂ ﺑﺎ ﻛﺘﺎب CLRSو ﻫﻤﻴﻨﻄﻮر ﺳﻮاﻻت ﻛﺘﺎب 600ﻣﺴﺌﻠﻪ را ﺑﺎ ﺑﻴﺎﻧﻲ ﺳﺎده ﺗﺮ در اﺧﺘﻴﺎر داوﻃﻠﺒﺎن ﻗﺮار دﻫﺪ اﻣﻴﺪ وارم ﻛﻪ اﻳﻨﻄﻮر ﺑﺎﺷﺪ ﺧﻮاﻫﺸﻤﻨﺪ اﺳﺖ ﺑﺎ ﻣﻄﺎﻟﻌﻪ ﻓﺼﻞ ﺣﺎﺿﺮ ﻧﻈﺮات و ﭘﻴﺸﻨﻬﺎدات ﺧﻮد را ﺑﻪ آدرس mh_tourani@yahoo.comارﺳﺎل ﻓﺮﻣﺎﻳﻴﺪ. ﺑﺎ اﺣﺘﺮام ﻣﺤﺴﻦ ﻃﻮراﻧﻲ 2 ﺳﺎﺧﺘﻤﺎن داده HEAP ﭘﻴﺸﻨﻴﺎز ﻓﺼﻞ :ﻣﺮﺗﺒﻪ زﻣﺎﻧﻲ ،ﺗﻮاﺑﻊ ﺑﺎزﮔﺸﺘﻲ ،درﺧﺘﻬﺎي دودوﻳﻲ : max treeدرﺧﺖ دودوﻳﻲ ﻛﻪ در آن ﻣﻘﺪار ﻛﻠﻴﺪ در ﻫﺮ ﮔﺮه ﺑﺰرگﺗﺮ ﻳﺎ ﻣﺴﺎوي ﺑﺎ ﻓﺮزﻧﺪاﻧﺶ ﺑﻮده و رﻳﺸﻪ درﺧﺖ ﺑﺰرگﺗﺮﻳﻦ ﻣﻘﺪار ﻛﻠﻴﺪ را دارد. : min treeدرﺧﺘﻲ دودوﻳﻲ ﻛﻪ در آن ﻣﻘﺪار ﻛﻠﻴﺪ در ﻫﺮ ﮔﺮه ﻛﻮﭼﻚﺗﺮ ﻳﺎ ﻣﺴﺎوي ﺑﺎ ﻓﺮزﻧﺪاﻧﺶ ﺑﻮده و رﻳﺸﻪ درﺧﺖ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻣﻘﺪار ﻛﻠﻴﺪ را دارد. ﻧﺎم ﺳﺎﺧﺘﺎر ﻣﻮارد اﺳﺘﻔﺎده ) HEAPﻫﺮم ،ﻛﻮﻣﻪ ،آراﻳﻪ ﻧﻴﻤﻪ ﻣﺮﺗﺐ(...، ﺻﻒ اوﻟﻮﻳﺖ ،ﻣﺮﺗﺐﺳﺎزي ،ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ ﺳﺎﺧﺘﻤﺎن دادهآي از ﻧﻮع آراﻳﻪ اﺳﺖ ﻛﻪ ﺑﻪ ﺻﻮرت ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻧﻤﺎﻳﺶ داده ﺷﺪه و ﺑﺮ دو ﻧﻮع اﺳﺖ max heap :و ، min heapدر ﺻﻮرﺗﻲ ﻛﻪ ﻧﻮعِ heapﻣﺸﺨﺺ ﻧﺒﺎﺷﺪ ﺑﻪ ﻃﻮر ﭘﻴﺶ ﻓﺮض آن را max heapدر ﻧﻈﺮ ﻣﻲﮔﻴﺮﻳﻢ ،ﻋﻠﺖ اﻳﻦ اﻣﺮ ﻣﺮﺑﻮط ﺑﻪ ﻳﻜـﻲ از ﻛﺎرﺑﺮدﻫـﺎي درﺧـﺖ )ﺻـﻒ اوﻟﻮﻳـﺖ( ﻣﻲﺑﺎﺷﺪ ﻛﻪ در ﻣﺒﺤﺚ ﻣﺮﺑﻮﻃﻪ ﺑﻪ آن ﺧﻮاﻫﻴﻢ ﭘﺮداﺧﺖ،در اداﻣﻪ ﺑﻪ ﺑﺮرﺳﻲ و ﺗﺤﻠﻴﻞ ﻫﺮﻳﻚ از اﻳﻦ دو ﻧﻮع ﻣﻲﭘﺮدازﻳﻢ: ﻣﺜﺎل ﺗﻌﺮﻳﻒ ﺳﺎﺧﺘﺎر ﻧﺎم ﺳﺎﺧﺘﺎر max heap درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻛﻪ وﻳﮋﮔﻲ درﺧﺖ max treeرا داﺷﺘﻪ ﺑﺎﺷﺪ. HEAP min heap ﻧﻤﺎﻳﺶ درﺧﺖ 3 درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻛﻪ وﻳﮋﮔﻲ درﺧﺖ min treeرا داﺷﺘﻪ ﺑﺎﺷﺪ. Heap درﺧﺖ heapﻫﻤﻮاره ﺑﻪ ﻳﻜﻲ از دو ﺷﻜﻞِ »درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ« ﻳﺎ »آراﻳﻪ« ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮد ،اﻳﻦ ﻧﻤﺎﻳﺶ ﺑﺮاي ﻳﻚ heapﺑـﺎ 10ﮔـﺮه ﺑـﻪ ﺷـﻜﻞ زﻳـﺮ ﺧﻮاﻫﺪ ﺑﻮد : ﻫﻤﺎنﻃﻮر ﻛﻪ در ﺷﻜﻞ ﻣﻲﺑﻴﻨﻴﺪ ﺷﻤﺎره اﻧﺪﻳﺲ 1ﻣﺘﻌﻠﻖ ﺑﻪ رﻳﺸﻪ ﺑﻮده ﻫﻤﭽﻨﻴﻦ ﺑﺎ داﺷﺘﻦ ﺷﻤﺎره اﻧﺪﻳﺲِ iﺑﺮاي ﻫـﺮ ﮔـﺮه ﺑـﻪ ﺳـﺎدﮔﻲ ﻣـﻲﺗـﻮاﻧﻴﻢ ﺷـﻤﺎره اﻧﺪﻳﺲﻫﺎي ﮔﺮه ﭘﺪر )واﻟﺪ( ،ﻓﺮزﻧﺪ ﭼﭗ و ﻓﺮزﻧﺪ راﺳﺖ را ﺑﺮاي آن ﮔﺮه ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﻢ. LEFT i Right i return 2i 1 parent i i return return 2i 2 maxheap minheap وﻳﮋﮔﻲﻫﺎي Lengthو heap sizeدر ﻧﻤﺎﻳﺶ آراﻳﻪ :A.Lengthﺗﻌﺪاد ﻋﻨﺎﺻﺮ در آراﻳﻪ Aرا ﻧﺸﺎن ﻣﻲدﻫﺪ. : :A.heap _ sizeﺗﻌﺪاد ﻋﻨﺎﺻﺮي از heapﻛﻪ در آراﻳﻪ Aذﺧﻴﺮه ﺷﺪه اﺳﺖ و ﺑﻪ ﻋﻨﻮان ﻋﻨﺎﺻﺮ ﻣﻌﺘﺒﺮ ﻣﺤﺴﻮب ﻣﻲﺷﻮﻧﺪ. 0 A.heap _ size A.Length دﻗﺖ ﻛﻨﻴﺪ :ﺻﺮفﻧﻈﺮ از اﻳﻦ ﻛﻪ ﭼﻪ ﻋﻨﺎﺻﺮي در آراﻳﻪ A 1...Length ﻗـﺮار دارﻧـﺪ ﻓﻘـﻂ و ﻓﻘـﻂ ﻋﻨﺎﺻـﺮي از heapﻣﻌﺘﺒـﺮ ﺧﻮاﻫﻨـﺪ ﺑـﻮد ﻛـﻪ در ﺑـﺎزة A 1..heap _ size ﻗﺮار دارﻧﺪ .ﺑﻪ ﻣﺜﺎل زﻳﺮ دﻗﺖ ﻛﻨﻴﺪ، 4 ﺳﺎﺧﺘﻤﺎن داده ﺑﺎ اﻳﻦ ﻛﻪ A.length 9اﺳﺖ اﻣﺎ از آن ﺟﺎ ﻛﻪ A heap _ size 6اﺳﺖ ﻓﻘﻂ ﺷﺶ ﻋﻀﻮ از آراﻳﻪ ﺑﻪ ﻋﻨﻮان ﻋﻨﺎﺻﺮي از heapﻣﻌﺘﺒﺮ ﻫﺴﺘﻨﺪ. ﻋﻤﻖ ﮔﺮه در درﺧﺖ Heap ﻋﻤﻖ ﻫﺮ ﮔﺮه دﻟﺨﻮاه ﺑﺎ ﺷﻤﺎرة iدر ﻳﻚ درﺧﺖ Heapﻣﺎﻧﻨﺪ ﻫﺮ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﺑﺮاﺑﺮ ﺑﺎ lg i اﺳﺖ. ﻋﻤﻖ درﺧﺖ Heap ﻫﻤﺎنﻃﻮر ﻛﻪ ﻣﻲداﻧﻴﻢ ﻋﻤﻖ ﻫﺮ درﺧﺖ ﺑﺮاﺑﺮ ﺑﺎ ﻋﻤﻖِ ﭘﺎﻳﻴﻦﺗﺮﻳﻦ ﺑﺮگ آن اﺳﺖ در درﺧﺖ heapﻣﺎﻧﻨﺪ ﻫﺮ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ،آﺧﺮﻳﻦ ﮔﺮه ﺑﺎ ﺷﻤﺎرة nﺑﻪ ﻋﻨﻮان ﻳﻜﻲ از ﭘﺎﻳﻴﻦﺗﺮﻳﻦ ﺑﺮگﻫﺎ ﺷﻨﺎﺧﺘﻪ ﻣﻲﺷﻮد ﺑﻨﺎﺑﺮاﻳﻦ ﻋﻤﻖ اﻳﻦ ﮔﺮه ﻫﻤﺎن ﻋﻤﻖ درﺧﺖ ﺧﻮاﻫﺪ ﺑﻮد: lg n ﻋﻤﻖ درﺧﺖ heap ارﺗﻔﺎع ﮔﺮه در درﺧﺖ Heap n ارﺗﻔﺎع ﻫﺮ ﮔﺮه دﻟﺨﻮاه ﺑﺎ ﺷﻤﺎرة iدر ﻳﻚ درﺧﺖ Heapﺑﺎ nﻛﻠﻴﺪ ﻣﺎﻧﻨﺪ ﻫﺮ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﺑﺮاﺑﺮ ﺑﺎ lg اﺳﺖ. i ارﺗﻔﺎع درﺧﺖ Heap ﻫﻤﺎنﻃﻮر ﻛﻪ ﻣﻲداﻧﻴﻢ ارﺗﻔﺎع ﻫﺮ درﺧﺖ ﺑﺮاﺑﺮ ﺑﺎ ارﺗﻔﺎع ﮔﺮه رﻳﺸﻪ i 1اﺳﺖ n lg lg n ارﺗﻔﺎع درﺧﺖ heap 1 راﺑﻄﻪ ﺑﺎزﮔﺸﺘﻲ ارﺗﻔﺎع درﺧﺖ Heap در درﺧﺖ heapﻣﺎﻧﻨﺪ ﻫﺮ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ،ﺑﻴﺶﺗﺮﻳﻦ ارﺗﻔﺎع زﻣﺎﻧﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ﻛﻪ در آن ﺳﻄﺢ آﺧﺮ دﻗﻴﻘﺎً ﻧﻴﻤﻪ ﭘﺮ ﺑﺎﺷﺪ ،ﭼـﺮا ﻛـﻪ در اﻳـﻦ ﺻـﻮرت ﺗﻌﺪاد ﺑﻴﺶﺗﺮي ﮔﺮه در ﻳﻚ زﻳﺮ درﺧﺖ ﻗﺮار ﮔﺮﻓﺘﻪاﻧﺪ ﺑﻪ ﺷﻜﻞ زﻳﺮ دﻗﺖ ﻛﻨﻴﺪ: اﮔﺮ H n راﺑﻄﻪ ﺑﺎزﮔﺸﺘﻲ ﻣﺮﺑﻮط ﺑﻪ ارﺗﻔﺎع درﺧﺖ Heapﺑﺎ nﮔﺮه ﺑﺎﺷﺪ آﻧﮕﺎه ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺷﻜﻞ ﻓﻮق رواﺑﻂ زﻳﺮ ﺑﺮاي آن ﺑﺮﻗﺮار اﺳﺖ: 2n H n H 1 H n O lg n 3 H n lg n H n H n 1 H n lg n 3 HEAP ﺣﺪاﻛﺜﺮ ﮔﺮه ﺑﻪ ارﺗﻔﺎع 5 h n ﮔﺮه ﺑﻪ ارﺗﻔﺎع h در ﻫﺮ درﺧﺖ Heapﺑﺎ nﻋﻨﺼﺮ ﺣﺪاﻛﺜﺮ 2h 1 وﺟﻮد دارد clrs, 6.3 3 . ﻫﻤﺎنﻃﻮر ﻛﻪ ﻣﻲداﻧﻴﺪ درﺧﺖ دودوﻳﻲ ﭘﺮ ﺣﺎﻟﺖ ﺧﺎﺻﻲ از درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ )ﻣﺎﻧﻨﺪ ( Heap :اﺳﺖ ﻛﻪ در آن ﺳﻄﺢ آﺧﺮ ﻧﻴﺰ ﻣﺎﻧﻨﺪ ﺳﻄﻮحِ ﻣﺎﻗﺒﻞ ﻛﺎﻣﻼً ﭘﺮ اﺳﺖ در اﻳﻦ وﺿﻌﻴﺖ ﺑﺮاي ﻫﺮ ارﺗﻔﺎﻋﻲ از درﺧﺖ ﺣﺪاﻛﺜﺮ ﮔﺮه را ﺧﻮاﻫﻴﻢ داﺷﺖ ،ﺑﻪ ﻣﺜﺎل زﻳﺮ ﺑﺮاي ﻳﻚ درﺧﺖ دودوﻳﻲ ﭘﺮ ﺑـﺎ n 15ﮔـﺮه ﺗﻮﺟـﻪ ﻛﻨﻴـﺪ ﺗـﺎ درﺳﺘﻲ ﻋﺒﺎرت ﺑﺎﻻ ﻣﺸﺨﺺ ﺷﻮد: ﺑﺮرﺳﻲ heap آراﻳﺔ nﺧﺎﻧﻪايِ Aرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺑﺮاي ذﺧﻴﺮهﺳﺎزي ﻋﻨﺎﺻﺮ ﻳﻚ درﺧﺖ دودوﻳﻲِ ﻛﺎﻣﻞ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ ،ﺑﺮاي ﺑﺮرﺳﻲ اﻳﻦ ﻣﻮﺿـﻮع ﻛـﻪ آﻳﺎ اﻳﻦ درﺧﺖ دودوﻳﻲ ﻳﻚ درﺧﺖ Heapاﺳﺖ ﻳﺎ ﺧﻴﺮ ،اﺑﺘﺪا ﺑﻪ وﺿﻌﻴﺖ ﮔﺮهﻫﺎ ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﻲﭘﺮدازﻳﻢ: ﺑﻮدنِ ﻳﻚ درﺧﺖ دودوﻳﻲ n ﮔﺮه ﻫﺎي ﺑﺮگ :ﻋﻨﺎﺻﺮ زﻳﺮ آراﻳﻪ A 1,..., n ﻫﻤﮕﻲ ﺑﺮگ ﺑﻮده و ﻫﺮﻛﺪام ﻳﻚ heapﺑﺎ ﻳﻚ ﻋﻨﺼﺮ ﻫﺴﺘﻨﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﻧﻴﺎزي ﺑﻪ ﻛﻨﺘﺮل ﻧﺪارﻧﺪ. 2 n ﮔﺮه ﻫﺎي ﻏﻴﺮ ﺑﺮگ :ﻋﻨﺎﺻﺮ زﻳﺮ آراﻳﻪ A 1,..., ﻫﻤﮕﻲ ﻏﻴﺮ ﺑﺮگ ﺑﻮده و ﻫﺮﻳﻚ از آﻧﻬﺎ ﺑﺎﻳﺪ ﺑﺎ ﻓﺮزﻧﺪاﻧﺶ ﻣﻘﺎﻳﺴﻪ ﺷﻮد 2 n اﻟﮕﻮرﻳﺘﻢ ﻛﺎرا :ﻳﻚ اﻟﮕﻮرﻳﺘﻢ ﻛﺎرا ﺣﺪاﻛﺜﺮ ﺑﺎ 2 ﻣﻘﺎﻳﺴﻪ ﺑﺮاي ﻫﻤﻪ ﻋﻨﺎﺻﺮ ﻏﻴﺮﺑﺮگ در زﻣﺎن O n ﻣﻲﺗﻮاﻧﺪ ﺗﺸﺨﻴﺺ دﻫـﺪ ﻛـﻪ آﻳـﺎ ﻳـﻚ درﺧـﺖ 2 دودوﻳﻲِ ﻛﺎﻣﻞ ﺑﺎ nﮔﺮه ،ﻳﻚ درﺧﺖ heapاﺳﺖ ﻳﺎ ﺧﻴﺮ. Kاﻣﻴﻦ ﺑﺰرگﺗﺮ در max - heap در ﺻﻮرﺗﻴﻜﻪ ﻳﻚ max heapﺣﺎويِ nﻛﻠﻴﺪ ﻣﺘﻤﺎﻳﺰ x n ,..., x 2 , x1ﺑﺎﺷﺪ آﻧﮕﺎه ﻣﻮﻗﻌﻴﺖﻫﺎي ﻣﺠﺎز ﺑﺮاي ﻗﺮارﮔﻴـﺮيِ اوﻟـﻴﻦ ﺑـﺰرگﺗـﺮﻳﻦ ﺗـﺎ Kاُﻣـﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻛﻠﻴﺪ ﺑﻪ ﺷﺮح زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد: اوﻟﻴﻦ ﺑﺰرگﺗﺮﻳﻦ دوﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﺳﻮﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﭼﻬﺎرﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ Kاُﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﺳﻄﻮح ﻣﺠﺎز اول دوم دوم ﺗﺎ ﺳﻮم دوم ﺗﺎ ﭼﻬﺎرم A 2,..., 7 دوم ﺗﺎ Kام ﺧﺎﻧﻪﻫﺎي ﻣﺠﺎز ) A 1رﻳﺸﻪ( A 2,3 A 2,..., 7 A 2,.., 2 1 k ﺑﺮاي درك ﺑﻬﺘﺮ ،ﻧﺤﻮه ﻗﺮار ﮔﻴﺮي Kاُﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻛﻠﻴﺪ را از ﺣﺪاﻗﻞ اﻧﺪﻳﺲ ﺗﺎ ﺣﺪاﻛﺜﺮ اﻧﺪﻳﺲ ﺑﺮرﺳﻲ ﻣﻲ ﻛﻨﻴﻢ: 6 ﺳﺎﺧﺘﻤﺎن داده در ﺻﻮرﺗﻲ ﻛﻪ دوﻣﻴﻦ ﺑﺰرگﺗـﺮﻳﻦ ﺗـﺎ K 1اُﻣـﻴﻦ ﺑـﺰرگﺗـﺮﻳﻦ در زﻳـﺮ درﺧﺖ راﺳﺖ از رﻳﺸﻪ ﻗﺮار ﮔﻴﺮﻧﺪ آﻧﮕﺎه Kاُﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻛﻠﻴﺪ ﻣﻲﺗﻮاﻧﺪ در ﺧﺎﻧﻪ ﺷﻤﺎره 2از ﺳﻄﻮح دوم ﻗﺮار ﮔﻴﺮد).اﻟﺒﺘﻪ اﻳﻦ ﺑﻪ ﺷﺮﻃﻲ اﺳﺖ ﻛﻪ ﺑﻪ ﺗﻌﺪاد ﻧﺎﻣﺤﺪود ﮔﺮه داﺷﺘﻪ ﺑﺎﺷﻴﻢ( درﺻﻮرﺗﻴﻜﻪ از ﺳﻄﺢ اول ﺗﺎ ﺳﻄﺢ kاُم در ﻫﺮ ﺳﻄﺢ ﻳﻚ ﻣﺎﻛﺰﻳﻤﻢ ﻗﺮار دﻫﻴﻢ آﻧﮕﺎه ﻣﺎﻛﺰﻳﻤﻢ kاُم در آﺧﺮﻳﻦ ﮔﺮه ﺳﻄﺢ kاُم ﻳﻌﻨﻲ اﻧﺪﻳﺲِ 2k 1ﻗﺮار ﺧﻮاﻫﺪ ﮔﺮﻓﺖ. Kاُﻣﻴﻦ ﻛﻮﭼﻚﺗﺮ در min - heap ﺑﻪ ﻃﻮر ﻣﺸﺎﺑﻪ ﻣﻲ ﺗﻮاﻧﻴﻢ وﺿﻌﻴﺖ Kاُﻣﻴﻦ ﻛﻮﭼﻜﺘﺮ را در در ﺧﺖ min heapﻣﺎﻧﻨﺪ در ﺧﺖ max heapداﺷﺘﻪ ﺑﺎﺷﻴﻢ . ﺟﺴﺘﺠﻮ در Heap از آن ﺟﺎ ﻛﻪ در ﻫﻴﭽﻴﻚ از اﻫﺪاف و ﻛﺎرﺑﺮدﻫﺎي ﻃﺮاﺣﻲ ﺳﺎﺧﺘﺎر Heapﻧﻴﺎزي ﺑﻪ ﻋﻤﻞ ﺟﺴﺘﺠﻮ ﻧﻴﺴﺖ ﺑﻨﺎﺑﺮاﻳﻦ اﻳﻦ درﺧـﺖ ﺑـﺮاي ﻋﻤـﻞ ﺟـﺴﺘﺠﻮ ﻣﻨﺎﺳـﺐ ﻧﻴﺴﺖ ﺑﺎ اﻳﻦ ﺣﺎل ﺗﺤﻠﻴﻞ زﻣﺎن ﺟﺴﺘﺠﻮ در اﻳﻦ ﺳﺎﺧﺘﺎر ﺑﺮاي ﺑﺎزﻳﺎﺑﻲ دادهﻫﺎي ﻣﺨﺘﻠﻒ ﺣﺎﺋﺰ اﻫﻤﻴﺖ اﺳﺖ. ﺟﺴﺘﺠﻮي ﻛﻠﻴﺪ دﻟﺨﻮاه ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻦ ﻛﻪ آراﻳﺔ ﻧﻤﺎﻳﺶ دﻫﻨﺪة ﻳﻚ درﺧﺖ Heapاﻟﺰاﻣﺎً ﻣﺮﺗﺐ ﻧﻴﺴﺖ ﺑﻨﺎﺑﺮاﻳﻦ اﻣﻜﺎن ﺟﺴﺘﺠﻮي دودوﻳﻲ در آن وﺟﻮد ﻧﺪاﺷﺘﻪ و ﺗﻨﻬﺎ ﻣـﻲﺗـﻮاﻧﻴﻢ ﺑـﻪ روش ﺟﺴﺘﺠﻮي ﺧﻄﻲ اﻛﺘﻔﺎ ﻛﻨﻴﻢ .زﻣﺎن اﺟﺮاO n : ﺟﺴﺘﺠﻮي ﻣﻲﻧﻴﻤﻢ و ﻣﺎﻛﺰﻳﻤﻢ : max Heap ﺟﺴﺘﺠﻮي ﻣﺎﻛﺰﻳﻤﻢ :اﻳﻦ ﻛﻠﻴﺪ در رﻳﺸﻪ درﺧﺖ ﻗﺮار داﺷﺖ و در زﻣﺎن O 1ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮد. n n ﺟﺴﺘﺠﻮي ﻣﻲﻧﻴﻤﻢ :اﻳﻦ ﻛﻠﻴﺪ در ﻳﻜﻲ از ﺑﺮگﻫﺎي درﺧﺖ واﻗﻊ در زﻳﺮ آراﻳﻪ A 2 1,..., n ﻛﻪ ﺗﻌﺪاد آنﻫﺎ 2 ﻣﻘﺎﻳﺴﻪ در زﻣﺎن O n ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮد. : min Heap ﺟﺴﺘﺠﻮي ﻣﻲﻧﻴﻤﻢ :اﻳﻦ ﻛﻠﻴﺪ در رﻳﺸﻪ درﺧﺖ ﻗﺮار داﺷﺘﻪ و در زﻣﺎن O 1ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮد. n اﺳﺖ ﻗـﺮار داﺷـﻪ و ﺑـﺎ 2 1 n n n ﺟﺴﺘﺠﻮي ﻣﺎﻛﺰﻳﻤﻢ :اﻳﻦ ﻛﻠﻴﺪ در ﻳﻜﻲ از ﺑﺮگﻫﺎي درﺧﺖ واﻗﻊ در زﻳﺮ آراﻳﻪ A 2 1,..., n ﻛﻪ ﺗﻌﺪاد آنﻫﺎ 2 اﺳﺖ ﻗﺮار داﺷـﺘﻪ و ﺑـﺎ 2 1 ﻣﻘﺎﻳﺴﻪ در زﻣﺎن O n ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮد. ﻧﺘﻴﺠﻪ: max Heap min Heap ﺣﻔﻆ وﻳﮋﮔﻲ On On On O 1 O 1 On Heap روال ، MAX HEAPIFYﺑﺮاي ﺣﻔﻆ وﻳﮋﮔﻲ max heapﺑﻪﻛﺎر ﻣﻲرود .ورودي آن آراﻳﻪي Aو اﻧﺪﻳﺲ iدر آراﻳﻪ اﺳﺖ .زﻣـﺎﻧﻲﻛـﻪ اﻳـﻦ روال را، ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﻴﻢ ﻓﺮض ﻣﻲﺷﻮد ﻛﻪ درﺧﺖﻫﺎي دودوﻳﻲ ﻣﺸﺘﻖ ﺷﺪه از LEFT i و ، RIGHT i ﺧﻮد ﺑـﻪ ﺗﻨﻬـﺎﻳﻲ ﻳـﻚ max heapﻫـﺴﺘﻨﺪ .وﻟـﻲ HEAP ﻋﻨﺼﺮ A i ﻣﻤﻜﻦ اﺳﺖ ﻛﻮﭼﻚﺗﺮ از ﻓﺮزﻧﺪاﻧﺶ ﺑﺎﺷﺪ .در ﻧﺘﻴﺠﻪ وﻳﮋﮔﻲ max heap از ﺑﻴﻦ ﻣﻲرود .وﻇﻴﻔﻪ روال MAX HEAPIFY ﻣﻘﺪار ﻣﻮﺟﻮد در A i را ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ ﺣﺮﻛﺖ دﻫﺪ ﺗﺎ درﺧﺖ ﻣﺸﺘﻖ ﺷﺪه از iﺑﻪ ﻳﻚ max heapﺗﺒﺪﻳﻞ ﺷﻮد. 7 آن اﺳﺖ ﻛـﻪ MAX - HEAPIFY A ,i 1 l LEFT i 2 r RIGHT i if l A.heap size and A l A i 3 Largest l 4 else Largest i 5 if r A.heap size and A r A Largest 6 Largest r if Largest i exchange A i with A Largest MAX - HEAPIFY A , Largest 7 8 9 10 در ﻫﺮ ﺑﺎر اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ در ﺧﻄﻮط 1ﺗﺎ 7ﮔﺮه iﺑﺎ ﻓﺮزﻧﺪاﻧﺶ ﻣﻘﺎﻳﺴﻪ ﺷﺪه و اﻧﺪﻳﺲِ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨـﺼﺮ در ﻣﺘﻐﻴـﺮ L arg estﻗـﺮار ﻣـﻲﮔﻴـﺮد در اﻳـﻦ وﺿﻌﻴﺖ ﻫﻨﮕﺎم رﺳﻴﺪن ﺑﻪ دﺳﺘﻮر ifدر ﺧﻂ 8دو ﺣﺎﻟﺖ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ: ﺣﺎﻟﺖ اول L arg est i : اﮔﺮ L arg est iﺑﺎﺷﺪ ﻳﻌﻨﻲ ﮔﺮه iاز ﻓﺮزﻧﺪاﻧﺶ ﺑﺰرگﺗﺮ ﻳﺎ ﻣﺴﺎوي اﺳﺖ ﺑﻨﺎﺑﺮاﻳﻦ زﻳﺮ درﺧﺖ ﻣـﺸﺘﻖ ﺷـﺪه از ﮔـﺮه iﻳـﻚ max Heapاﺳـﺖ ﭘـﺲ اﻟﮕﻮرﻳﺘﻢ ﺑﻪ ﭘﺎﻳﺎن ﻣﻲرﺳﺪ. ﺣﺎﻟﺖ دوم L arg est i : اﮔﺮ L arg est i ﺑﺎﺷﺪ ﻳﻌﻨﻲ ﻳﻜﻲ از ﻓﺮزﻧﺪانِ ﮔﺮه iﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ اﺳﺖ ﺑﻨﺎﺑﺮاﻳﻦ ﮔﺮه iﺑﺎ آن ﻓﺮزﻧﺪ ﺟﺎﺑﺠﺎ ﺷﺪه )ﺧـﻂ ( 9و اﻟﮕـﻮرﻳﺘﻢ ﺑـﻪ ﺻـﻮرت ﺑﺎزﮔﺸﺘﻲ روي اﻧﺪﻳﺲِ ﺟﺪﻳﺪ i دوﺑﺎره ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮد) .ﺧﻂ ، ( 10اﻳﻦ وﺿﻌﻴﺖ ﺣﺪاﻛﺜﺮ ﺗﺎ رﺳﻴﺪن ﮔﺮه ﻣﻮرد ﻧﻈﺮ ﺑﻪ ﻳﻜﻲ از ﺑﺮﮔﻬﺎ ﻣﻤﻜﻦ اﺳﺖ اداﻣﻪ ﭘﻴﺪا ﻛﻨﺪ. 8 ﺳﺎﺧﺘﻤﺎن داده ﺗﺤﻠﻴﻞ اﻟﮕﻮرﻳﺘﻢ MAX HEAPIFY در ﺻﻮرﺗﻲ ﻛﻪ ﺗﺎﺑﻊ T n زﻣﺎن اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ MAX HEAPIFYروي زﻳﺮ درﺧﺘﻲ ﺑﻪ اﻧﺪازة nﺑﺎﺷﺪ ﻛﻪ از ﮔﺮه iﻣﺸﺘﻖ ﺷﺪه اﺳﺖ .آﻧﮕﺎه ﺗﺤﻠﻴﻞ و ﺑﺮرﺳﻲ اﻳﻦ ﺗﺎﺑﻊ ﺑﻪ ﺷﺮح زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد: ﺳﻄﺮ 1ﺗﺎ : 7 در زﻣﺎن ﺛﺎﺑﺘﻲ ﻣﻌﺎدل ﺑﺎ ، 1ﮔﺮه iﺑﺎ ﻓﺮزﻧﺪاﻧﺶ ﻣﻘﺎﻳﺴﻪ ﺷﺪه )ﻣﻘﺎﻳﺴﻪ A i ﺑﺎ ( A 2i 1 , A 2i و اﻧﺪﻳﺲ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ در ﻣﺘﻐﻴﺮ L arg estﻗﺮار ﻣﻲﮔﻴﺮد. T n 1 ﺳﻄﺮِ : 8 در ﺻﻮرﺗﻲ ﻛﻪ L arg est iﺑﺎﺷﺪ ﻳﻌﻨﻲ ﮔﺮه iﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ ،ﺑﺎﺷﺪ آﻧﮕﺎه اﻟﮕﻮرﻳﺘﻢ ﭘﺎﻳﺎن ﻣﻲﻳﺎﺑﺪ: ﺳﻄﺮِ 9ﺗﺎ : 10 درﺻﻮرﺗﻲ ﻛﻪ L arg est iﺑﺎﺷﺪ ﻳﻌﻨﻲ ﻳﻜﻲ از دو ﻓﺮزﻧﺪ ﮔﺮه iﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ ﺑﺎﺷﺪ آﻧﮕﺎه ﮔﺮه iﺑﻪ زﻳﺮ درﺧﺖ ﻣﺮﺑﻮط ﺑـﻪ 2n آن ﻓﺮزﻧﺪ ﻛﻪ ﺣﺪاﻛﺜﺮ ﮔﺮه دارد ﻣﻨﺘﻘﻞ ﺷﺪه و اﻟﮕﻮرﻳﺘﻢ MAX HEAPIFYﺑﻪ ﻃﻮر ﺑﺎزﮔﺸﺘﻲ ﺑﺮاي ﻣﻮﻗﻌﻴﺖ ﺟﺪﻳـﺪ 3 ﮔﺮه iﻣﺠﺪداً ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮد. 2n T n T 1 3 ﻧﺘﻴﺠﻪﮔﻴﺮي: 2n 1 T n T 1 3 L arg est i L arg est i زﻣﺎن اﺟﺮاي MAX - HEAPIFY ﻫﻨﮕﺎﻣﻲﻛﻪ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ ﺑﺮاي ﻳﻚ ﮔﺮه دﻟﺨﻮاه اﺟﺮا ﻣﻲﺷﻮد ،ﺣﺪاﻛﺜﺮ ﻣﺴﻴﺮي از ﮔﺮه ﻣﻮردﻧﻈﺮ ﺗﺎ ﻳﻚ ﺑﺮگ را ﻃﻲ ﻣﻲﻛﻨﺪ ﺑﻨﺎﺑﺮاﻳﻦ زﻣﺎن اﺟﺮا O h ﺧﻮاﻫـﺪ ﺑﻮد ﻛﻪ hدر آن ارﺗﻔﺎع ﮔﺮه اﺳﺖ .در ﻋﻴﻦ ﺣﺎل ﺑﻴﺶﺗﺮﻳﻦ ارﺗﻔﺎع ﻣﺮﺑﻮط ﺑﻪ ﮔﺮه رﻳﺸﻪ ﺑﻮده ﻛﻪ ﻫﻤﺎن ارﺗﻔﺎع درﺧﺖ اﺳـﺖ ﺑﻨـﺎﺑﺮاﻳﻦ زﻣـﺎن اﺟـﺮاي اﻟﮕـﻮرﻳﺘﻢ ﺣﺪاﻛﺜﺮ lg nﺧﻮاﻫﺪ ﺑﻮد: i 1 MAX HEAPIFY A,i O h O lg n h :i اﻟﮕﻮرﻳﺘﻢ HEAPIFYدر ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ زﻣﺎﻧﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ﻛﻪ اﻟﮕﻮرﻳﺘﻢ ﺑﺮاي ﮔﺮه رﻳﺸﻪ اﺟﺮا ﺷﺪه و ﻣﺴﻴﺮي را از اﻳﻦ ﮔﺮه ﺗﺎ ﻳﻜﻲ از ﺑﺮگﻫﺎ ﻃﻲ ﻛﻨﺪ. ﻫﻤﺎنﻃﻮر ﻛﻪ در ﺷﻜﻞ ﻓﻮق ﻣﻲﺑﻴﻨﻴﺪ ﺑﺮگﻫﺎي درﺧﺖ ،ﺣﺪاﻗﻞ در ﻋﻤﻖ log3 nو ﺣﺪاﻛﺜﺮ در ﻋﻤﻖ log n3ﻗﺮار دارﻧـﺪ .ﺑﻨـﺎﺑﺮاﻳﻦ در ﺻـﻮرﺗﻲ ﻛـﻪ T n 2 راﺑﻄﻪ ﺑﺎزﮔﺸﺘﻲ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ زﻣﺎن اﻟﮕﻮرﻳﺘﻢ در ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺑﺎﺷﺪ آﻧﮕﺎه ﺧﻮاﻫﻴﻢ داﺷﺖ: T n O log n CLRS,6.2 6 T n log n 2n T n T 3 1 T n T n 1 3 ﺗﻌﺪاد heapﺑﺎ nﻛﻠﻴﺪ ﻣﺘﻤﺎﻳﺰ در ﻫﺮ درﺧﺖ heapﺑﺎ nﻋﻨﺼﺮ ﻣﺘﻤﺎﻳﺰ ،ﺻﺮفﻧﻈﺮ از ﺷﻜﻞ ﻳﺎ ﺗﻮﭘﻮﻟﻮژيِ درﺧﺖ ﻛﻪ ﺑﻪ دﻟﻴﻞ ﻛﺎﻣﻞ ﺑﻮدن ﻫﻤﻮاره ﺛﺎﺑﺖ اﺳﺖ ،ﻧﺤﻮه ﭼﻴﺪﻣﺎن ﻋﻨﺎﺻﺮ در درﺧﺖ ﻣﻲﺗﻮاﻧﺪ درﺧﺘﺎن ﻣﺘﻔﺎوﺗﻲ اﻳﺠﺎد ﻛﻨﺪ .ﺑﻪ ﻃﻮر ﻣﺜﺎل heap ،ﻫﺎ ﻣﺘﻔﺎوﺗﻲ ﻛﻪ ﻣﻲﺗﻮان ﺑﺎ ﻛﻠﻴﺪﻫﺎي 3 ، 2 ، 1و 4ﺑﺎ وﻳﮋﮔﻲ min heapاﻳﺠﺎد ﻛﺮد ﺑـﻪ ﺷـﺮح زﻳﺮ ﻫﺴﺘﻨﺪ: HEAP 9 ﻗﺎﻋﺪه ﻛﻠﻲ: ﺑﺎ ﺷﺮوع از رﻳﺸﺔ درﺧﺖ ،ﺑﻌﺪ از ﻛﻨﺎر ﮔﺬاﺷﺘﻦِ ﻳﻚ ﻋﻨﺼﺮ ﺑﺮاي آن )ﻣﻴﻨﻴﻤﻢ در min heapﻳﺎ ﻣﺎﻛﺰﻳﻤﻢ در (maxheapﻛﺎﻓﻲ اﺳـﺖ ﺣـﺎﻻت ﻣﺨﺘﻠـﻒ ﺗﻮزﻳـﻊِ ﺑﻘﻴﻪ ﻋﻨﺎﺻﺮ را در دو زﻳﺮ درﺧﺖ ﭼﭗ و راﺳﺖ در ﺻﻮرت وﺟﻮد ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﻢ: x y x y x y ! x y !x!y ﺗﻌﺪاد ﺣﺎﻻت ﺗﻮزﻳﻊ در اداﻣﻪ اﻳﻦ ﻋﻤﻞ را ﺑﺮاي ﺗﻤﺎم زﻳﺮ درﺧﺘﺎن ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ و درﻧﻬﺎﻳﺖ ،ﻫﻤﻪ ﺣﺎﻻت ﺑﻪ دﺳﺖ آﻣﺪه را ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻗﺎﻧﻮن ﺷﻤﺎرش )اﺻـﻞ ﺿـﺮب( درﻫـﻢ ﺿـﺮب ﻣﻲﻛﻨﻴﻢ. ﻣﺜﺎل ﻛﻠﻴﺪﻫﺎي 10 ،...، 2 ، 1را ﻣﻲﺧﻮاﻫﻴﻢ در درﺧﺖ زﻳﺮ ﻃﻮري ﻗﺮار دﻫﻴﻢ ﻛﻪ ﻣﻘﺪار ﻛﻠﻴﺪ ﻫﺮ ﮔﺮه از ﻓﺮزﻧﺪاﻧﺶ ﺑﺰرگﺗﺮ ﺑﺎﺷﺪ ،ﭼﻪ ﺗﻌﺪاد درﺧﺖ ﺑﺎ وﻳﮋﮔﻲ ﻓﻮق ﻣﻲﺗﻮان اﻳﺠﺎد ﻛﺮد؟ 2016 (1 126 (2 345 (3 4096 (4 ﺣﻞ :ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. !9 اﺑﺘﺪا ﺑﻌﺪ از ﻛﻨﺎرﮔﺬاﺷﺘﻦ ﻛﻠﻴﺪ ﻣﺎﻛﺰﻳﻤﻢ )ﻋﺪد ( 10ﺑﺮاي رﻳﺸﺔ درﺧﺖ ، max heap ﺑﻘﻴﻪ ﻛﻠﻴﺪﻫﺎ ) 2ﺗﺎ ( 9را ﺑﻪ !5!4 راﺳﺖ ﺗﻮزﻳﻊ ﻣﻲﻛﻨﻴﻢ ﺳﭙﺲ اﻳﻦ ﻋﻤﻠﻴﺎت را ﺑﻪ ﻃﻮر ﻣﺸﺎﺑﻪ ﺑﺮاي دو زﻳﺮ درﺧﺖ ﭼﭗ و راﺳﺖ ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ ﺣﺎﻟﺖ در دو زﻳﺮ درﺧـﺖ ﭼـﭗ و 9! 4! 2! 3! ! ﺗﻌﺪاد ﻛﻞ ﺣﺎﻻت 2016 5!4! 1!3! 1!1! 0!3! 1!1! راﺑﻄﻪ ﺑﺎزﮔﺸﺘﻲ ﺑﺮاي ﺗﻌﺪاد heapدر درﺧﺖ ﭘﺮ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ آن ﻛﻪ در ﻫﺮ درﺧﺖ ﭘﺮ ﺑﺎ n 2k 1ﮔﺮه ،ﺗﻌﺪاد ﮔﺮهﻫﺎ ﺑﻪ ﻃﻮر ﻣﺴﺎوي ﺑﻴﻦ زﻳﺮ درﺧﺘﺎن ﺗﻮزﻳﻊ ﻣﻲﺷﻮد .درﺻﻮرﺗﻲ ﻛﻪ T n راﺑﻄﻪ ﺑﺎزﮔﺸﺘﻲ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﺗﻌﺪاد درﺧﺖ heapﺑﻪ ﺻﻮرت ﭘﺮ ﺑﺎﺷﺪ. ! n 1 n n T n T T 2 2 ! n ! n 2 2 درﻧﻬﺎﻳﺖ راﺑﻄﻪ ﺑﺎزﮔﺸﺘﻲ T n ﺑﻪ ﺻﻮرت زﻳﺮ ﻗﺎﺑﻞ دﺳﺘﻴﺎﺑﻲ ﺧﻮاﻫﺪ ﺑﻮد: 10 ﺳﺎﺧﺘﻤﺎن داده n 1 n T n n T 2 2 2 ﺳﺎﺧﺖ heap ﺑﻪ روش درﺟﺎ ) ﺗﺒﺪﻳﻞ آراﻳﻪ ﺑﺎ nﻛﻠﻴﺪ ﺑﻪ ﻳﻚ (heap ﻓﺮض ﻛﻨﻴﺪ ﻣﻲﺧﻮاﻫﻴﻢ آراﻳﻪ A 1...n را ﺑﻪ ﻳﻚ heapﺗﺒﺪﻳﻞ ﻛﻨﻴﻢ )درﺟﺎ( .اﺑﺘﺪا ﺑﻪ وﺿﻌﻴﺖ ﮔﺮهﻫﺎ دﻗﺖ ﻣﻲﻛﻨﻴﻢ: n ﮔﺮهﻫﺎي ﺑﺮگ :زﻳﺮ آراﻳﻪ . A 1...n ﻫﻤﮕﻲ ﺑﺮگ ﺑﻮده و ﻫﺮﻛﺪام ﻳﻚ heapﺑﺎ ﻳﻚ ﻋﻨﺼﺮ ﻫﺴﺘﻨﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﻧﻴﺎزي ﺑﻪ ﺗﺒﺪﻳﻞ ﻧﺪارﻧﺪ. 2 n ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ :زﻳﺮ آراﻳﻪ A 1... ﻫﻤﮕﻲ ﻏﻴﺮﺑﺮگ ﻫﺴﺘﻨﺪ ،ﺑﻨﺎﺑﺮاﻳﻦ ﻫﺮﻳﻚ از آنﻫﺎ ﺑﺎﻳﺪ ﺑﺎ اﻟﮕﻮرﻳﺘﻢ MAX HEAPIFYﻛﻨﺘﺮل ﺷﻮد ﺗـﺎ در 2 ﺻﻮرت ﻧﻴﺎز ﺑﻪ زﻳﺮ درﺧﺘﻲ ﻣﻨﺎﺳﺐ ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ ﻣﻨﺘﻘﻞ ﺷﻮد اﻳﻦ ﻛﺎر ﻫﻤﺎنﻃﻮر ﻛﻪ ﺧﻮاﻫﻴﻢ دﻳﺪ ﺑﺎﻳﺪ از اﻧﺘﻬﺎ ﺑﻪ اﺑﺘﺪا و از ﭘﺎﻳﻴﻦ ﺑﻪ ﺑﺎﻻ اﻧﺠﺎم ﺷﻮد. اﻟﮕﻮرﻳﺘﻢ ﺳﺎﺧﺖ درﺧﺖ BUILD - MAX - HEAP A A .heap size A .length for i A .length / 2 downto 1 MAX - HEAPIFY A ,i 1 2 3 ﺑﺮاي ﺗﺒﺪﻳﻞ آراﻳﻪ A 1...n ﺑﻪ ﻳﻚ heapﻛﻪ در آن n A.lengthاﺳﺖ ﺑﺎﻳـﺪ از ﺗـﺎﺑﻊ MAX HEAPIFYﻣﺘﻮاﻟﻴـﺎً ﺑـﺮاي ﮔـﺮهﻫـﺎي ﻏﻴﺮﺑـﺮگ اﺳﺘﻔﺎده ﻛﻨﻴﻢ) .از آﺧﺮﻳﻦ ﮔﺮه ﻏﻴﺮﺑﺮگ ﺗﺎ رﻳﺸﻪ از اﻧﺘﻬﺎ ﺑﻪ اﺑﺘﺪا و از ﭘﺎﻳﻴﻦ ﺑﻪ ﺑﺎﻻ ( ﻳﺎدآوري :ﺑﺮاي اﺟﺮاي درﺳﺖ ﺗﺎﺑﻊ Max HEAPIFYﺷﺮط ﻻزم آن اﺳﺖ ﻛﻪ دو زﻳﺮ درﺧﺖ ﻣﺸﺘﻖ ﺷﺪه از ﮔﺮهﻫﺎي ﺣﺘﻤﺎً heapﺑﺎﺷﻨﺪ در ﺷﺮوع ﻛﺎر ﺑﺮاي ﺳﺎﺧﺘﻦ heapﻓﻘﻂ ﻣﻄﻤﺌﻦ ﻫﺴﺘﻴﻢ ﻛﻪ ﮔﺮهﻫﺎي ﺑﺮگ heapﻫﺴﺘﻨﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺎﻳﺪ از آﺧﺮﻳﻦ ﮔﺮه ﻏﻴﺮﺑﺮگ ﺷﺮوع ﻛﻨﻴﻢ ﺗﺎ ﺷﺮط اﺟﺮاي ﺗﺎﺑﻊ MAX HEAPIFYرﻋﺎﻳﺖ ﺷﻮد. ﻣﺜﺎل :ﻣﻲ ﺧﻮاﻫﻴﻢ اﻋﺪاد 30,20,50,10,40,70,60,80,60را از ﭼﭗ ﺑﻪ راﺳﺖ در ﻳﻚ آراﻳﻪ ﺑﻪ maxheapﺗﺒﺪﻳﻞ ﻛﻨﻴﻢ ﺑﺮاي ﺗﺒﺪﻳﻞ آراﻳﻪ ﺑﺎﻻ ﺑﻪ ﻳﻚ ﻫﻴﭗ از آﺧﺮﻳﻦ ﮔﺮه ﻏﻴﺮ ﺑﺮگ )ﻛﻠﻴﺪ (10ﺗﺎ ﮔﺮه رﻳﺸﻪ اﻟﮕﻮرﻳﺘﻢ heapifyرا ﻓﺮﺧﻮاﻧﻲ ﻣﻲ ﻛﻨﻴﻢ HEAP زﻣﺎن اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ 11 BUILD - MAX - HEAP ﻫﻤﺎنﻃﻮر ﻛﻪ دﻳﺪﻳﻢ ﺑﺮاي ﺗﺒﺪﻳﻞ آراﻳﻪ A 1...n ﺑﻪ ﻳﻚ heapاز ﺗﺎﺑﻊ MAX HEAPIFYﺑﺮاي ﮔـﺮهﻫـﺎي ﻏﻴﺮﺑـﺮگ در ﺳـﻄﻮح ﻣﺨﺘﻠـﻒ اﺳـﺘﻔﺎده ﻣﻲﺷﻮد ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ آن ﻛﻪ زﻣﺎن اﺟﺮاي اﻳﻦ ﺗﺎﺑﻊ واﺑﺴﺘﻪ ﺑﻪ ارﺗﻔﺎع ﮔﺮه اﺳﺖ ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ زﻣﺎن اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ اﺑﺘﺪا ﺑﺎﻳﺪ ﭘﺎراﻣﺘﺮﻫـﺎي زﻳـﺮ را ﻣـﻮرد ارزﻳﺎﺑﻲ ﻗﺮار دﻫﻴﻢ: :O h n : 2h 1 h MAX HEAPIFY h n heap n BUILD MAX HEAP Oh h 2h 1 ﺣﺎل از آن ﺟﺎ ﻛﻪ ﻛﻢﺗﺮﻳﻦ ارﺗﻔﺎع h 0 ﻣﺮﺑﻮط ﺑﻪ ﮔﺮهﻫﺎي ﺑﺮگ و ﺑﻴﺶﺗﺮﻳﻦ ارﺗﻔﺎع h lg n ﻣﺮﺑﻮط ﺑﻪ ﮔﺮه رﻳﺸﻪ اﺳـﺖ .در ﺻـﻮرﺗﻲ ﻛـﻪ ﺑـﺮاي ﺳﺎﺧﺘﻦ heapاز ﺗﺎﺑﻊ MAX HEAPIFYدر ﺗﻤﺎم ﺳﻄﻮح درﺧﺖ )ﺣﺘﻲ ﺑﺮگﻫﺎ ﻛﻪ ﻧﻴﺎزي ﻧﺪارﻧﺪ( اﺳﺘﻔﺎده ﻛﻨﻴﻢ ،ﺧﻮاﻫﻴﻢ داﺷﺖ: On lg n h n O h O n h 1 h h 0 2 h 0 2 زﻣﺎن ﺳﺎﺧﺘﻦ heap ﻧﺘﻴﺠﻪ :اﻟﮕﻮرﻳﺘﻢ BUILD MAXHEAPاز ﻣﺮﺗﺒﻪ ﺧﻄﻲ ﺑﻮده و در زﻣﺎن O n آراﻳﻪ A 1...n را ﺑﻪ ﺻﻮرت درﺟﺎ ﺑﻪ ﻳﻚ heapﺗﺒﺪﻳﻞ ﻣﻲﻛﻨﺪ. ﻳﺎدآوري :ﺑﺮاي ﻣﺤﺎﺳﺒﻪ h 2h h 0 ﺑﺎﺗﻮﺟﻪ ﺑﻪ ﻣﺒﺤﺚ »ﻣﺸﺘﻖ ﺳﺮي ﻫﻨﺪﺳﻲ« در ﭘﻴﻮﺳﺖ ﻛﺘﺎب )ﻣﻘﺪﻣﻪ رﻳﺎﺿﻲ( دارﻳﻢ: 12 ﺳﺎﺧﺘﻤﺎن داده h 2h 2 h 0 ﺣﺪاﻗﻞ و ﺣﺪاﻛﺜﺮ ﻣﻘﺎﻳﺴﻪ در 1 x x 2 h x h 2 h 0 1 x 0 x 1 BUILD - HEAP ﻫﻤﺎنﻃﻮر ﻛﻪ دﻳﺪﻳﻢ ﺑﺮاي ﺗﺒﺪﻳﻞ ﻫﺮ آراﻳﻪ ﺑﻪ ﻳﻚ heapاز ﺗﺎﺑﻊ HEAPIFYﺑﺮاي ﻫﺮﻳﻚ از ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ اﺳﺘﻔﺎده ﻛﺮدﻳﻢ ﺑﻨـﺎﺑﺮاﻳﻦ ﺗﻌـﺪاد ﻣﻘﺎﻳـﺴﺎت ﻻزم ﺗﺎﺑﻌﻲ از ﺗﻌﺪاد ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ ﺧﻮاﻫﺪ ﺑﻮد. ﺣﺪاﻗﻞ ﻣﻘﺎﻳﺴﻪ: زﻣﺎﻧﻲ ﻛﻪ ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ ﻓﻘﻂ ﺑﺎ دو ﻓﺮزﻧﺪش ﻣﻘﺎﻳﺴﻪ ﺷﺪه و ﺑﻪ ﻫﻴﭻوﺟﻪ ﺑﻪ زﻳﺮ درﺧﺘﺎنِ ﻣﺸﺘﻖ ﺷﺪه از آنﻫﺎ ﻣﻨﺘﻘﻞ ﻧﺸﻮد ﺣﺪاﻗﻞ ﻣﻘﺎﻳﺴﻪ را ﺧﻮاﻫﻴﻢ داﺷﺖ اﻳﻦ وﺿﻌﻴﺖ در ﺷﺮاﻳﻄﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ﻛﻪ ﻳﺎ آراﻳﻪ از اﺑﺘﺪا heapﺑﺎﺷﺪ و ﻳﺎ ﺑﺮاي ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ ﻓﻘﻂ ﻳﻚ ﺟﺎﺑﻪﺟﺎﻳﻲ ﺑﺎ ﻳﻜﻲ از ﻓﺮزﻧﺪان ﻻزم ﺑﺎﺷﺪ .ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺎ اﻳﻦ ﻓﺮض ﻛﻪ ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ دﻗﻴﻘﺎً دو ﻓﺮزﻧﺪ دارد ﺣﺪاﻗﻞ 2ﻣﻘﺎﻳﺴﻪ ﺑﺮاي ﻫﺮ ﻛﺪام ﻻزم اﺳﺖ. n 2 n 2 n 2 2 ﺣﺪاﻛﺜﺮ ﻣﻘﺎﻳﺴﻪ: زﻣﺎﻧﻲ ﻛﻪ ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ در اﺛﺮ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ HEAPIFYﺗﺎ ﻳﻚ ﮔﺮه ﺑﺮگ ﭘﺎﻳﻴﻦ ﺑﻴﺎﻳﺪ ﺣﺪاﻛﺜﺮ ﻣﻘﺎﻳﺴﻪ را ﺧﻮاﻫﻴﻢ داﺷﺖ اﻳﻦ وﺿﻌﻴﺖ در ﺷﺮاﻳﻄﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ﻛﻪ ﺑﺨﻮاﻫﻴﻢ ﻳﻚ آراﻳﻪ ﺑﺎ وﻳﮋﮔﻲ min heapرا ﺑﻪ max heapو ﻳﺎ ﺑﺎﻟﻌﻜﺲ ﺗﺒﺪﻳﻞ ﻛﻨﻴﻢ. ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺮاي ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ در ارﺗﻔﺎع hﺑﺎ اﻳﻦ ﻓﺮض ﻛﻪ در ﻫﺮ ﺳﻄﺢ دو ﻣﻘﺎﻳﺴﻪ ﻻزم دارﻳﻢ ﺣﺪاﻛﺜﺮ 2hﻣﻘﺎﻳﺴﻪ ﻻزم اﺳﺖ ﺗﺎ ﺑﻪ ﻳﻚ ﮔﺮه ﺑـﺮگ ﻣﻨﺘﻘـﻞ ﺷﻮد. h n 2n 2h 1 2h n 2h h 0 L gn h 1 n h 1 2 2h ﻳﺎدآوري :ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ از ارﺗﻔﺎع h 1ﺗﺎ ارﺗﻔﺎع h Lgn و ﮔﺮهﻫﺎي ﺑﺮگ ﻫﻤﮕﻲ در ارﺗﻔﺎع h 0ﻗﺮار دارﻧﺪ. ﻛﺎرﺑﺮدﻫﺎي درﺧﺖ Heap -1ﻣﺮﺗﺐ ﺳﺎزي آراﻳﻪﻫﺎ )(Heap Sort -2ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ ) ﺑﻪ ﻛﻤﻚ درﺧﺖ اﻧﺘﺨﺎﺑﻲ ﻳﺎ ( MinHeap -3ﺻﻒ اوﻟﻮﻳﺖ )(Priority Queue h h HEAP 13 -1ﻣﺮﺗﺐ ﺳﺎزي آراﻳﻪﻫﺎ Heap Sort در ﻣﺮﺗﺐﺳﺎزي ﺑﻪ ﻛﻤﻚ ، MaxHeapاﻟﮕﻮرﻳﺘﻢ ﺑﻪ ﺷﺮح زﻳﺮ ﻋﻤﻞ ﻣﻲ ﻛﻨﺪ : )Heap - Sort (A )1. BULD - MAX - HEAP (A 2. for length A down to 2 do exchanghe A 1 A i 3. heap_size A heap_size A 1 4. MAX HEAPIFY A , 1 5. ﺳﻄﺮ : 1اﺑﺘﺪا ﺑﺎ اﺳﺘﻔﺎده از روال BUILD MAX HEAPآراﻳﻪ ورودي A 1 n ﺑﻪ ﺻﻮرت درﺟﺎ ﺗﺒﺪﻳﻞ ﺑﻪ ﻳﻚ Max Heapﻣﻲﺷﻮد. ﺳﻄﺮ : 3ﺣﺎل از آﻧﺠﺎ ﻛﻪ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ در رﻳﺸﻪ ﻳﻌﻨﻲ A 1 ﻗﺮار دارد ،ﺑﺎ ﻳﻚ ﺟﺎﺑﻪﺟﺎﻳﻲ ﺑﺎ A n در ﻣﻜﺎن ﺻﺤﻴﺢ )ﻧﻬﺎﻳﻲ( ﺧﻮد ﻗﺮار ﻣﻲ ﮔﻴﺮد ﺳﻄﺮ : 4در اداﻣﻪ از اﻧﺪازه heapﻳﻚ واﺣﺪ ﻛﻢ ﻣﻲ ﺷﻮد ﺗﺎ ﻧﺎﺣﻴﻪ ﻣﺮﺗﺐ ﺷﺪه)اﻧﺘﻬﺎي آراﻳﻪ( از Max Heapﺟﺪا ﺷﻮد. ﺳﻄﺮ : 5در ﻧﻬﺎﻳﺖ ﺑﺎﻳﺪ روال MAX HEAPIFYرا ﺑﺮاي رﻳﺸﻪ ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﻴﻢ ﺗﺎ ﮔﺮه ﺟﺎﻳﮕﺰﻳﻦ ﺷﺪه A n در ﻣﺤﻞ واﻗﻌﻲ ﺧﻮد ﻗﺮار ﺑﮕﻴﺮد. ﺳﻄﺮ : 2روال ﻣﺮﺗﺐ ﺳﺎزي اﻳﻦ روﻧﺪ)ﺳﻄﺮ 3ﺗﺎ (5را n-1ﻣﺮﺣﻠﻪ ﺗﺎ اﻳﻨﻜﻪ اﻧﺪازه heapﺑﻪ 1ﺑﺮﺳﺪ ﺗﻜﺮار ﻣﻲﻛﻨﺪ. ﻣﺜﺎل زﻳﺮ ﻋﻤﻠﻜﺮد اﻟﮕﻮرﻳﺘﻢ ﺑﺎﻻ را از ﺳﻄﺮ 2ﺗﺎ 5ﺑﺮاي ﻣﺮﺗﺐ ﺳﺎزي ﻫﻴﭗ اﻳﺠﺎد ﺷﺪه از ﻳﻚ آراﻳﻪ ﻧﺸﺎن ﻣﻲدﻫﺪ: 14 ﺳﺎﺧﺘﻤﺎن داده ﺗﺤﻠﻴﻞ زﻣﺎن اﺟﺮا ازآﻧﺠﺎﻛﻪ ﻓﺮاﺧﻮاﻧﻲ BUILD MAX HEAPزﻣﺎن O n و ﻫﺮ ﻳﻚ از n 1ﺑـﺎر ﻓﺮاﺧـﻮاﻧﻲ روال MAX HEAPIFYﺑـﺮاي رﻳـﺸﻪ ﺣـﺪاﻛﺜﺮ زﻣﺎﻧﻲ ﻣﻌﺎدل ﺑﺎ O log n را ﺻﺮف ﻣﻲﻛﻨﺪ در ﻧﺘﻴﺠﻪ زﻣﺎن ﻣﺮﺗﺐﺳﺎزي Heapﺑﺮاﺑﺮ ﺧﻮاﻫﺪ ﺑﻮد ﺑﺎ: O n n 1 O log n O n log n ﻋﺪم ﺗﺎﺛﻴﺮ ﺗﺮﺗﻴﺐ ﻋﻨﺎﺻﺮ ورودي در Heap Sort از آﻧﺠﺎﻛﻪ روال BUILD MAX HEAPﺻﺮف ﻧﻈﺮ از ﺗﺮﺗﻴﺐ ﻋﻨﺎﺻﺮ آراﻳﻪ ورودي در زﻣﺎن O n آﻧﺮا ﺗﺒـﺪﻳﻞ ﺑـﻪ ﻳـﻚ Max Heapﻣـﻲ ﻛﻨـﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﺗﺮﺗﻴﺐ ورود ﻋﻨﺎﺻﺮ )ﻣﺮﺗﺐ ﻳﺎ ﻧﺎﻣﺮﺗﺐ( ﻫﻴﭻ ﺗﺎﺛﻴﺮي در زﻣﺎن ﻣﺮﺗﺐ ﺳﺎزي ﻧﺨﻮاﻫﺪ داﺷﺖ. ﻗﻀﻴﻪ :1زﻣﺎن اﺟﺮاﻳﻲ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﻣﺮﺗﺐﺳﺎزي n lg n ، heapاﺳﺖ CLRS, 6.4 4 اﺛﺒﺎت :ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻗﺒﻼ دﻳﺪﻳﻢ اﺟﺮاي روال MAX HEAPIFYدر ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ )اﺟﺮا ﺑﺮاي رﻳﺸﻪ( از رواﺑﻂ زﻳﺮ ﺗﺒﻌﻴﺖ ﻣﻲ ﻛﻨﺪ: T n O log n ﺗﻤﺮﻳﻦ CLRS,6.2 6 T n log n 2n T n T 3 1 T n T n 1 3 ﺣﺎل از آﻧﺠﺎﻛﻪ در اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎزي n-1ﻓﺮاﺧﻮاﻧﻲ MAX HEAPIFYﺑﺮاي رﻳﺸﻪ اﻧﺠﺎم ﻣﻲ ﺷﻮد ﺑﻨﺎﺑﺮاﻳﻦ زﻣﺎن اﺟﺮاي ﻣﺮﺗﺐ ﺳـﺎزي در ﺑـﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ n 1 lg n n lg n ﺧﻮاﻫﺪ ﺑﻮد. ﻗﻀﻴﻪ :2در ﺷﺮاﻳﻄﻲ ﻛﻪ ﻫﻤﻪي ﻋﻨﺎﺻﺮ ﻣﺘﻤﺎﻳﺰ ﺑﺎﺷﻨﺪ ،زﻣﺎن اﺟﺮاﻳﻲ ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ ﻣﺮﺗﺐﺳﺎزي n lg n ، heapاﺳﺖ CLRS, 6.4 5 اﺛﺒﺎت :در ﺷﺮاﻳﻄﻲ ﻛﻪ ﻫﻤﻪ ﻋﻨﺎﺻﺮ ﻣﺘﻤﺎﻳﺰ ﺑﺎﺷﻨﺪ .در ﻫﺮ ﻳﻚ از n-1ﺑﺎر ﻓﺮاﺧﻮاﻧﻲ MAX HEAPIFYﺑﺮاي رﻳﺸﻪ ﮔﺮه ﺟـﺎﻳﮕﺰﻳﻦ ﺷـﺪه ﺑـﻪ ﺑﺮﮔـﻲ در n ﭘﺎﻳﻴﻦ ﺗﺮﻳﻦ ﺳﻄﺢ ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮد .در اﻳﻦ وﺿﻌﻴﺖ ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ زﻣﺎﻧﻲ رخ ﻣﻲ دﻫﺪ ﻛﻪ ﮔﺮه ﻣﻮرد ﻧﻈﺮ ﺑﻪ زﻳﺮ درﺧﺘﻲ ﺑـﺎ ﮔـﺮه ﻣﻨﺘﻘـﻞ ﺷـﻮد و زﻣـﺎن 3 n T n T 1 ﺧﻮاﻫــﺪ ﺑــﻮد ﺑﻨــﺎﺑﺮاﻳﻦ زﻣــﺎن اﺟــﺮاي ﻣﺮﺗــﺐ ﺳــﺎزي در ﺑﻬﺘــﺮﻳﻦ ﺣﺎﻟــﺖ اﻧﺘﻘــﺎل ﺑﺮاﺑــﺮ ﺑــﺎ T n log n n 1 lg n n lg n ﻣﻲ ﺷﻮد.. 3 HEAP ﻣﺮﺗﺐﺳﺎزي Heap 15 ﺑﺮاي آراﻳﻪ ﺑﺎ ﻛﻠﻴﺪﻫﺎي ﻣﺴﺎوي درﺻﻮرﺗﻴﻜﻪ ﻋﻨﺎﺻﺮ ورودي ﻳﻚ آراﻳﻪ ﺑﺎ ﻛﻠﻴﺪﻫﺎي ﻣﺴﺎوي ﺑﺎﺷﺪ آﻧﮕﺎه ﻫﺮﻳﻚ از n 1ﺑﺎر ﻓﺮﺧﻮاﻧﻲ روال MAX HEAPIFYﺑﺮاي رﻳﺸﻪ زﻣﺎﻧﻲ ﻣﻌﺎدل ﺑﺎ O 1را ﺻﺮف ﻣﻲﻛﻨﺪ زﻳﺮا ﻫﻴﭻ اﻧﺘﻘﺎﻟﻲ ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ اﻧﺠﺎم ﻧﻤﻲ ﺷﻮد و درﻧﻬﺎﻳﺖ زﻣﺎن اﺟﺮاي ﻣﺮﺗﺐﺳﺎزي ﺑﺼﻮرت زﻳﺮ ﺑﺮاﺑﺮ ﺑﺎ O n ﺧﻮاﻫﺪ ﺑﻮد: O n n 1 O 1 O n -2ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ ) ﺑﻪ ﻛﻤﻚ درﺧﺖ اﻧﺘﺨﺎﺑﻲ ﻳﺎ ( MinHeap ﻓﺮض ﻛﻨﻴﺪ Kآراﻳﻪ ﻣﺮﺗﺐ )ﺻﻌﻮدي( دارﻳﻢ ﻛﻪ ﺗﻌﺪاد ﻛﻞ ﺧﺎﻧﻪﻫﺎي Kآراﻳﻪ nﻣﻲﺑﺎﺷﺪ .ﺣﺎل ﻣﻲﺧﻮاﻫﻴﻢ اﻳﻦ Kآراﻳﻪ را ادﻏﺎم ﻛﺮده و در ﻳﻚ آراﻳﻪ ﺑـﻪ ﺻﻮرت ﻣﺮﺗﺐ ﻧﮕﻬﺪاري ﻛﻨﻴﻢ .دو روش ﻛﻠﻲ ﺑﺮاي ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ ﺑﻪ ﺻﻮرت زﻳﺮ وﺟﻮد دارد: اﻟﻒ( روش ﻋﻤﻮﻣﻲ در اﻳﻦ روش از ﻃﺮﻳﻖ ﻣﻘﺎﻳﺴﻪ ﻋﻨﺎﺻﺮ اﺑﺘﺪاﻳﻲ ﻟﻴﺴﺘﻬﺎ در ﻫﺮﺑﺎر ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ ﺑﻴﻦ آﻧﻬﺎ را ﺧﺎرج ﻣﻴﻜﻨﻴﻢ ﺗﺎ درﻧﻬﺎﻳﺖ آراﻳﻪ ﻧﻬﺎﻳﻲ ﺣﺎﺻﻞ از ادﻏﺎم ﻟﻴﺴﺘﻬﺎ ﺑﻪ ﻃﻮل nو ﻣﺮﺗﺐ ﺷﺪه ﺣﺎﺻﻞ ﺷﻮد ،اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺑﻮط ﺑﻪ اﻳﻦ روش ﻣﻲ ﺗﻮاﻧﺪ ﺑﺼﻮرت زﻳﺮ ﺑﺎﺷﺪ: 1ـ ﻋﻀﻮ اول ﻫﻤﻪ آراﻳﻪﻫﺎ را ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻛﺮده و ﺑﺎ K 1ﻣﻘﺎﻳﺴﻪ ،ﻋﻀﻮ ﻣﻴﻨﻴﻤﻢ را ﺧﺎرج ﻣﻲﻛﻨﻴﻢ. 2ـ در اﻳﻦ ﺣﺎﻟﺖ آراﻳﻪاي ﻛﻪ ﻋﻀﻮ ﻣﻴﻨﻴﻤﻢ از آن ﺧﺎرج ﺷﺪه ﻋﻨﺎﺻﺮش را ﻳﻚ واﺣﺪ ﺑﻪ ﺳﻤﺖ ﺑﺎﻻ ﺣﺮﻛﺖ ﻣﻲدﻫﺪ )راﻧﺶ ـ .( RUN -3ﺳﻄﺮ 1و 2را ﺗﺎ زﻣﺎﻧﻲﻛﻪ ﻛﻠﻴﻪ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺘﻬﺎ ﺑﻪ ﺻﻮرت ﻣﺮﺗﺐ ﺧﺎرج ﺷﻮﻧﺪ ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ. ازآﻧﺠﺎﻛﻪ ﺑﺮاي ﺧﺮوج ﻫﺮ ﻋﻀﻮ k 1ﻣﻘﺎﻳﺴﻪ اﻧﺠﺎم ﻣﻲﺷﻮد در ﻧﺘﻴﺠﻪ ﺑﺮاي nﻋﻀﻮ آراﻳﻪ n k 1ﻣﻘﺎﻳﺴﻪ اﻧﺠﺎم ﻣﻲﺷﻮد و زﻣـﺎن ادﻏـﺎم ﺑـﺎ اﻳـﻦ روش O nk ﻣﻲﺑﺎﺷﺪ. ب( ) min heapدرﺧﺖ اﻧﺘﺨﺎﺑﻲ( اﺑﺘﺪا ﺑﻪ ﻛﻤﻚ ﻋﻨﺼﺮ اﺑﺘﺪاﻳﻲِ ﻫﺮ ﻳﻚ از ﻟﻴﺴﺘﻬﺎ درﺧﺖ اﻧﺘﺨﺎﺑﻲ min heap را ﺑﻪ ﺷﻜﻞ زﻳﺮ ﻣﻲ ﺳﺎزﻳﻢ: ﻋﻨﺼﺮِ اول ﻫﺮﻳﻚ از ﻟﻴﺴﺘﻬﺎ را ﺑﻪ ﻋﻨﻮان ﺑﺮگﻫﺎي درﺧﺖ اﻧﺘﺨﺎﺑﻲ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ و ﺳﺎﻳﺮ ﮔﺮه ﻫﺎي درﺧﺖ را ﺑﻪ ﺷﻜﻞ ﺑﺮﻧﺪه )ﻛﻮﭼﻜﺘﺮ( ــ ﺑﺎزﻧـﺪه )ﺑﺰرﮔﺘـﺮ( در ﻧﻈﺮ ﻣﻴﮕﻴﺮﻳﻢ ،ﺑﻪ اﻳﻦ ﺻﻮرت ﻛﻪ ﺑﻴﻦ ﻫﺮ دو ﮔﺮه ﻛﻨﺎر ﻫﻢ ﮔﺮهاي را ﺑﻪ ﻋﻨﻮان واﻟﺪ)ﺑﺮﻧﺪه( اﻧﺘﺨﺎب ﻣﻲﻛﻨﻴﻢ ﻛﻪ ﻛﻮﭼﻜﺘﺮ ﺑﺎﺷﺪ .اﻳﻦ ﻋﻤﻞ را ﺑﺮاي ﺳﻄﻮح ﺑﺎ ﻻﺗﺮ آنﻗﺪر ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ ﺗﺎ ﺑﻪ رﻳﺸﻪ درﺧﺖ ﺑﺮﺳﻴﻢ و ﻛﻮﭼﻚﺗﺮﻳﻦ ﻋﻨﺼﺮ در رﻳﺸﻪ ﻗﺮار ﮔﻴﺮد. ﺑﺎ ﻣﻘﺎﻳﺴﻪ 2ﺑﺎ 2 ، 7ﺑﺮﻧﺪه و ﺑﺎ ﻣﻘﺎﻳﺴﻪ 10ﺑﺎ 10 ، 12ﺑﺮﻧﺪه در ﻧﻬﺎﻳﺖ ﺑﺎ ﻣﻘﺎﻳﺴﻪ 10ﺑﺎ 2 ، 2ﺑﺮﻧﺪه ﻣﻲﺷﻮد و در رﻳﺸﻪ ﻗﺮار ﻣﻲﮔﻴﺮد. 16 ﺳﺎﺧﺘﻤﺎن داده روش ﻛﺎر ﺑﺮاي ادﻏﺎم ﻟﻴﺴﺘﻬﺎ ﺑﻪ ﻛﻤﻚ درﺧﺖ اﻧﺘﺨﺎﺑﻲ: -1رﻳﺸﻪ درﺧﺖ اﻧﺘﺨﺎﺑﻲ را ﺣﺬف ﻛﺮده و در آراﻳﻪ ﻧﻬﺎﻳﻲ ﻗﺮار ﻣﻲدﻫﻴﻢ )ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ( -2در ﻟﻴﺴﺘﻲ ﻛﻪ ﻋﻨﺼﺮ رﻳﺸﻪ از آن اﻧﺘﺨﺎب ﺷﺪه ﻳﻚ واﺣﺪ ﺑﻪ ﺳﻤﺖ ﺑﺎﻻ ﺣﺮﻛﺖ )راﻧﺶ(ﻛﺮده و ﺑﺎ ﻣﻘﺎﻳﺴﺎت ﻣﻨﺎﺳﺐ دوﺑﺎره درﺧﺖ اﻧﺘﺨﺎﺑﻲ را ﺗﺎ رﻳﺸﻪ ﺗﺠﺪﻳﺪ ﺳﺎﺧﺘﺎر ﻣﻲﻛﻨﻴﻢ -3ﺳﻄﺮ 1و 2را ﺗﺎ زﻣﺎﻧﻲﻛﻪ ﻛﻠﻴﻪ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺘﻬﺎ ﺑﻪ ﺻﻮرت ﻣﺮﺗﺐ ﺧﺎرج ﺷﻮﻧﺪ ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ. ﺗﺤﻠﻴﻞ زﻣﺎن اﺟﺮا: اﺑﺘﺪا در زﻣﺎن O k از kﻋﻨﺼﺮ اﺑﺘﺪاﻳﻲ در ﻟﻴﺴﺘﻬﺎ )ﺑﻪ ﻋﻨﻮان ﺑﺮگ( درﺧﺖ اﻧﺘﺨﺎﺑﻲ ) (minheapﺳﺎﺧﺘﻪ ﻣﻲ ﺷﻮد ،ﺳﭙﺲ از آﻧﺠﺎﻛﻪ ﺑﻌﺪ از ﺧﺎرج ﻛـﺮدن ﻫﺮ ﻋﻨﺼﺮ از رﻳﺸﻪ درﺧﺖ اﻧﺘﺨﺎﺑﻲ ﺑﺮاي ﺗﺠﺪﻳﺪ ﺳﺎﺧﺘﺎر زﻣﺎﻧﻲ ﻣﺘﻨﺎﺳﺐ ﺑﺎ ارﺗﻔﺎعِ درﺧﺖ lgk ﻧﻴﺎز دارﻳﻢ ﺑﺮاي ادﻏﺎم ﻋﻨﺎﺻﺮ در ﻫﻤﻪ ﻟﻴﺴﺘﻬﺎ ﻛـﻪ ﺣـﺎوي n ﻋﻨﺼﺮ ﻫﺴﺘﻨﺪ زﻣﺎن ﺑﺮاﺑﺮ ﺑﺎ O nlgk ﺧﻮاﻫﺪ ﺑﻮد ﺑﻨﺎﺑﺮاﻳﻦ در ﻧﻬﺎﻳﺖ زﻣﺎﻧﻲ ﻣﻌﺎدل ﺑﺎ O k + O nlgk O nlgk ﺑﺮاي ادﻏﺎم ﻟﻴﺴﺘﻬﺎ ﻧﻴﺎز ﺧـﻮاﻫﻴﻢ داﺷﺖ CLRS, 6.5 9 ﻳﺎدآوري: از آﻧﺠﺎﻛﻪ ﺗﻌﺪاد ﺑﺮﮔﻬﺎي درﺧﺖ اﻧﺘﺨﺎﺑﻲ min heap ﺳﺎﺧﺘﻪ ﺷﺪه ﺑﺮاﺑﺮ ﺑﺎ ﺗﻌﺪاد ﻟﻴﺴﺘﻬﺎ ﻳﻌﻨﻲ kاﺳﺖ ،در ﺣﺎﻟﺘﻴﻜﻪ درﺧﺖ ﻣﻮرد ﻧﻈﺮ را ﭘﺮ در ﻧﻈﺮ ﺑﮕﻴﺮﻳﻢ آﻧﮕﺎه ﺛﺎﺑﺖ ﻣﻲ ﺷﻮد ﻛﻪ ارﺗﻔﺎع درﺧﺖ ﻣﺘﻨﺎﺳﺐ ﺑﺎ lgkﺧﻮاﻫﺪ ﺑﻮد. : n 0 = 2h درﺧﺖ ﭘﺮ ﺑﻪ ارﺗﻔﺎع )hﺳﻄﺢ رﻳﺸﻪ ﺻﻔﺮ( k = 2h h = lg k ﻧﺘﻴﺠﻪ :اﺳﺘﻔﺎده از درﺧﺖ اﻧﺘﺨﺎﺑﻲ min heap ﺑﺮاي ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ ﻛﺎراﺗﺮ از روش ﻋﻤﻮﻣﻲ ﺑﻮده و زﻣﺎن ﻛﻤﺘﺮي ﻧﻴﺎز ﺧﻮاﻫﺪ داﺷﺖ زﻳﺮا: . O nlgk < O nk -3ﺻﻒ اوﻟﻮﻳﺖ ﺗﻌﺮﻳﻒ :ﺻﻒ اوﻟﻮﻳﺖ ﺑﻪ ﻣﺠﻤﻮﻋﻪاي از ﻋﻨﺎﺻﺮ ﮔﻔﺘﻪ ﻣﻲﺷﻮد ﻛﻪ در آن ﺑﻪ ﻫﺮ ﻋﻨﺼﺮ ﻳﻚ اوﻟﻮﻳﺖ داده ﻣﻲﺷﻮد .و ﺗﺮﺗﻴﺐ ﺣﺬف و ﭘﺮدازش دادهﻫﺎ ﺑﺮ ﻃﺒﻖ دو ﻗﺎﻋﺪه زﻳﺮ اﺳﺖ: 1ـ ﻋﻨﺼﺮي ﻛﻪ داراي اوﻟﻮﻳﺖ ﺑﻴﺸﺘﺮ اﺳﺖ ﻗﺒﻞ از ﺑﻘﻴﻪ ﻋﻨﺎﺻﺮ ﺣﺬف ﺷﺪه و ﭘﺮدازش ﻣﻲﺷﻮد. 2ـ دو ﻋﻨﺼﺮي ﻛﻪ داراي اوﻟﻮﻳﺖ ﻳﻜﺴﺎن ﻫﺴﺘﻨﺪ ﺑﺎﺗﻮﺟﻪ ﺑﻪ ﺗﺮﺗﻴﺒﻲ ﻛﻪ ﺑﻪ ﺻﻒ وارد ﺷﺪهاﻧﺪ ﭘﺮدازش ﻣﻲﺷﻮد. در ﻫﺮ ﺻﻒ اوﻟﻮﻳﺖ دو ﻋﻤﻞ ﺣﺬف و درج ﻋﻨﺼﺮ اﻧﺠﺎم ﻣﻲﺷﻮد. ﭘﻴﺎده ﺳﺎزي ﺻﻒ اوﻟﻮﻳﺖ ﺑﻪ ﻃﻮر ﻛﻠﻲ ﺑﺮاي ﭘﻴﺎدهﺳﺎزي ﻫﺮ ﺻﻒ اوﻟﻮﻳﺖ ﻣﻲ ﺗﻮان از ﻳﻜﻲ از ﺳﺎﺧﺘﺎرﻫﺎي زﻳﺮ را اﺳﺘﻔﺎده ﻛﺮد: 1ـ آراﻳﻪﻫﺎ 2ـ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي زﻣﺎنﻫﺎي ﺣﺬف و درج در ﻫﺮ ﻳﻚ از ﺳﺎﺧﺘﺎرﻫﺎ ﺑﻪ ﺷﺮح زﻳﺮ ﻣﻲ ﺑﺎﺷﺪ : 3ـ درﺧﺖ Heap HEAP زﻣﺎن ﺣﺬف زﻣﺎن درج ﺳﺎﺧﺘﺎر O n O 1 آراﻳﻪ ﻧﺎﻣﺮﺗﺐ O 1 O n آراﻳﻪ ﻣﺮﺗﺐ O n O 1 ﻟﻴﺴﺖ ﻧﺎﻣﺮﺗﺐ O 1 O n ﻟﻴﺴﺖ ﻣﺮﺗﺐ O logn O logn درﺧﺖ Heap 17 ﻧﺘﻴﺠﻪ: از آﻧﺠﺎ ﻛﻪ ﺳﺎﺧﺘﺎر Heapدر دوﻋﻤﻞ درج و ﺣﺬف ﻧﺴﺒﺖ ﺑﻪ دو ﺳﺎﺧﺘﺎر دﻳﮕﺮ )آراﻳﻪ و ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي( زﻣﺎن ﻛﻤﺘﺮي)ﺳﺮﻋﺖ ﺑﻴﺸﺘﺮي(دارد درﻧﺘﻴﺠﻪ ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﺻﻒ اوﻟﻮﻳﺖ ﻛﺎراﺗﺮ اﺳﺖ. ﭘﻴﺎده ﺳﺎزي ﺻﻒ اوﻟﻮﻳﺖ ﺑﻪ ﻛﻤﻚ Heap ﺻﻒ اوﻟﻮﻳﺖ 1ﺳﺎﺧﺘﻤﺎن دادهاي اﺳﺖ ﻛﻪ ﺑﺮاي ﻧﮕﻬﺪاري ﻣﺠﻤﻮﻋﻪاي ﻣﺎﻧﻨﺪ Sاز ﻋﻨﺎﺻﺮ ﻛﻪ ﻫﺮ ﻛﺪام ﻣﻘﺪاري ﺑﻪ ﻧﺎم ﻛﻠﻴﺪ دارﻧﺪ ﺑﻪﻛﺎر ﻣﻲرود .واﺿﺢ اﺳﺖ ﻛﻪ ﻣﻲﺗﻮاﻧﻴﻢ ﺻﻒ اوﻟﻮﻳﺖ را ﺑﺎ اﺳﺘﻔﺎده از heapﭘﻴﺎدهﺳﺎزي ﻛﻨﻴﻢ؛ در اﻳﻦ ﺻﻮرت دو ﻧﻮع ﺻﻒ اوﻟﻮﻳﺖ دارﻳـﻢ :ﺻـﻒ اوﻟﻮﻳـﺖ ﻣـﺎﻛﺰﻳﻤﻢ 2و ﺻـﻒ اوﻟﻮﻳـﺖ ﻣﻴﻨﻴﻤﻢ.3 ﺻﻒﻫﺎي اوﻟﻮﻳﺖ ﻣﺎﻛﺰﻳﻤﻢ ﺑﺎ اﺳﺘﻔﺎده از max heapاﻋﻤﺎل زﻳﺮ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﻨﺪ: : MAXIMUM S -1ﻋﻨﺼﺮي ﺑﺎ ﺑﺰرگﺗﺮﻳﻦ ﻛﻠﻴﺪ )رﻳﺸﻪ( را از Sﺑﺮﻣﻲﮔﺮداﻧﺪ : EXTRACT MAX S -2ﻋﻨﺼﺮي ﺑﺎ ﺑﺰرگﺗﺮﻳﻦ ﻛﻠﻴﺪ)رﻳﺸﻪ( را از ﻣﺠﻤﻮﻋﻪي Sﺣﺬف ﻛﺮده و ﻣﻘﺪار آﻧﺮا ﺑﺮﻣﻲﮔﺮداﻧﺪ. : INCREASE KEY S, x , k -3ﻣﻘﺪار ﻛﻠﻴﺪ ﻋﻨﺼﺮ xرا در ﻣﺠﻤﻮﻋﻪي Sﺑﻪ ﻣﻘﺪار ﺟﺪﻳﺪ kاﻓﺰاﻳﺶ ﻣﻲدﻫﺪ : INSERT S, x -4ﻋﻨﺼﺮ xﺑﺎ ﻣﻘﺪار ﻛﻠﻴﺪ kرا ﺑﻪ ﻣﺠﻤﻮﻋﻪي Sاﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ .ﺑﻪ ﻋﺒﺎرت دﻳﮕﺮ ﺧﻮاﻫﻴﻢ داﺷﺖS S {x} : ﺻﻒﻫﺎي اوﻟﻮﻳﺖ ﻣﻴﻨﻴﻤﻢ ﺑﺎ اﺳﺘﻔﺎده از min heapاﻋﻤﺎل زﻳﺮ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻛﻨﻨﺪ: : MINIMUM S -1ﻋﻨﺼﺮي ﺑﺎ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ)رﻳﺸﻪ( را از ﻣﺠﻤﻮﻋﻪي Sﺑﺮﻣﻲﮔﺮداﻧﺪ : EXTRACT MIN S -2ﻋﻨﺼﺮي ﺑﺎ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ)رﻳﺸﻪ( را از ﻣﺠﻤﻮﻋﻪي Sﺣﺬف ﻛﺮده و ﻣﻘﺪار آﻧﺮا ﺑﺮﻣﻲﮔﺮاﻧﺪ. : DECREASE KEY S, x , k -3ﻣﻘﺪار ﻛﻠﻴﺪ ﻋﻨﺼﺮ xرا در ﻣﺠﻤﻮﻋﻪي Sﺑﻪ ﻣﻘﺪار kﻛﺎﻫﺶ ﻣﻲدﻫﺪ. : INSERT S, x -4ﻋﻨﺼﺮ xﺑﺎ ﻣﻘﺪار ﻛﻠﻴﺪ kرا ﺑﻪ ﻣﺠﻤﻮﻋﻪي Sاﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ .ﺑﻪ ﻋﺒﺎرت دﻳﮕﺮ ﺧﻮاﻫﻴﻢ داﺷﺖS S {x} : ﺣﺎل ﺑﺎ ﻓﺮض اﻳﻨﻜﻪ ﺻﻒﻫﺎي اوﻟﻮﻳﺖ ﻣﺎﻛﺰﻳﻤﻢ و ﻣﻴﻨﻴﻤﻢ ﺑﻪﺗﺮﺗﻴﺐ از ﻃﺮﻳﻖ max heapو min heapﭘﻴﺎدهﺳﺎزي ﺷﻮﻧﺪ ،ﻋﻤﻠﻜﺮد ﻫﺮ ﻳﻚ از اﻳﻦ ﻋﻤﻠﻴﺎت را در heapﻣﺘﻨﺎﻇﺮاً ﺗﻮﺿﻴﺢ ﻣﻲدﻫﻴﻢ .ﺳﭙﺲ ﺑﻪ ﺗﺤﻠﻴﻞ ﭘﻴﭽﻴﺪﮔﻲ آن ﺑﺮ روي heapﭘﺮداﺧﺘﻪ و در اﻧﺘﻬﺎ ،ﭘﻴﺎدهﺳﺎزي ﺻﻒﻫﺎي اوﻟﻮﻳﺖ را ﺑﺎ اﺳﺘﻔﺎده از heap در ﺳﺎﺧﺘﻤﺎن دادهﻫﺎي ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي و آراﻳﻪ ﻣﻮرد ﺑﺮرﺳﻲ ﻗﺮار ﻣﻲدﻫﻴﻢ. دﻗﺖ ﻛﻨﻴﺪ :ازآﻧﺠﺎﻛﻪ ﺻﻒ اوﻟﻮﻳﺖ را در heapﭘﻴﺎدهﺳﺎزي ﻣﻲﻛﻨﻴﻢ ﻣﺠﻤﻮﻋﻪي Sﻫﻤﺎن آراﻳﻪي Aاﺳﺖ. MAXIMUM ﻋﻨﺼﺮي ﺑﺎ ﺑﺰرﮔﺘﺮﻳﻦ ﻛﻠﻴﺪ در رﻳﺸﻪ درﺧﺖ max heapﻗﺮار داﺷﺘﻪ و در زﻣﺎن O 1ﺑﺮﮔﺮداﻧﺪه ﻣﻲ ﺷﻮد .ﺑﻄﻮر ﻣـﺸﺎﺑﻪ ﻋﻨـﺼﺮي ﺑـﺎ ﻛـﻮﭼﻜﺘﺮﻳﻦ ﻛﻠﻴـﺪ در رﻳﺸﻪ درﺧﺖ min heapﻗﺮار داﺷﺘﻪ و در زﻣﺎن O 1ﺑﺮﮔﺮداﻧﺪه ﻣﻲ ﺷﻮد. HEAP EXTRACT MAX اﻳﻦ روال در max heapﻋﻨﺼﺮي ﺑﺎ ﺑﺰرگﺗﺮﻳﻦ ﻛﻠﻴﺪ را از درﺧﺖ maxheapﺟﺪا ﻛﺮده و ﺑﺮﻣﻲﮔﺮداﻧﺪ .ازآﻧﺠﺎﻛـﻪ در max heapﺑـﺰرگﺗـﺮﻳﻦ ﻋﻨـﺼﺮ در رﻳﺸﻪ A 1ﻗﺮار دارد ،ﺑﻨﺎﺑﺮاﻳﻦ اﺑﺘﺪا رﻳﺸﻪ را در ﻣﺘﻐﻴﺮ maxﻗﺮار داده و ﺳﭙﺲ آﺧﺮﻳﻦ ﻋﻨﺼﺮ heapرا در رﻳﺸﻪ A 1ﻗﺮار ﻣﻲدﻫـﺪ و از اﻧـﺪازهي 1 . priority queue . max priority queue 3 . min priority queue 2 18 ﺳﺎﺧﺘﻤﺎن داده heapﻳﻚ واﺣﺪ ﻛﻢ ﻣﻲﻛﻨﺪ .ﺑﺎ اﻳﻦ ﻛﺎر ﻓﺮزﻧﺪان رﻳﺸﻪ max heap ،ﺑﺎﻗﻲ ﺧﻮاﻫﻨﺪ ﻣﺎﻧﺪ اﻣﺎ درﺧﺖ ﻣﺸﺘﻖ ﺷﺪه از رﻳﺸﻪ ﻣﻤﻜﻦ اﺳﺖ وﻳﮋﮔـﻲ max heap را ﻧﻘﺾ ﻛﻨﺪ .ازاﻳﻦرو ﺑﺮاي ﺣﻔﻆ وﻳﮋﮔﻲ max heapﻳﻚ ﻓﺮاﺧﻮاﻧﻲ MAX HEAPIFYﺑﺮاي آراﻳﻪي A 1 n 1اﻧﺠﺎم ﻣﻲﺷﻮد. HEAP. EXTRACT - MAX A 1 if A.heap size 1 "2 error " heap underflow 3 max A 1 A 1 A A.heap size A.heap size A.heap size 1 زﻣﺎن اﺟﺮاﻳﻲ روال HEAP EXTRACT MAX اﺳﺖ .ﭘﺲ اﻳﻦ روال زﻣﺎن O lg n را ﺻﺮف ﻣﻲﻛﻨﺪ. ﺑﻪﻃﻮر ﻣﺸﺎﺑﻪ روال HEAP EXTRACT MIN 4 5 6 MAX HEAPIFY A ,1 7 return max ﺑﺮاي ﻣﻘﺪاردﻫﻲ اوﻟﻴﻪ ﺑﺮاﺑـﺮ ﺑـﺎ O 1و زﻣـﺎن MAX HEAPIFYﺑﺮاﺑـﺮ ﺑـﺎ O lg n ﻋﻨﺼﺮي ﺑﺎ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ را از درﺧﺖ minheapﺟﺪا ﻛﺮده و ﺑﺮﻣﻲﮔﺮداﻧﺪ. HEAP. EXTRACT - MIN A if A.heap size 1 " error" heap underflow min A 1 A 1 A A.heap size A.heap size A.heap size 1 MIN HEAPIFY A ,1 return min HEAP INCREASE KEY 1 2 3 4 5 6 7 اﻳﻦ روال ﻛﻠﻴﺪ ﻋﻨﺼﺮي از max heapرا ﺑﺎ اﻧﺪﻳﺲ iﺑﻪ ﻳﻚ ﻣﻘﺪار ﺟﺪﻳﺪ ﺑﻴﺶﺗﺮ اﻓﺰاﻳﺶ ﻣﻲدﻫﺪ .ﭼﻮن ﻣﻤﻜﻦ اﺳـﺖ ﺑـﺎ اﻓـﺰاﻳﺶ ﻛﻠﻴـﺪ ، A i درﺧـﺖ وﻳﮋﮔﻲ max heapرا از دﺳﺖ ﺑﺪﻫﺪ ،ﺗﺎﺑﻊ ﻣﺴﻴﺮي از اﻳﻦ ﮔﺮه ﺗﺎ رﻳﺸﻪ را ﺑﺮاي ﻳﺎﻓﺘﻦ ﻣﻜﺎن ﻣﻨﺎﺳﺐ آن ﻛﻠﻴﺪ ﻣﻲﭘﻴﻤﺎﻳﺪ .در ﻃﻲ اﻳﻦ ﻣـﺴﻴﺮ ،ﻛﻠﻴـﺪ اﻓـﺰاﻳﺶ ﻳﺎﻓﺘﻪ ﻣﻜﺮراً ﺑﺎ ﭘﺪرش ﻣﻘﺎﻳﺴﻪ ﻣﻲﺷﻮد .اﮔﺮ اﻳﻦ ﻛﻠﻴﺪ از ﭘﺪرش ﺑﺰرگﺗﺮ ﺑﺎﺷﺪ ،ﺑﺎ آن ﺟﺎﺑﻪﺟﺎ ﻣﻲﺷﻮد ،در ﻏﻴﺮ اﻳﻦ ﺻﻮرت روال ﺑﻪ ﭘﺎﻳﺎن ﻣﻲرﺳﺪ و ﻣﻘﺪار ﺟﺪﻳـﺪ ، keyﻣﺘﻌﻠﻖ ﺑﻪ ﻛﻠﻴﺪ ﮔﺮهي A i ﻣﻲﺷﻮد. HEAP 19 HEAP - INCREASE - KEY A ,i ,key 1 if key A i "error " new key is smaller than current key A i key 2 3 4 while i 1 and A PARENT i A i exchange A i with A PARENT i ازآﻧﺠﺎﻛﻪ اﻳﻦ روال ﻣﺴﻴﺮي از ﮔﺮهي iرا ﺣﺪاﻛﺜﺮ ﺗﺎ رﻳﺸﻪ ﻣﻲﭘﻴﻤﺎﻳﺪ زﻣﺎن اﺟﺮاﻳﻲ آن O lg n اﺳﺖ. i PARENT i 5 6 ﻣﺜﺎل در ﻳﻚ max heapﺑﻪ ﺷﻜﻞ زﻳﺮ ﻣﻲﺧﻮاﻫﻴﻢ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮه ﺷﻤﺎرة 8ﻳﻌﻨﻲ 19را ﺑﻪ 70اﻓﺰاﻳﺶ دﻫﻴﻢ .در اﺛﺮِ اﻳﻦ اﻓﺰاﻳﺶ ،ﻣﻘﺪار ﻛﻠﻴﺪ 70 ﺗﺎ ﻗﺒﻞ از رﻳﺸﻪ ﺑﺎﻻ ﻣﻲآﻳﺪ ﺗﺎ وﻳﮋﮔﻲِ max heapﺣﻔﻆ ﺷﻮد. ﺑﻪﻃﻮر ﻣﺸﺎﺑﻪ روال HEAP DECREASE KEY ﻛﻠﻴﺪ ﻋﻨﺼﺮ iام ﻣﺮﺑﻮط ﺑﻪ min heapرا ﺑﻪ ﻣﻘﺪار ﻛﻤﺘﺮ از ﻗﺒﻠﺶ ﻛﺎﻫﺶ ﻣﻲدﻫﺪ. HEAP - DECREASE - KEY A ,i ,key 1 if key A i "error " new key is larger than current key A i key 2 3 4 while i 1 and A PARENT i A i exchange A i with A PARENT i زﻣﺎن اﺟﺮاﻳﻲ اﻳﻦ روال ﺑﺮاﺑﺮ ﺑﺎ O lg n ﻣﻲﺑﺎﺷﺪ. 5 6 i PARENT i ﻣﺜﺎل در ﻳﻚ min heapﺑﻪ ﺷﻜﻞ زﻳﺮ ﻣﻲﺧﻮاﻫﻴﻢ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮه ﺷﻤﺎرة 8ﻳﻌﻨﻲ 37را ﺑﻪ 10ﻛﺎﻫﺶ دﻫﻴﻢ .در اﺛﺮِ اﻳﻦ ﻛﺎﻫﺶ ،ﻣﻘﺪار ﻛﻠﻴﺪ 10 ﺗﺎ رﻳﺸﻪ ﺑﺎﻻ ﻣﻲآﻳﺪ ﺗﺎ وﻳﮋﮔﻲِ min heapﺣﻔﻆ ﺷﻮد. Max HEAP INSERT ﻗﺎﻋﺪة ﻛﻠﻲ ﺑﺮاي درج ﻳﻚ ﮔﺮه ﺟﺪﻳﺪ در ﻳﻚ heapآن اﺳﺖ ﻛﻪ اﺑﺘﺪا ﮔﺮه ﺟﺪﻳﺪ ﺑﻪ اﻧﺘﻬﺎي درﺧﺖ اﺿﺎﻓﻪ ﺷﺪه ﺳﭙﺲ ﺑﺎ ﻣﻘﺎﻳﺴﻪ و در ﺻﻮرت ﻧﻴﺎز ﺟﺎﺑﺠـﺎﻳﻲ ﺑﺎ واﻟﺪ و اﺟﺪادش در ﻣﻜﺎن ﻣﻨﺎﺳﺒﻲ ﻗﺮار ﻣﻲﮔﻴﺮد ،ﺗﺎ وﻳﮋﮔﻲ max heapﺣﻔﻆ ﺷﻮد. 20 ﺳﺎﺧﺘﻤﺎن داده ﺗﺎﺑﻊ MAX HEAP INSERTﻋﻤﻞ درج را ﺑﻪﺻﻮرت زﻳﺮ در ﻳﻚ maxheapاﻧﺠﺎم ﻣﻲدﻫﺪ: -1اﺑﺘﺪا اﻧﺪازة درﺧﺖ را ﻳﻚ واﺣﺪ اﻓﺰاﻳﺶ داده و ﮔﺮهاي ﺟﺪﻳﺪ )ﺑﺎ ﻛﻠﻴﺪ ( را ﺑﻪ اﻧﺘﻬﺎي درﺧﺖ اﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ )ﺳﻄﺮ 1و (2 -2ﺳﭙﺲ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ HEAP INCREASE KEYﻛﻠﻴﺪ ﮔﺮه ﺟﺪﻳﺪ را از ﺑﻪ ) keyﻣﻘﺪار ﺟﺪﻳﺪ( اﻓﺰاﻳﺶ داده و آن را در ﻣﻜﺎن ﻣﻨﺎﺳﺒ ِ ﻲ در ﻣﺴﻴﺮِ ﮔﺮه ﺟﺪﻳﺪ ﺗﺎ رﻳﺸﻪ ﻗﺮار ﻣﻲدﻫﺪ. ﺗﺤﻠﻴﻞ اﻟﮕﻮرﻳﺘﻢ: MAX - HEAP - INSERT A , key A.heap size A.heap size 1 1 A A.heap size 2 HEAP - INCREASE - KEY A , A.heap size , key 3 درﻣﺜﺎل ﺑﺎﻻ ﺑﺎ درج ﮔﺮه ﺑﺎ ﻛﻠﻴﺪ 100ﺑﻪ اﻧﺘﻬﺎي درﺧﺖ ،ﻛﻠﻴﺪ ﻣﻮرد ﻧﻈﺮ در اﺛﺮ اﺟﺮاي ﺗﺎﺑﻊ INCREASEﺗﺎ ﮔﺮه رﻳﺸﻪ ﺑﺎﻻ ﻣﻲ رود. زﻣﺎن اﺟﺮا: از آن ﺟﺎ ﻛﻪ ﻣﻤﻜﻦ اﺳﺖ ﻣﻘﺪار ﻛﻠﻴﺪ در ﮔﺮه ﺟﺪﻳﺪ)ﮔﺮه آﺧﺮ ﺑﺎ اﻧﺪﻳﺲ (nﻣﺴﻴﺮي از ﮔﺮه ﻣﻮردﻧﻈﺮ ﺗﺎ رﻳﺸﻪ را ﻃﻲ ﻛﻨﺪ ﺑﻨﺎﺑﺮاﻳﻦ زﻣـﺎن اﺟـﺮاي اﻟﮕـﻮرﻳﺘﻢ درج ﻳﻚ ﮔﺮه در درﺧﺖ heapﺣﺪاﻛﺜﺮ ﺑﻪ اﻧﺪازه ﻋﻤﻖ اﻳﻦ ﮔﺮه ﻳﻌﻨﻲ ) lg n O(lgnﺧﻮاﻫﺪ ﺑﻮد ﺑﻄﻮر ﻣﺸﺎﺑﻪ ﺗﺎﺑﻊ MIN HEAP INSERTﻋﻤﻞ درج را ﺑﻪﺻﻮرت زﻳﺮ در ﻳﻚ maxheapاﻧﺠﺎم ﻣﻲدﻫﺪ: -1اﺑﺘﺪا اﻧﺪازة درﺧﺖ را ﻳﻚ واﺣﺪ اﻓﺰاﻳﺶ داده و ﮔﺮهاي ﺟﺪﻳﺪ )ﺑﺎ ﻛﻠﻴﺪ ( را ﺑﻪ اﻧﺘﻬﺎي درﺧﺖ اﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ )ﺳﻄﺮ 1و (2 -2ﺳﭙﺲ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﺗﺎﺑﻊ HEAP DECREASE KEYﻛﻠﻴﺪ ﮔﺮه ﺟﺪﻳﺪ را از ﺑﻪ ) keyﻣﻘﺪار ﺟﺪﻳﺪ( ﻛﺎﻫﺶ داده و آن را در ﻣﻜﺎن ﻣﻨﺎﺳﺒ ِ ﻲ در ﻣﺴﻴﺮِ ﮔﺮه ﺟﺪﻳﺪ ﺗﺎ رﻳﺸﻪ ﻗﺮار ﻣﻲدﻫﺪ. MIN - HEAP - INSERT A , key A.heap size A.heap size 1 1 A A.heap size HEAP - DECREASE - KEY A , A.heap size , key 2 درﻣﺜﺎل ﺑﺎﻻ ﺑﺎ درج ﮔﺮه ﺑﺎ ﻛﻠﻴﺪ 10ﺑﻪ اﻧﺘﻬﺎي درﺧﺖ ،ﻛﻠﻴﺪ ﻣﻮرد ﻧﻈﺮ در اﺛﺮ اﺟﺮاي ﺗﺎﺑﻊ DECREASEﺗﺎ ﮔﺮه رﻳﺸﻪ ﺑﺎﻻ ﻣﻲ رود. درج در HEAPﺟﺎﺑﺠﺎ ﭘﺬﻳﺮ ﻧﻴﺴﺖ 3 HEAP 21 درﺻﻮرﺗﻲﻛﻪ ﺗﺮﺗﻴﺐ درج ﻋﻨﺎﺻﺮ در ﻳﻚ heapﻋﻮض ﺷﻮد ،ﻣﻤﻜﻦ اﺳﺖ درﺧﺘﺎن ﻳﻜﺴﺎن ﻳﺎ ﻣﺘﻔﺎوﺗﻲ ﺑﻪدﺳﺖ آﻳﺪ .ﺑﻨﺎﺑﺮاﻳﻦ ﻋﻤﻠﻴـﺎت درج در درﺧـﺖheap ﺟﺎﺑﺠﺎﭘﺬﻳﺮ ﻧﻴﺴﺖ ،ﺑﻪ ﻣﺜﺎل زﻳﺮ دﻗﺖ ﻛﻨﻴﺪ: ﺷﺮح ﻋﻤﻠﻴﺎت ﺗﺮﺗﻴﺐ درج ﻋﻨﺎﺻﺮ در ﻳﻚ minheap 1, 2, 3 2,1, 3 1,3, 2 ﺳﺎﺧﺖ heap ﺑﻪ روش ﺑﺮون ازﺟﺎ ) درج nﻛﻠﻴﺪ در درﺧﺖ ﺗﻬﻲ( ﺑــﺎ nﺑــﺎر ﻓﺮاﺧــﻮاﻧﻲ ﻣﺘــﻮاﻟﻲ روال MAX HEAP INSERTدر ﻳــﻚ heapﺗﻬــﻲ ﻣــﻲﺗــﻮاﻧﻴﻢ ﻳــﻚ درﺧــﺖ heapﺑــﺎ nﮔــﺮه را ﺑــﺴﺎزﻳﻢ. BUILD MAX HEAP A ﻧﺴﺨﻪاي ﻣﺘﻔﺎوت از BUILD MAX HEAP A اﺳﺖ ﻛﻪ آراﻳﻪي Aرا ﺑﻪﺻﻮرت ﺑﺮون ازﺟﺎ ﺑـﻪ ﻳـﻚ درﺧﺖ heapﺗﺒﺪﻳﻞ ﻣﻲﻛﻨﺪ. BUILD - MAX - HEAP A 1 A.heap_size = 1 2 for i = 1 to A.length 3 MAX - HEAP - INSERT A , A i ازآﻧﺠﺎﻛﻪ اﻳﻦ روال nﻋﻨﺼﺮ را ﺑﻪ ﻳﻚ درﺧﺖ ﺗﻬﻲ اﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ و زﻣﺎن اﺟﺮاي ﻫﺮ ﺑـﺎر ﻓﺮاﺧـﻮاﻧﻲ ﺗـﺎﺑﻊ ، MAX HEAP INSERTﺑـﺮاي ﮔـﺮه ﺑـﺎ اﻧﺪﻳﺲ iﺑﺮاﺑﺮ ﺑﺎ ﻋﻤﻖ ﮔﺮه ﻳﻌﻨﻲ lg i اﺳﺖ ،ﺑﻨﺎﺑﺮاﻳﻦ زﻣﺎن اﺟﺮاي اﻳﻦ روال ﺑﺼﻮرت زﻳﺮ ﺑﺮاﺑﺮ ﺑﺎ ) O(nlognﺧﻮاﻫﺪ ﺑﻮد(CLRS,6-1.b). n lg i lg 1+ lg 2 + ... + lg n = lg n! = O(nlogn) i=1 ﻣﺜﺎل :ﻣﻲ ﺧﻮاﻫﻴﻢ اﻋﺪاد 30,20,50,10,40,70,60,80,60را از ﭼﭗ ﺑﻪ راﺳﺖ در ﻳﻚ maxhepﺗﻬﻲ درج ﻛﻨﻴﻢ 22 ﺳﺎﺧﺘﻤﺎن داده ﻣﻘﺎﻳﺴﻪ روﺷﻬﺎي ﺳﺎﺧﺖ درﺧﺖ HEAP ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﻄﺎﻟﺐ ﺑﻴﺎن ﺷﺪه ﺗﺎ ﺑﺤﺎل ﻣﻲ ﺗﻮاﻧﻴﻢ ﻧﺘﻴﺠﻪ ﺑﮕﻴﺮﻳﻢ ﻛﻪ ﺑﻄﻮر ﻛﻠﻲ دو روش ﻋﻤﻮﻣﻲ ﺑﺮاي اﻳﺠﺎد ﻳﻚ درﺧﺖ heapوﺟﻮد دارد: اﻟﻒ( روش درﺟﺎ :ﺗﺒﺪﻳﻞ ﻳﻚ آراﻳﻪ ﺑﻪ درﺧﺖ heapﺑﺎ اﺳﺘﻔﺎده از روال BUILD MAX HEAP A در زﻣﺎن )O(n ب ( روش ﺑﺮون ازﺟﺎ :اﺿﺎﻓﻪ ﻛﺮدن nﻋﻨﺼﺮ ﺑﻪ ﻳﻚ درﺧﺖ heapﺗﻬﻲ ﺑﺎ اﺳﺘﻔﺎده از روال BUILD MAX HEAP A در زﻣﺎن )O(nlogn ﺑﺎ ﺑﺮرﺳﻲ و ﺗﺤﻠﻴﻞ ﻫﺮ ﻳﻚ از دو روش ﻣﻲ ﺗﻮاﻧﻴﻢ ﻧﺘﺎﻳﺞ زﻳﺮ را ﺑﺪﺳﺖ آورﻳﻢ: -1ﻫﻴﭗ ﻫﺎي ﺑﺪﺳﺖ آﻣﺪه از دو روش اﻟﺰاﻣﺎ ﻳﻜﺴﺎن ﻧﻴﺴﺘﻨﺪ)(CLRS,6-1.a -2روش درﺟﺎ از ﻣﺮﺗﺒﻪ ﺧﻄﻲ ﺑﻮده درﻧﺘﻴﺠﻪ زﻣﺎن ﻛﻤﺘﺮ و ﺳﺮﻋﺖ ﺑﻴﺸﺘﺮي داﺷﺘﻪ و ﺑﻪ روش ﺑﺮون از ﺟﺎ ﺗﺮﺟﻴﺢ داده ﻣﻲ ﺷﻮد. ) MAX HEAP Changeﺗﻐﻴﻴﺮ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮه دﻟﺨﻮاه( اﻳﻦ روال ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮة iاُم از max heapرا ﺑﻪ ﻣﻘﺪار ﺟﺪﻳﺪ kﺗﻐﻴﻴﺮ ﻣﻲ دﻫﺪ .در اﻳﻦ وﺿﻌﻴﺖ ﻳﻜﻲ از دو ﺣﺎﻟﺖ زﻳﺮ ﺑﻮﺟﻮد ﻣﻲ آﻳﺪ: ﺣﺎﻟﺖ اول :اﮔﺮ ﻣﻘﺪار ﺟﺪﻳﺪ ﻛﻠﻴﺪ ﮔﺮة iﻳﻌﻨﻲ kاز ﻣﻘﺪار ﻛﻠﻴﺪ واﻟﺪش ﺑﺰرگﺗﺮ ﺑﺎﺷﺪ ،ازآﻧﺠﺎﻛﻪ درﺧﺖ ﻗﺒﻼً max heapﺑﻮده اﺳﺖ ،ﻣﺎﻧﻨﺪ آن اﺳﺖ ﻛﻪ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮهي iﺑﻪ ﺑﻴﺸﺘﺮ از ﻗﺒﻠﺶ اﻓﺰاﻳﺶ ﻳﺎﻓﺘﻪ اﺳﺖ .ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ روال HEAP INCREASE KEYوﻳﮋﮔﻲ max heapﺣﻔﻆ ﻣﻲﺷﻮد. ﺣﺎﻟﺖ دوم :اﮔﺮ ﻣﻘﺪار ﺟﺪﻳﺪ ﻛﻠﻴﺪ ﮔﺮة iاز ﻣﻘﺪار ﻛﻠﻴﺪ واﻟﺪش ﻛﻮﭼﻚﺗﺮ ﺑﺎﺷﺪ ،آنﮔﺎه ﺑﺎ اﺟﺮاي روال MAX HEAPIFYﻣﻲﺗﻮان وﻳﮋﮔﻲ max heapرا ﺑﺮاي زﻳﺮ درﺧﺖ ﻣﺸﺘﻖ ﺷﺪه از iﺣﻔﻆ ﻛﺮد. MAX - HEAP - Change i , k 1 A i k 2 if key A PARENT i MAX - HEAPIFY A ,i 3 return 4 else 5 HEAP - INCREASE - KEY A ,i , k ازآﻧﺠﺎﻛﻪ در اﻳﻦ روال ﺣﺘﻤﺎ ﻳﻜﻲ از دو ﺣﺎﻟﺖ اول ﻳﺎ دوم رخ ﻣﻲدﻫﺪ ،روال ﺣﺪاﻛﺜﺮ ،ﻣﺴﻴﺮي از ﮔﺮهي iﺗﺎ ﻳﻚ ﺑﺮگ و ﻳـﺎ ﻣـﺴﻴﺮي از ﮔـﺮهي iﺗـﺎ رﻳـﺸﻪ را ﻣﻲﭘﻴﻤﺎﻳﺪ .ﭘﺲ زﻣﺎن اﺟﺮاﻳﻲ اﻳﻦ روال ﺑﺮاﺑﺮ ﺑﺎ O lgn ﺧﻮاﻫﺪ ﺑﻮد. HEAP 23 در اﻳﻦ ﻣﺜﺎل ﮔﺮه ﺷﻤﺎره 2ﺑﺎ ﻣﻘﺪار ﻛﻠﻴﺪ 29ﺑﻪ ﻣﻘﺪار ﺟﺪﻳﺪ 11ﺗﻐﻴﻴﺮ ﻳﺎﻓﺘﻪ و از آﻧﺠﺎ ﻛﻪ ﻣﻘﺪار آن ﻛﺎﻫﺶ ﻳﺎﻓﺘﻪ اﺳﺖ روال Heapifyﺑﺮاي آن اﺟﺮا ﻣﻲ ﺷﻮد در اﻳﻦ ﻣﺜﺎل ﮔﺮه ﺷﻤﺎره 2ﺑﺎ ﻣﻘﺪار ﻛﻠﻴﺪ 29ﺑﻪ ﻣﻘﺪار ﺟﺪﻳﺪ 70ﺗﻐﻴﻴﺮ ﻳﺎﻓﺘﻪ و از آﻧﺠﺎ ﻛﻪ ﻣﻘﺪار آن اﻓﺰاﻳﺶ ﻳﺎﻓﺘﻪ اﺳﺖ روال Increase-keyﺑﺮاي آن اﺟﺮا ﻣﻲ ﺷﻮد ﺑﻄﻮر ﻣﺸﺎﺑﻪ روال MIN - HEAP - Changeﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮة iاُم از min heapرا ﺑﻪ ﻣﻘﺪار ﺟﺪﻳﺪ kﺗﻐﻴﻴﺮ ﻣﻲ دﻫﺪ. MIN - HEAP - Change i , k 1 A i k 2 if key A PARENT i MAX - HEAPIFY A ,i 3 return 4 else 5 HEAP - DECREASE - KEY A ,i , k ) MAX HEAP DELETEﺣﺬف ﮔﺮه دﻟﺨﻮاه( اﻳﻦ روال ﮔﺮة دﻟﺨﻮاه ﺑﺎ اﻧﺪﻳﺲِ iرا از max heapﺣﺬف ﻣﻲﻛﻨﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر آﺧﺮﻳﻦ ﻋﻨﺼﺮ heapرا ﺟﺎﻳﮕﺰﻳﻦ ﮔﺮهي iﻛﺮده و از اﻧـﺪازه heapﻳـﻚ واﺣﺪ ﻛﻢ ﻣﻲﻛﻨﺪ .در اﻳﻦ وﺿﻌﻴﺖ ﻳﻜﻲ از دو ﺣﺎﻟﺖ زﻳﺮ ﺑﻮﺟﻮد ﻣﻲ آﻳﺪ: ﺣﺎﻟﺖ اول :اﮔﺮ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮة ﺟﺎﻳﮕﺰﻳﻦ ﺷﺪه از ﻣﻘﺪار ﻛﻠﻴﺪ واﻟﺪش ﺑﺰرگﺗﺮ ﺑﺎﺷﺪ ،ازآﻧﺠﺎﻛﻪ درﺧﺖ ﻗﺒﻼً max heapﺑﻮده اﺳﺖ ،ﻣﺎﻧﻨﺪ آن اﺳﺖ ﻛﻪ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮهي iﺑﻪ ﻣﻘﺪاري ﺑﻴﺸﺘﺮ از ﻗﺒﻠﺶ اﻓﺰاﻳﺶ ﻳﺎﻓﺘﻪ اﺳﺖ .ﺑﻨﺎﺑﺮاﻳﻦ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ روال HEAP INCREASE KEYوﻳﮋﮔﻲ max heap ﺣﻔﻆ ﻣﻲﺷﻮد. ﺣﺎﻟﺖ دوم :اﮔﺮ ﻣﻘﺪار ﻛﻠﻴﺪ ﮔﺮهي ﺟﺎﻳﮕﺰﻳﻦ ﺷﺪه از ﻣﻘﺪار ﻛﻠﻴﺪ واﻟﺪش ﻛﻮﭼﻚﺗﺮ ﺑﺎﺷﺪ ،آنﮔﺎه ﺑﺎ اﺟﺮاي روال MAX HEAPIFYﻣﻲﺗﻮان وﻳﮋﮔﻲ max heapرا ﺑﺮاي درﺧﺖ ﻣﺸﺘﻖ ﺷﺪه از iﺣﻔﻆ ﻛﺮد. MAX - HEAP - DELETE A ,i 1 A i A A.heap size A.heap size A.heap size 1 key A i if key A PARENT i MAX - HEAPIFY A ,i return else HEAP - INCREASE - KEY A ,i , key 2 3 4 5 6 7 ازآﻧﺠﺎﻛﻪ ﺣﺘﻤﺎً در اﻳﻦ روال ﻳﻜﻲ از دو ﺣﺎﻟﺖ 1ﻳﺎ 2رخ ﻣﻲدﻫﺪ ،روال ﺣﺪاﻛﺜﺮ ،ﻣﺴﻴﺮي از ﮔﺮهي iﺗﺎ ﻳـﻚ ﺑـﺮگ و ﻳـﺎ ﻣـﺴﻴﺮي از ﮔـﺮهي iﺗـﺎ رﻳـﺸﻪ را ﻣﻲﭘﻴﻤﺎﻳﺪ .ﺑﻨﺎﺑﺮاﻳﻦ زﻣﺎن اﺟﺮاﻳﻲ اﻳﻦ روال ﺑﺮاﺑﺮ ﺑﺎ O lgn ﺧﻮاﻫﺪ ﺑﻮد(CLRS,6.5-8 ). 24 ﺳﺎﺧﺘﻤﺎن داده در ﻣﺜﺎل ﺑﺎﻻ ﻫﻨﮕﺎم ﺣﺬف ﮔﺮه ﺑﺎ اﻧﺪﻳﺲ ، 2ﮔﺮه آﺧﺮ ﺑﺎ ﻛﻠﻴﺪ 25ﺟﺎﻳﮕﺰﻳﻦ ﻣﻲ ﺷﻮد .ﻛﻪ در اداﻣﻪ ﻧﻴﺎز ﺑﻪ اﺟﺮاي روال heapifyدارﻳﻢ . در ﻣﺜﺎل ﺑﺎﻻ ﻫﻨﮕﺎم ﺣﺬف ﮔﺮه ﺑﺎ اﻧﺪﻳﺲ ، 4ﮔﺮه آﺧﺮ ﺑﺎ ﻛﻠﻴﺪ 58ﺟﺎﻳﮕﺰﻳﻦ ﻣﻲ ﺷﻮد .و از آﻧﺠﺎ ﻛﻪ ﻣﻘﺪار آن اﻓﺰاﻳﺶ ﻳﺎﻓﺘﻪ اﺳﺖ روال Increase-keyﺑﺮاي آن اﺟﺮا ﻣﻲ ﺷﻮد ﺑﻪﻃﻮر ﻣﺸﺎﺑﻪ روال MIN - HEAP - DELETE ﮔﺮة دﻟﺨﻮاه ﺑﺎ اﻧﺪﻳﺲِ iرا از ﻳﻚ min heapﺣﺬف ﻣﻲ ﻛﻨﺪ. MIN - HEAP - DELETE A ,i 1 A i A A.heap size A.heap size A.heap size 1 key A i if key A PARENT i 2 3 4 MIN - HEAPIFY A ,i 5 return 6 else HEAP - DECREASE - KEY A ,i , key 7 ﭘﻴﺪاﻛﺮدن Kاُﻣﻴﻦ ﻛﻮﭼﻚﺗﺮ در min - heapﺑﺼﻮرت ﻛﺎرا اﺑﺘﺪا ﻳﻚ ﻫﻴﭗ ﺟﺪﻳﺪ ﺧﺎﻟﻲ اﻳﺠﺎد ﻣﻲ ﻛﻨﻴﻢ و رﻳﺸﻪ ﻫﻴﭗ اﺻﻠﻲ را در آن درج ﻣﻲ ﻛﻨﻴﻢ ،ﺳﭙﺲ kﺑﺎر روال زﻳﺮ را ﺗﻜﺮار ﻣﻲ ﻛﻨﻴﻢ: -1از ﻫﻴﭗ ﺟﺪﻳﺪ رﻳﺸﻪ را ﺣﺬف ﻣﻲ ﻛﻨﻴﻢ -2ﻓﺮزﻧﺪان ﻋﻨﺼﺮِ ﺣﺬف ﺷﺪه را از ﻫﻴﭗ اﺻﻠﻲ در ﻫﻴﭗ ﺟﺪﻳﺪ درج ﻣﻲ ﻛﻨﻴﻢ در kاُُﻣﻴﻦ ﺗﻜﺮار روال ﺑﺎﻻ kاُﻣﻴﻦ ﻛﻮﭼﻜﺘﺮ از رﻳﺸﻪ ﻫﻴﭗ ﺟﺪﻳﺪ ﺧﺎرج ﻣﻲ ﺷﻮد و اﻟﮕﻮرﻳﺘﻢ ﭘﺎﻳﺎن ﻣﻲ ﻳﺎﺑﺪ زﻣﺎن اﻟﮕﻮرﻳﺘﻢ: از آﻧﺠﺎﻛﻪ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ ﻫﻴﭗ ﺟﺪﻳﺪ ﺣﺪاﻛﺜﺮ O k ﻣﻲ ﺑﺎﺷﺪ ﺑﻨﺎﺑﺮاﻳﻦ ارﺗﻔﺎع درﺧﺖ O lg k و زﻣﺎن اﻟﮕﻮرﻳﺘﻢ در ﻧﻬﺎﻳﺖ O k lg k ﺧﻮاﻫﺪ ﺑﻮد. ﻣﺜﺎل :دردر ﺧﺖ min Heapزﻳﺮ ﻣﻲ ﺧﻮاﻫﻴﻢ ﭼﻬﺎرﻣﻴﻦ ﻋﻨﺼﺮ ﻛﻮﭼﻜﺘﺮ)ﻋﺪد (20را ﺧﺎرج ﻛﻨﻴﻢ ،ﻋﻨﺎﺻﺮي ﻛﻪ از اﻳﻦ درﺧـﺖ در ﻫﻴـﭗ ﺟﺪﻳـﺪ ﻗـﺮار ﻣـﻲ ﮔﻴﺮﻧﺪ ،ﺑﻪ ﺗﺮﺗﻴﺐ در ﻣﺴﻴﺮِ اوﻟﻴﻦ ،دوﻣﻴﻦ و ﺳﻮﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺧﻮاﻫﻨﺪ ﺑﻮد : ﻣﺮاﺣﻞ ﻛﺎر اﻟﮕﻮرﻳﺘﻢ ﺑﻌﺪ از درج رﻳﺸﻪ درﺧﺖ)ﻛﻠﻴﺪ (12در ﻳﻚ ﻫﻴﭗ ﺧﺎﻟﻲ ﺟﺪﻳﺪ ﺑﺼﻮرت زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد: HEAP 25 ﺗﻜﺮار اول :رﻳﺸﻪ ) (12از ﻫﻴﭗ ﺟﺪﻳﺪ ﺧﺎرج ﺷﺪه و دوﻓﺮزﻧﺪش) 16و (30از ﻫﻴﭗ اﺻﻠﻲ در آن درج ﻣﻲ ﺷﻮﻧﺪ. ﺗﻜﺮار دوم :رﻳﺸﻪ) (16ازﻫﻴﭗ ﺟﺪﻳﺪ ﺧﺎرج ﺷﺪه و دو ﻓﺮزﻧﺪش ) 18و (70از ﻫﻴﭗ اﺻﻠﻲ در آن درج ﻣﻲ ﺷﻮﻧﺪ. ﺗﻜﺮارﺳﻮم :رﻳﺸﻪ) (18از ﻫﻴﭗ ﺟﺪﻳﺪ ﺧﺎرج ﺷﺪه و دو ﻓﺮزﻧﺪش) 20و (34از ﻫﻴﭗ اﺻﻠﻲ در آن درج ﻣﻲ ﺷﻮﻧﺪ. ﺗﻜﺮارﭼﻬﺎرم:رﻳﺸﻪ)(20از ﻫﻴﭗ ﺟﺪﻳﺪ ﺧﺎرج ﺷﺪه و اﻟﮕﻮرﻳﺘﻢ ﭘﺎﻳﺎن ﻣﻲ ﭘﺬﻳﺮد. ﭘﻴﺪا ﻛﺮدن Kاُﻣﻴﻦ ﺑﺰرگﺗﺮ در max - heapﺑﺼﻮرت ﻛﺎرا ﺑﻄﻮر ﻣﺸﺎﺑﻪ ﻣﻲ ﺗﻮاﻧﻴﻢ Kاُﻣﻴﻦ ﺑﺰرﮔﺘﺮ را از ﻳﻚ درﺧﺖ max - heapدر زﻣﺎن O k lg k ﭘﻴﺪا ﻛﻨﻴﻢ ﺗﺒﺪﻳﻞ درﺧﺖ Heap ﺑﻪ درﺧﺖ BST ﻫﻴﭻ اﻟﮕﻮرﻳﺘﻤﻲ ﻣﺒﺘﻨﻲ ﺑﺮ ﻣﻘﺎﻳﺴﻪ ﻧﻤﻲﺗﻮاﻧﺪ ﻛﻢﺗﺮ از زﻣﺎن n log nﻳﻚ درﺧﺖ Heapرا ﺑﻪ درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ BST ﺗﺒﺪﻳﻞ ﻛﻨﺪ ،ﺑﻪ اﻟﮕـﻮرﻳﺘﻢ زﻳﺮ دﻗﺖ ﻛﻨﻴﺪ: (1ﺳﺎﺧﺘﻦ درﺧﺖ Heapاز آراﻳﻪ داده ﺷﺪه ﺑﻪ ﺻﻮرت درﺟﺎ (2ﺗﺒﺪﻳﻞ درﺧﺖ Heapﺑﻪ درﺧﺖ BST (3ﭘﻴﻤﺎﻳﺶ ﻣﻴﺎنﺗﺮﺗﻴﺐ LVR ﺑﺮاي درﺧﺖ BST On ؟ On اﮔﺮ ﺗﺒﺪﻳﻞ درﺧﺖ Heapﺑﻪ درﺧﺖ BSTﻛﻢﺗﺮ از زﻣﺎن n log nاﻧﺠﺎم ﺷﻮد .آﻧﮕﺎه ﻣﺎ ﺗﻮاﻧﺴﺘﻪاﻳﻢ ﻛﻢﺗﺮ از زﻣـﺎن n log nﻳـﻚ آراﻳـﻪ دﻟﺨـﻮاه را ﻣﺮﺗـﺐ ﻛﻨﻴﻢ در ﺣﺎﻟﻴﻜﻪ ﺣﺪاﻗﻞ زﻣﺎن ﻣﺮﺗﺐﺳﺎزي ﺑﺮاي اﻟﮕﻮرﻳﺘﻢﻫﺎي ﻣﺒﺘﻨﻲ ﺑﺮ ﻣﻘﺎﻳﺴﻪ ﻣﺎﻧﻨﺪ ... ، merge sort ، Quick sort :ﺑﺮاﺑﺮ ﺑﺎ n log nاﺳـﺖ .ﺑﻨـﺎﺑﺮاﻳﻦ ﻧﺘﻴﺠﻪﮔﻴﺮي زﻳﺮ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﺳﺘﺪﻻل ﻓﻮق ﻗﺎﺑﻞ اﺳﺘﻨﺒﺎط ﺧﻮاﻫﺪ ﺑﻮد. ﻧﺘﻴﺠﻪ :ﺗﺒﺪﻳﻞ درﺧﺖ Heapﺑﻪ درﺧﺖ BSTﺣﺪاﻗﻞ در زﻣﺎن n log n اﻧﺠﺎم ﻣﻲﭘﺬﻳﺮد. ﺗﺒﺪﻳﻞ درﺧﺖ BST ﺑﻪ درﺧﺖ Heap ﻫﺮ درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ BST ﺑﻪ ﻛﻤﻚ ﻳﻜﻲ از اﻟﮕﻮرﻳﺘﻢﻫﺎي زﻳﺮ ﻣﻲﺗﻮاﻧﺪ از ﻣﺮﺗﺒﻪ ﺧﻄﻲ O n ﺑﻪ ﻳﻚ درﺧﺖ Heapﺗﺒﺪﻳﻞ ﺷﻮد. 26 ﺳﺎﺧﺘﻤﺎن داده اﻟﮕﻮرﻳﺘﻢ : I (1ﻳﻜﻲ از ﭘﻴﻤﺎﻳﺶﻫﺎي درﺧﺖ BSTرا ﺑﻪ دﻟﺨﻮاه در آراﻳﻪ Aذﺧﻴﺮه ﻣﻲﻛﻨﻴﻢ. (2اﻟﮕﻮرﻳﺘﻢ BUILD HEAPرا ﺑﺮ روي آراﻳﻪ Aاﺟﺮا ﻣﻲﻛﻨﻴﻢ. زﻣﺎن اﺟﺮاO n : ﺣﺎﻓﻈﻪ ﻣﺼﺮﻓﻲO n : اﻟﮕﻮرﻳﺘﻢ : II از آن ﺟﺎ ﻛﻪ ﭘﻴﻤﺎﻳﺶﻫﺎي LVRو RVLاز ﻫﺮ درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﺑﺎﻋﺚ ﻧﻤﺎﻳﺶ ﺻﻌﻮدي و ﻧﺰوﻟﻲ ﻛﻠﻴﺪﻫﺎ ﻣﻲﺷﻮﻧﺪ و ﻫﻤﭽﻨﻴﻦ ﻫﺮ آراﻳـﻪ ﺻﻌﻮدي و ﻧﺰوﻟﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﻳﻚ ﻧﻤﺎﻳﺶ از درﺧﺖ max Heapو min Heapﻫﺴﺘﻨﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﻣـﻲﺗـﻮاﻧﻴﻢ ﺑـﺪون اﺳـﺘﻔﺎده از اﻟﮕـﻮرﻳﺘﻢ Build Heap ﻫﻨﮕﺎم اﻧﺠﺎم ﭘﻴﻤﺎﻳﺶﻫﺎي ﻣﻮردﻧﻈﺮ ﺑﻪ ﺟﺎي ﻧﻤﺎﻳﺶ ﻛﻠﻴﺪﻫﺎ آنﻫﺎ را در ﻳﻚ آراﻳﻪ ذﺧﻴﺮه ﻛﻨﻴﻢ. زﻣﺎن اﺟﺮاO n : ﺣﺎﻓﻈﻪ ﻣﺼﺮﻓﻲO n : اﻟﮕﻮرﻳﺘﻢ : III (1ﺗﺒﺪﻳﻞ درﺧﺖ BSTﺑﻪ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻣﺮﺗﺐ (2ﺗﺒﺪﻳﻞ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻣﺮﺗﺐ ﺑﻪ ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻛﻞ زﻣﺎن اﺟﺮاO n : ﺣﺎﻓﻈﻪ ﻣﺼﺮﻓﻲO 1 : ﺟﺪول زﻣﺎﻧﻲِ اﺟﺮاي ﻋﻤﻠﻴﺎت ﻣﺨﺘﻠﻒ در Heap زﻣﺎن اﺟﺮا O 1 ﻋﻤﻠﻴﺎت در Heap ﻳﺎﻓﺘﻦ ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ در ) Max Heapرﻳﺸﻪ( ﻳﺎﻓﺘﻦ ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ در ) Min Heapرﻳﺸﻪ( درج ﻋﻨﺼﺮ ﺟﺪﻳﺪ INSERT ﺣﺬف ﻳﻚ ﮔﺮه دﻟﺨﻮاه DELETE O lg n On O n lg n O n lg k ﺣﺬف ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ از رﻳﺸﻪ EXTRACT MAX Max Heap ﺣﺬف ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ از رﻳﺸﻪ EXTRACT MIN Min Heap اﻓﺰاﻳﺶ ﻣﻘﺪار ﻛﻠﻴﺪ ﻳﻚ ﮔﺮه INCREASE KEY ﻛﺎﻫﺶ ﻣﻘﺪار ﻛﻠﻴﺪ ﻳﻚ ﮔﺮه DECREASE KEY ﺗﻐﻴﻴﺮ ﻣﻘﺪار ﻛﻠﻴﺪ ﻳﻚ ﮔﺮه CHANGE KEY ﻛﻨﺘﺮل وﻳﮋﮔﻲ Heapﺑﺮاي ﻳﻚ ﻋﻨﺼﺮ HEAPIFY ﻳﺎﻓﺘﻦ ﻳﻚ ﻋﻨﺼﺮ ﺑﺎ ﻛﻠﻴﺪ ﻣﺸﺨﺺ SEARCH ﻳﺎﻓﺘﻦ ﻋﻨﺼﺮ ﺑﺎ ﻛﻠﻴﺪ ﻣﻴﻨﻴﻤﻢ در ) MaxHeapواﻗﻊ در ﻳﻜﻲ از ﺑﺮگﻫﺎ( ﻳﺎﻓﺘﻦ ﻋﻨﺼﺮ ﺑﺎ ﻛﻠﻴﺪ ﻣﺎﻛﺰﻳﻤﻢ در ) MinHeapواﻗﻊ در ﻳﻜﻲ از ﺑﺮگﻫﺎ( ﺳﺎﺧﺖ Heap ﺑﻪ روش درﺟﺎ )ﺗﺒﺪﻳﻞ آراﻳﻪ ﺑﺎ nﻛﻠﻴﺪ ﺑﻪ (heap ﻛﻨﺘﺮلِ Heapﺑﻮدنِ ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﺑﺎ nﻛﻠﻴﺪ ﺗﺒﺪﻳﻞ ﻳﻚ Min Heapﺑﻪ Max Heapو ﺑﺎﻟﻌﻜﺲ ﺗﺒﺪﻳﻞ درﺧﺖ BSTﺑﻪ Heap ﺳﺎﺧﺖ Heap ﺑﻪ روش ﺑﺮون از ﺟﺎ )درج nﻛﻠﻴﺪ ﺑﻪ درﺧﺖ ﺗﻬﻲ( ﻣﺮﺗﺐﺳﺎزي ﻫﺮ آراﻳﻪ nﺗﺎﻳﻲ ﺑﻪ روش ﻫﺮﻣﻲ Heap sort ادﻏﺎم kﻟﻴﺴﺖ ﻣﺮﺗﺐ ﺑﺎ nﻛﻠﻴﺪ Om n ادﻏﺎم دو Heapﺑﺎ اﻧﺪازه ﻫﺎي mو n O k lg k ﭘﻴﺪا ﻛﺮدن kاُﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻛﻠﻴﺪ در ﻳﻚ Min Heapﺑﺎ nﻛﻠﻴﺪ ﭘﻴﺪا ﻛﺮدن kاُﻣﻴﻦ ﺑﺰرﮔﺘﺮﻳﻦ ﻛﻠﻴﺪ در ﻳﻚ Max Heapﺑﺎ nﻛﻠﻴﺪ ﺗﺒﺪﻳﻞ درﺧﺖ Heapﺑﻪ BST n lg n HEAP 27 ﺳﻮاﻻت آزﻣﻮن ﻫﺎي ﺳﺮاﺳﺮي و آزاد و داﻧﺸﮕﺎﻫﻬﺎي ﺧﺎرج 1ـ ﻳﻚ ﻣﺎﻛﺰﻳﻤﻢ ـ ﻫﻴﭗ ﺣﺎوي 64ﻋﻨﺼﺮ ﺑﺎ ﻛﻠﻴﺪﻫﺎي ﻣﺘﻔﺎوت 1ﺗﺎ 64اﺳﺖ .ﺑﺰرگﺗﺮﻳﻦ ﻋﺪدي ﻛﻪ ﻣﻲﺗﻮاﻧﺪ در ﺑﺮگ واﻗﻊ در آﺧﺮﻳﻦ ﺳﻄﺢ اﻳﻦ ﻫﻴﭗ ﻗﺮار ﮔﻴﺮد ،ﻛﺪامﻳﻚ از اﻋﺪاد زﻳﺮ ﻣﻲﺗﻮاﻧﺪ ﺑﺎﺷﺪ؟)ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ ، 83ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (91 58 (2 59 (1 56 (4 57 (3 2ـ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻣﺎﻛﺰﻳﻤﻢ ـ ﻫﻴﭗ ﺣﺎوي اﻋﺪاد ﻣﺘﻤﺎﻳﺰ 1ﺗﺎ 1023اﺳﺖ ﺣﺪاﻛﺜﺮ ﭼﻨﺪﺗﺎ از اﻋﺪاد ﺑﻴﺶﺗﺮ از 1000ﻣﻲﺗﻮاﻧﺪ در ﭘﺎﻳﻴﻦﺗﺮ ﻳـﻦ ﺳﻄﺢ درﺧﺖ ﻗﺮار ﮔﻴﺮﻧﺪ؟)ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (83 12 (2 10 (1 14 (4 13 (3 3ـ در ﻳﻚ heapﺑﺎ nﮔﺮه ﻛﻪ در ﻳﻚ آراﻳﻪ ﻧﻤﺎﻳﺶ داده ﺷﺪه ﺑﺎﺷﺪ ﮔﺮه iام در زﻳﺮ درﺧﺖ ﭼﭗ درﺧﺖ ،ﻣﺘﻨـﺎﻇﺮ ﺑـﺎ ﮔـﺮه jام در زﻳـﺮ درﺧﺖ راﺳﺖ درﺧﺖ ﻣﻲﺑﺎﺷﺪ ﺑﻪﻃﻮري ﻛﻪ ) ......ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (85 (1 log i2 1 ;j j/ 2 ji2 if j n (2 log i2 1 log i2 1 ;j j/ 2 ji2 if j n log i2 1 ji2 ji2 j 1 (4 j 1 (3 if j n j 2 2 4ـ اﮔﺮ در ﻳﻚ min heapﺟﺎي زﻳﺮ درﺧﺖﻫﺎي ﭼﭗ و راﺳﺖ ﺗﻌﻮﻳﺾ ﺷﻮد در آن ﺻﻮرت ﻛﺪام ﮔﺰﻳﻨﻪ ﺻﺤﻴﺢ اﺳﺖ؟)ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (85 j if j n (1ﻫﻤﻴﺸﻪ ﺳﺎﺧﺘﺎر min heapاز ﺑﻴﻦ ﻣﻲرود. (2ﺳﺎﺧﺘﺎر min heapﺗﺒﺪﻳﻞ ﺑﻪ max heapﻣﻲﺷﻮد. (3در ﺑﺮﺧﻲ از ﺷﺮاﻳﻂ ﺳﺎﺧﺘﺎر min heapاز ﺑﻴﻦ ﻣﻲرود. (4در ﻫﻴﭻ ﺷﺮاﻳﻄﻲ ﺳﺎﺧﺘﺎر min heapاز ﺑﻴﻦ ﻧﻤﻲرود. 5ـ ﻣﺎﻛﺰﻳﻤﻢ ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪ ﺑﺮاي min heapﻛﺮدن ﻳﻚ max heapﺑﺎ nﮔﺮه ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ):ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (84 O n log n (1 O log n (2 O n log n (3 O 2n (4 6ـ ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎن ﺳﺎﺧﺖ ﻳﻚ heapاز ﺣﻞ ﻛﺪام ﻓﺮﻣﻮل ﺑﺎزﮔﺸﺘﻲ زﻳﺮ ﺣﺎﺻﻞ ﻣﻲﺷﻮد؟)ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (87 n T n T O 1 (1 2 T n T n 1 T n 2 O n (2 n T n 2 T O n (3 2 T n T n K 1 T K O 11 K n (4 7ـ ﻛﺪامﻳﻚ از اﻋﻤﺎل زﻳﺮ را ﻧﻤﻲﺗﻮان در ﻳﻚ max-heapﺑﺎ nﻋﻨﺼﺮ در ﻣﺮﺗﺒﻪي ) O(lgnاﻧﺠﺎم داد؟ )ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (88 (1ﻳﺎﻓﺘﻦ ﻳﻚ ﻋﻨﺼﺮ ﺑﺎ ﻛﻠﻴﺪ ﻣﺸﺨﺺ (2ﺣﺬف ﻳﻚ ﻋﻨﺼﺮ داده ﺷﺪه (3ﻛﺎﻫﺶ ﻣﻘﺪار ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ داده ﺷﺪه (4اﻓﺰاﻳﺶ ﻣﻘﺪار ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ داده ﺷﺪه 8ـ ﻫﻴﭗ زﻳﺮ داده ﺷﺪه اﺳﺖ: A 1...18 20 15 18 7 9 14 16 3 6 8 4 13 10 12 11 1 2 5 ﻋﻤﻞ ) Change(i,kﻛﻠﻴﺪ A i را ﺑﻪ kﺗﻐﻴﻴﺮ ﻣﻲدﻫﺪ و ﺑﺎ اﻧﺠﺎم ﺗﻌﺪاد ﺟﺎﺑﻪﺟﺎﻳﻲ ﻛﺎري ﻣﻲﻛﻨﺪ ﻛﻪ آراﻳﻪ ﻣﺠﺪداً ﺑﻪﺻﻮرت ﻫﻴﭗ درآﻳﺪ .ﻣﺎ اﻳﻦ 2 ﻋﻤﻞ را ﺑﻪﺗﺮﺗﻴﺐ اﻧﺠﺎم ﻣﻲدﻫﻴﻢ. Change 11,16 Change 2, 4 :ﻣﺠﻤﻮع ﺗﻌﺪاد ﺟﺎﺑﻪﺟﺎﻳﻲ )(swapﻫﺎ ﭼﻨﺪ ﺗﺎﺳﺖ؟)ﺳﺮاﺳﺮي (88 3 (1 4 (2 5 (3 6 (4 28 ﺳﺎﺧﺘﻤﺎن داده 9ـ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻳﻚ ﻣﺎﻛﺰﻳﻤﻢ ـ ﻫﻴﭗ دودوﻳﻲ ﺣﺎوي Nﻋﺪد ﻣﺘﻤﺎﻳﺰ اﺳﺖ )ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ در رﻳﺸﻪ و دراﻳﻪي اول ﻗﺮار دارد( .ﭼﻬـﺎرﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ اﻳﻦ ﻋﻨﺎﺻﺮ در ﻛﺪامﻳﻚ از دراﻳﻪﻫﺎ ﻧﻤﻲﺗﻮاﻧﺪ ﻗﺮار ﺑﮕﻴﺮد؟ ) ITﺳﺮاﺳﺮي (83 2 (1ﻳﺎ 3 8 (2ﺗﺎ 15 6 ،5 ،4 (4ﻳﺎ 7 16 (3ﺗﺎ 31 10ـ ﻋﻤﻖ ﻳﻚ ﮔﺮه در دراﻳﻪي iدر ﻳﻚ ﻫﻴﭗ ﺑﺎ nﮔﺮه ﭼﻪﻗﺪر اﺳﺖ؟ ) ITﺳﺮاﺳﺮي (83 lg i (1 i 1 (2 i / 2 (4 i / 2 (3 11ـ ﻳﻚ درﺧﺖ دودوﻳﻲ ﺟﺴﺖوﺟﻮ ﺑﺎ nﮔﺮه را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﻋﻨﺎﺻﺮ آن ﻣﺘﻤﺎﻳﺰ و ﺧﺎﺻﻴﺖ ﻫﺮم ﺑﻴﺸﻴﻨﻪ ﻫﻢ داﺷﺘﻪ ﺑﺎﺷﺪ )ﻣﻘﺪار ﻫـﺮ رأس از ﻓﺮزﻧﺪاﻧﺶ ﻛﻢ ﺗﺮ ﻧﺒﺎﺷﺪ (.اﮔﺮ hارﺗﻔﺎع اﻳﻦ درﺧﺖ ﺑﺎﺷﺪ ،دارﻳﻢ) :دﻛﺘﺮي (91 (2ﻣﻴﺎﻧﮕﻴﻦ hﺑﺮاﺑﺮ O lg n اﺳﺖ. (4ﭼﻨﻴﻦ درﺧﺘﻲ وﺟﻮد ﻧﺪارد. h O n (1 h O lg n (3 12ـ ﻧﻤﻲﺗﻮان ﺳﺎﺧﺘﻤﺎن دادهاي ﺑﺮاي nﻋﻨﺼﺮ ﻃﺮاﺣﻲ ﻛﺮد ﻛﻪ …………… )ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (87 (1ﺳﺎﺧﺖ آن O n lg n و ﺣﺬف ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ آن ،درج و ﺣﺬف ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ دﻟﺨﻮاه در آن O lg n ﺑﺎﺷﺪ. (2ﺳﺎﺧﺖ آن O n و ﺣﺬف ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ آن ،درج ،ﺣﺬف و اﻓﺰاﻳﺶ و ﻛﺎﻫﺶ ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ دﻟﺨﻮاه در آن O lg n ﺑﺎﺷﺪ. (3ﺳﺎﺧﺖ آن O n و ﺣﺬف ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ آن ،درج ،ﺣﺬف و اﻓﺰاﻳﺶ ﻛﻠﻴﺪ ﻳﻚ ﻋﻨﺼﺮ دﻟﺨﻮاه در آن O lg n ﺑﺎﺷﺪ. (4ﺳﺎﺧﺖ آن O n و ﺣﺬف ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ آن O 1و درج و ﺣﺬف ﻳﻚ ﻋﻨﺼﺮ دﻟﺨﻮاه در آن O lg n ﺑﺎﺷﺪ. 13ـ ﺳﻮﻣﻴﻦ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ در ﻳﻚ Min Heapﺑﺎ ﻛﻠﻴﺪﻫﺎي ﻣﺘﻤﺎﻳﺰ در دراﻳﻪﻫﺎﻳﻲ ﺑﺎ ﭼﻪ اﻧﺪﻳﺲﻫﺎﻳﻲ ﻣﻲﺗﻮاﻧﺪ ﺑﺎﺷﺪ؟) ITﺳﺮاﺳﺮي (86 2 , 3 , 4 , 5 , 6 , 7 (2 1 , 2 , 3 , 4 , 5 , 6 , 7 (4 1 , 2 , 3 (1 4 , 5 , 6 , 7 (3 14ـ اﮔﺮ ﺑﺨﻮاﻫﻴﻢ دو min heapﺑﻪ ﺗﻌﺪاد mو nرا ﺑﺎ ﻫﻢ mergeﻛﻨﻴﻢ ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ آن ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ):ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (85 m log mn (1 m log n n log m (2 n log n .lg m (3 m.log n .log m (4 15ـ ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ﺷﺎﻣﻞ nﻋﺪد داده ﺷﺪه اﺳﺖ .ﻣﻲﺧﻮاﻫﻴﻢ ﺗﻤﺎﻣﻲ اﻋﺪاد ﻛﻮﭼﻚﺗﺮ ﻳﺎ ﻣﺴﺎوي ﻳﻚ ﻋﺪد داده ﺷﺪهي xرا در اﻳـﻦ ﻫـﺮم ﭘﻴﺪا ﻛﻨﻴﻢ .ﻓﺮض ﻛﻨﻴﺪ ﺗﻌﺪاد ﭼﻨﻴﻦ اﻋﺪادي kاﺳﺖ .ﺑﻬﺘﺮﻳﻦ ﻣﺮﺗﺒﻪي زﻣﺎﻧﻲ ﺑﺮاي اﻧﺠﺎم اﻳﻦ ﻛﺎر ﭼﻴﺴﺖ؟)دﻛﺘﺮي (92 O k (1 O k log k (2 O k log n (3 O k n (4 16ـ در ﻳﻚ آراﻳﻪ دﻟﺨﻮاه ﺑﺎ 12ﻋﻨﺼﺮ ﭼﻨﺪ ﻣﻘﺎﻳﺴﻪ ﺣﺪاﻛﺜﺮ ﻧﻴﺎز ﻣﻲﺑﺎﺷﺪ ﺗﺎ اﻳﻦ آراﻳﻪ ﺗﺒﺪﻳﻞ ﺑﻪ ﻳﻚ min heapﺷﻮد).ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (86 6 (1 10 (2 12 (3 18 (4 17ـ ﻳﻚ max – heapﺑﺎ nﻋﻨﺼﺮ ﺑﻪﺻﻮرت آراﻳﻪ ﭘﻴﺎدهﺳﺎزي ﺷﺪه اﺳﺖ) .ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ در رﻳﺸﻪ اﺳﺖ( .ﻣﻨﺎﺳﺐﺗﺮﻳﻦ ﮔﺰﻳﻨﻪ ﺑﺮاي ﭘﻴﺪاﻛﺮدن ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ در اﻳﻦ ﺳﺎﺧﺘﻤﺎن داده ﻛﺪام اﺳﺖ؟)ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (81 (1اﻳﻦ ﻛﺎر را ﻫﻤﻮاره ﻣﻲﺗﻮان ﺑﺎ O log n ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ heapاﻧﺠﺎم داد. n (2اﻳﻦ ﻛﺎر ﺑﻪ ﺣﺪاﻛﺜﺮ 2 (3اﻳﻦ ﻛﺎر ﻣﻤﻜﻦ اﺳﺖ ﺑﻪ n 1ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ heapﻧﻴﺎز داﺷﺘﻪ ﺑﺎﺷﺪ. ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ heapﻧﻴﺎز دارد. (4ﺗﻨﻬﺎ در ﺻﻮرﺗﻲ ﻛﻪ heapﻋﻨﺎﺻﺮ ﺗﻜﺮاري ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ،ﻣﻲﺗﻮان اﻳﻦ ﻛﺎر را ﺑﺎ O log n ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ heapاﻧﺠﺎم داد. 18ـ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ﺑﺎ ﻋﻨﺎﺻﺮ ﻣﺘﻔﺎوت را ﺑﻪ ﺻﻮرت ﻛﺎرا ﺑﺎ ﭼﻨﺪ ﻣﻘﺎﻳﺴﻪ ﺑﻴﻦ ﻋﻨﺎﺻﺮ آن ﻣﻲﺗﻮان ﺑﻪ دﺳﺖ آورد؟)دﻛﺘﺮي (91 (1 lg n 1 n 1 (2 n / 2 1 (3 n 1 / 2 (4 HEAP 29 19ـ ﻳﻚ ﻟﻴﺴﺖ 12ﻋﻨﺼﺮي ﺣﺎوي ﻛﻠﻴﺪﻫﺎي ﻳﻚ ﺗﺎ دوازده ﺑﻪ ﺻﻮرت ﺻﻌﻮدي ﻣﺮﺗﺐ اﺳﺖ .اﮔﺮ اﻳﻦ ﻟﻴﺴﺖ ﺑﻪ ﺻﻮرت درﺟﺎ ﺗﺒﺪﻳﻞ ﺑﻪ ﻳﻚ Max Heapﺷﻮد ،ﻋﻨﺼﺮ ﭘﻨﺠﻢ ﻟﻴﺴﺖ ﻛﺪام ﮔﺰﻳﻨﻪ اﺳﺖ؟) ITﺳﺮاﺳﺮي (89 10 (1 11 (2 8 (4 9 (3 20ـ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ در Max – heapاﺳﺘﻔﺎده ﺷﺪه در ﺳﺎﺧﺘﻤﺎن دادهي ،Xﻫﺮ ﻋﻨﺼﺮ ﻳﻚ زوج ﻣﺮﺗﺐ ﺑﻪ ﺻﻮرت Key , Value اﺳﺖ ﻛـﻪ ﻣﻌﻴﺎر ﻣﻘﺎﻳﺴﻪي ﻋﻨﺎﺻﺮ ﻣﻘﺪار keyآنﻫﺎ ﻣﻲﺑﺎﺷﺪ .ﺳﺎﺧﺘﻤﺎن داده Xﻳﻚ ﭘﻴﺎدهﺳﺎزي از ﻛﺪام ﮔﺰﻳﻨﻪ اﺳﺖ؟) ITﺳﺮاﺳﺮي (89 Stack (2 Min Heap (4 Queue (1 Max Heap (3 { X::A x ;Count ; Max heap insert H , count , x } { X::B x P Heap Extract max H ; Re turn value p } 21ـ اﮔﺮ آراﻳﻪ 10 15 22 4 11 23 19 14ﻧﻤﺎﻳﺶ ﻳﻚ درﺧﺖ ﺑﺎﻳﻨﺮي ﺑﺎﺷﺪ ،و آن را ﺗﺒﺪﻳﻞ ﺑﻪ ﻳﻚ Min Heapﻧﻤـﺎﻳﻴﻢ در آن ﺻﻮرت ﻣﺤﺘﻮاي آراﻳﻪ ﺑﺮاﺑﺮ ﺧﻮاﻫﺪ ﺑﻮد ﺑﺎ) :ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (83 4,10,15,19,11, 23, 22,14 (1 4,10,14,15,11,19, 22, 23 (2 4,10,11,14,15,19, 22, 23 (3 4,10,19,14,11, 23, 22,15 (4 22ـ ﻓﺮض ﻛﻨﻴﺪ ﻣﻲﺧﻮاﻫﻴﻢ ﻣﺮﺗﺐﺳﺎزي Heap Sortرا روي آراﻳﻪاي ﻛﻪ ﺷﺎﻣﻞ 14ﻋﻨﺼﺮ زﻳﺮ اﺳﺖ ،اﻧﺠﺎم دﻫﻴﻢ، A 1...A 14 16 , 50 , 23 , 20 , 21 , 40 , 41 , 30 , 3 , 32 , 33 , 34 , 35 , 36 ﺑﺮاي ﺗﺒﺪﻳﻞ آراﻳﻪ ﻳﻚ Max Heapﺑﻪ ﺻﻮرت درﺟﺎ ﭼﻨﺪ ﺟﺎﺑﺠﺎﻳﻲ ﺑﻴﻦ ﮔﺮه ﺑﺎ ﻓﺮزﻧﺪ اﻧﺠﺎم ﻣﻲﺷﻮد؟) ITﺳﺮاﺳﺮي (87 7 (1 6 (2 4 (4 5 (3 23ـ ﺑﻪ ﻳﻚ Min-heapﺧﺎﻟﻲ ﮔﺮهﻫﺎﻳﻲ ﺑﺎ ﻛﻠﻴﺪﻫﺎي )ﺑﻪ ﺗﺮﺗﻴﺐ از رأﺳﺖ ﺑﻪ ﭼـﭗ( 2 , 50 , 45 , 70 , 75 , 22 , 40 , 55 , 45اﺿـﺎﻓﻪ ﺷـﺪه اﺳﺖ Min- heap .ﺣﺎﺻﻞ ﻛﺪام ﮔﺰﻳﻨﻪ اﺳﺖ؟) ITﺳﺮاﺳﺮي (86 2 , 22 , 45 , 40 , 75 , 70 , 45 , 55 , 50 (1 2 , 22 , 40 , 45 , 75 , 70 , 45 , 50 , 55 (3 2 , 45 , 22 , 50 , 75 , 45 , 40 , 70 , 55 (2 2 , 22 , 45 , 40 , 75 , 70 , 45 , 50 , 55 (4 24ـ ﺑﻪ ﻳﻚ Min–Heapﺧﺎﻟﻲ ﺑﻪ ﺗﺮﺗﻴﺐ ﮔﺮهﻫﺎﻳﻲ ﺑﺎ ﻛﻠﻴﺪﻫﺎي )از رأﺳﺖ ﺑﻪ ﭼﭗ( 75 , 40 , 55 , 45 , 42 , 50 , 45 , 70اﺿﺎﻓﻪ ﺷﺪه اﺳـﺖ. ﺳﭙﺲ ﻋﻤﻞ ﺣﺬف Delete ﺑﺮ روي Min Heapاﻧﺠﺎم ﺷﺪه اﺳﺖ Min Heap .ﺣﺎﺻﻞ ﻣﻄﺎﺑﻖ ﻛﺪام ﮔﺰﻳﻨﻪ ﺧﻮاﻫﺪ ﺑﻮد؟ ) ITﺳﺮاﺳﺮي (84 45 , 50 , 55 , 75 , 70 (2 45 , 55 , 50 , 75, 70 (4 45 , 50 , 55, 70 , 75 (1 45 , 55 , 50 , 70 , 75 (3 25ـ آراﻳﻪ nﺧﺎﻧﻪاي Aرا در ﻧﻈﺮ ﻣﻲﮔﻴﺮﻳﻢ ﻛﻪ ﺑﺮاي ذﺧﻴﺮهﺳﺎزي ﻋﻨﺎﺻﺮ ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﺮﻓﺘـﻪ .ﻓـﺮض ﻛﻨـﻴﻢ اﻟﮕﻮرﻳﺘﻤﻲ ﻛﺎرا ﺑﺮاي ﺑﺮرﺳﻲ اﻳﻦﻛﻪ اﻳﻦ درﺧﺖ دودوﻳﻲ ﻳﻚ Heapاﺳﺖ ﻳﺎ ﺧﻴﺮ در اﺧﺘﻴﺎر دارﻳﻢ .ﭘﻴﭽﻴﺪﮔﻲ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ در ﺑـﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﭼﻘﺪر اﺳﺖ؟)ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ ، 81ﺗﺨﺼﺼﻲ ﻫﻮش آزاد (86 O n (1 (2 O n2 O log n (3 O n log n (4 26ـ ﺑﺮاي ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ ﺷﺪه L1 , L 2 ,..., L kﻛﺪامﻳﻚ از ﺳﺎﺧﺘﺎر دادهﻫﺎي زﻳﺮ )ﻋﻼوه ﺑﺮ ﻟﻴﺴﺖﻫﺎي ورودي( ﺑﻬﺘﺮﻳﻦ اﺳﺖ؟ )ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (83 (1درﺧﺖ Min-heap (2ﻟﻴﺴﺖ دو ﻃﺮﻓﻪ ﺧﻄﻲ (3آراﻳﻪ ﺧﻄﻲ (4درﺧﺖ دودوﻳﻲ ﺟﺴﺘﺠﻮ 30 ﺳﺎﺧﺘﻤﺎن داده 27ـ آراﻳﻪ Tﻛﻪ در آن ﺗﻌﺪادي از ﺧﺎﻧﻪﻫﺎ ﻫﻨﻮز ﻣﻘﺪاردﻫﻲ ﻧﺸﺪهاﻧﺪ را در ﻧﻈﺮ ﻣﻲﮔﻴﺮﻳﻢ. 10 9 8 7 6 28 20 7 4 5 17 3 30 2 1 75 T ﺑﺎ ﻗﺮار دادن ﻣﻘﺎدﻳﺮ ﻛﺪام ﻳﻚ از ﻣﻮارد زﻳﺮ اﻳﻦ آراﻳﻪ ﺑﻪ ﻳﻚ ﻫﻴﭗ ﺗﺒﺪﻳﻞ ﺧﻮاﻫﺪ ﺷﺪ؟)ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (85 (1 T 2 30 ; T 4 9 ; T 9 10 ; T 10 6 T 2 15 ; T 4 15 ; T 9 17 ; T 10 10 (2 T 2 35 ; T 4 30 ; T 9 32 ; T 10 16 (3 T 2 21 ; T 4 14 ; T 9 0 ; T 10 16 (4 28ـ درﺧﺖ ﻧﻴﻤﻪ ﻣﺮﺗﺐ ) (Heapزﻳﺮ را ﺑﻪ ﺻﻮرت آراﻳﻪ ﭘﻴﺎدهﺳﺎزي ﻛﺮدهاﻳﻢ: A[1...11] 13,14,16,19, 21,19, 68, 65, 26,32,31 اﮔﺮ Dرا ﻋﻤﻞ ) Deleteminﺣﺬف ﻛﻮﭼﻜﺘﺮﻳﻦ اﻟﻤﺎن( I x را ﻋﻤﻞ درج ﻋﻨﺼﺮ xدر ﻳﻚ درﺧﺖ ﻧﻴﻤﻪ ﻣﺮﺗﺐ ﺑﻨﺎﻣﻴﻢ آراﻳﻪ ﺣﺎﺻﻞ از اﻋﻤﺎل زﻳﺮ را ﻛﻪ ﺑﻪ ﺗﺮﺗﻴﺐ از ﭼﭗ ﺑﻪ راﺳﺖ ﺑﺮ روي اﻳﻦ درﺧﺖ اﻧﺠﺎم ﻣﻲﺷﻮﻧﺪ ﻛﺪامﻳﻚ از ﮔﺰﻳﻨﻪﻫﺎي زﻳﺮ اﺳﺖ؟)ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (73 D , I 17 , I 15 , D , D 16 , 17 , 19 , 19 , 31 , 68 , 21 , 65 , 26 , 32 (1 16 , 19 , 17 , 19 , 31 , 21 , 68 , 65 , 26 , 32 (2 16 , 17 , 19 , 26 , 19 , 21 , 68 , 65 , 31 , 32 (3 (4 16 , 19 , 17 , 31 , 19 , 32 , 68 , 65 , 26 , 21 29ـ ﻓﺮض ﻛﻨﻴﺪ آراﻳﻪ Aاز اﻧﺪﻳﺲ 1ﺗﺎ n 1ﺑﻪ ﺻﻮرت heapاﺳﺖ) .رﻳﺸﻪ heapﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ اﺳﺖ( اﻟﮕﻮرﻳﺘﻢ زﻳﺮ ﺑﺮاي درج A n ﺑﻪ اﻳﻦ heapﭘﻴﺸﻨﻬﺎد ﺷﺪه اﺳﺖ .ﻛﺪامﻳﻚ از ﮔﺰﻳﻨﻪﻫﺎي زﻳﺮ را ﺑﺎﻳﺪ ﺑﺠﺎي ﻗﺮار دﻫﻴﻢ ﺗﺎ اﻟﮕﻮرﻳﺘﻢ ﻫﻤﻮاره درﺳﺖ ﻛﺎر ﻛﻨﺪ؟ )ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (79 (1 (2 (3 (4 A i temp A i temp A i temp A i A j i 1 and i 0 and i 0 and i 1 and procedure insert A , n ;int egeri , j, n ;j n ; i n / 2 ; temp A n while...do A j A i ;j i ; i i / 2 endwhile ;A j temp end HEAP 31 30ـ آراﻳﻪ زﻳﺮ ﻳﻚ heapاﺳﺖ .ﺑﺮاي درج ﻋﺪد 95در آراﻳﻪ ﺑﻪ ﮔﻮﻧﻪاي ﻛﻪ آراﻳﻪ ﻧﻬﺎﻳﻲ ﻧﻴﺰ وﺿﻌﻴﺖ heapداﺷﺘﻪ ﺑﺎﺷﺪ .ﭼﻨـﺪ ﻋﻤـﻞ exchange )ﺗﻌﻮﻳﺾ دو ﻛﻤﻴﺖ( ﻻزم اﺳﺖ؟ )ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (80 (1دو (2ﭼﻬﺎر (3ﺷﺶ (4ﻫﺸﺖ 100 90 82 85 74 75 73 68 70 31ـ ﻛﺪامﻳﻚ از ﮔﺰﻳﻨﻪﻫﺎي زﻳﺮ ﻧﻤﻲﺗﻮاﻧﺪ ﻳﻚ ﺑﺎزﻧﻤﺎﻳﻲ از ﻳﻚ Max Heapﺑﺎ آراﻳﻪ ﺑﺎﺷﺪ )ﺗﺮﺗﻴﺐ ﻋﻨﺎﺻﺮ از ﭼﭗ ﺑﻪ راﺳﺖ اﺳﺖ(. ) ITﺳﺮاﺳﺮي (85 20 17 17 3 4 2 1 (2 20 10 18 3 4 2 (4 20 5 10 6 3 4 1 (1 20 5 10 3 4 2 1 (3 32ـ ﭼﻨﺪ Min-heapﻣﺘﻔﺎوت ﻣﻲﺗﻮان ﺑﺎ 7ﮔﺮه ﺑﺎ ﻛﻠﻴﺪﻫﺎي 1ﺗﺎ 7ﺳﺎﺧﺖ؟ ) ITﺳﺮاﺳﺮي IT ، 88ﺳﺮاﺳﺮي (90 160 (1 80 (2 20 (4 40 (3 33ـ ﺑﻪ ﭼﻨﺪ ﻃﺮﻳﻖ ﻣﻲﺗﻮان اﻋﺪاد 1ﺗﺎ 11را در ﮔﺮهﻫﺎي درﺧﺖ زﻳﺮ ﺑﺮﭼﺴﺐﮔﺬاري ﻛﺮد ﺗﺎ ﻋﺪد ﻫﺮ ﮔـﺮه از اﻋـﺪاد ﻓﺮزﻧـﺪان آن ﺑـﺰرگﺗـﺮ ﺑﺎﺷﺪ؟دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ از ﻫﺮ 11ﻋﺪد ﺑﺎﻳﺪ اﺳﺘﻔﺎده ﺷﻮد و ﺗﻜﺮار ﻣﺠﺎز ﻧﻴﺴﺖ) .ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ ـ (1391 (1 (2 (3 (4 96 2048 11520 4096 34ـ ﻳﻚ Max Heapﺑﺎ nﻋﻨﺼﺮ را ﻛﻪ در آراﻳﻪ A 1...n ﻗﺮار دارد ،در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .ﻣﺮﺗﺒﻪ زﻣﺎﻧﻲ اﻟﮕﻮرﻳﺘﻢ ﺣﺬف ﻋﻨـﺼﺮ iام 1 i n از اﻳﻦ Max Heapﺑﻪ ﮔﻮﻧﻪاي ﻛﻪ ﺳﺎﺧﺘﺎر Max Heapرا ﺣﻔﻆ ﻛﻨﺪ ،ﭼﻴﺴﺖ؟) ITﺳﺮاﺳﺮي (1390 1 (1 log n (2 n (3 n log n (4 32 ﺳﺎﺧﺘﻤﺎن داده 35ـ ﻋﺪد در آراﻳﺔ Tذﺧﻴﺮ ﺷﺪهاﻧﺪ .ﺑﺮاي Tاﻟﮕﻮرﻳﺘﻢ ذﻛﺮ ﺷﺪه را اﺟﺮا ﻣﻲﻛﻨﻴﻢ .اﮔﺮ tﺗﻌﺪاد دﻓﻌﺎت اﺟﺮاي ﺣﻠﻘﻪ repeatﺑﺎﺷﺪ ﺑﺎ ﻓﺮض اﻳﻨﻜـﻪ K lg n ﺑﺎﺷﺪ .ﻛﺪامﻳﻚ از ﮔﺰارهﻫﺎي زﻳﺮ ﺻﺤﻴﺢ اﺳﺖ ؟)ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ (86 ... k (1 k 3 3 2 ... k (2 k 2 4 2 k 2 t22 k 2 t3 2 ... k 1 (3 k 3 4 2 ... k 1 (4 k 2 3 2 k 2 k 1 procedure M T 1..n n for i downto 1 do 2 R i t3 2 t22 repeat j R if 2 j n and T 2 j T R then R 2j if 2 j 1 n and T 2 j 1 T R then R 2 j 1 swap T j , T R until j R 36ـ ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎن ﺗﺒﺪﻳﻞ ﻳﻚ heapﺑﺎ nﻋﻨﺼﺮ ﺑﻪ ﻳﻚ درﺧﺖ ﺟﺴﺘﺠﻮي ﺑﺎﻳﻨﺮي ﺣﺪاﻗﻞ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ) :ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (82 (log n) (1 (n 2 ) (3 (n) (2 (n log n) (4 37ـ ﺻﻒ اوﻟﻮﻳﺖ Pr iority Oueue ﺑﺎ اﺳﺘﻔﺎده از Heapﭘﻴﺎدهﺳﺎزي ﺷﺪه اﺳﺖ .ﻛﺪامﻳﻚ از ﻋﺒﺎرات زﻳﺮ ﺻﺤﻴﺢ اﺳﺖ؟ nﺗﻌﺪاد اﻗـﻼم در ﺻﻒ اوﻟﻮﻳﺖ ﻣﻲﺑﺎﺷﺪ) .ﺳﺮاﺳﺮي ﻛﺎﻣﭙﻴﻮﺗﺮ IT ، 75آزاد (84 (1ﻋﻤﻠﮕﺮ »ﭘﻴﺪا ﻛﺮدن ﻣﺎﻛﺰﻳﻤﻢ و ﺣﺬف آن« از ﺻﻒ اوﻟﻮﻳﺖ داراي ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ O 1ﻣﻲﺑﺎﺷﺪ. (2ﻋﻤﻠﮕﺮ »اﺿﺎﻓﻪ ﻛﺮدن« ﻳﻚ ﻗﻠﻢ ﺟﺪﻳﺪ ﺑﻪ ﺻﻒ اوﻟﻮﻳﺖ داراي ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ O n lg n ﻣﻲﺑﺎﺷﺪ. (3ﻋﻤﻠﮕﺮ »ﭘﻴﺪا ﻛﺮدن ﻣﺎﻛﺰﻳﻤﻢ« داراي ﭘﻴﭽﻴﺪﮔﻲ O lg n ﻣﻲﺑﺎﺷﺪ. (4ﻋﻤﻠﮕﺮ »اﺿﺎﻓﻪ ﻛﺮدن« ﻳﻚ ﻗﻠﻢ ﺟﺪﻳﺪ ﺑﻪ ﺻﻒ اوﻟﻮﻳﺖ داراي ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ O lg n ﻣﻲﺑﺎﺷﺪ. 38ـ داده ﺳﺎﺧﺘﺎر ) Iﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ اﺳﺖ ﻛﻪ اﻋﺪاد دلﺧﻮاه a1 , , a nرا در ﺑﺮگﻫﺎي ﺧﻮد ذﺧﻴﺮه ﻣﻲﻛﻨـﺪ) .درﺧـﺖ دودوﻳـﻲ ﻛﺎﻣﻞ درﺧﺘﻲ اﺳﺖ ﻛﻪ اﮔﺮ ﺑﺮگﻫﺎي ﺳﻄﺢ آﺧﺮ آنرا ﺑﺮدارﻳﻢ .درﺧﺖ ﺑﺎﻗﻲ ﻣﺎﻧﺪه ﭘﺮ ﻳﻌﻨﻲ ﻛﺎﻣﻞ و ﻛﺎﻣﻼً ﻣﺘﻮازن ،ﺧﻮاﻫﺪ ﺑﻮد و ﺑﺮگﻫـﺎي ﺳﻄﺢ آﺧﺮ آن ﺑﻪ ﺻﻮرت ﻣﺘﻮاﻟﻲ از ﭼﭗ ﺑﻪ راﺳﺖ ﻗﺮار دارﻧﺪ .ﻫﺮم ﻳﺎ ) heapﭼﻨﻴﻦ ﺳﺎﺧﺘﺎري دارد (.ﻫﻢﭼﻨﻴﻦ ﻣﻲداﻧـﻴﻢ ﻛـﻪ ﻫـﺮ ﮔـﺮه داﺧﻠﻲ ﻓﻘﻂ ﻣﻘﺪار ﻛﻮﭼﻚﺗﺮﻳﻦ ﻋﺪد دو ﻓﺮزﻧﺪش را ذﺧﻴﺮه ﻣﻲﻛﻨﺪ. ﭼﻨﺪﺗﺎ از اﻋﻤﺎل زﻳﺮ را ﻣﻲﺗﻮان در اﻳﻦ داده ﺳﺎﺧﺘﺎر در ﻣﺮﺗﺒﻪي O lg n اﻧﺠﺎم داد؟) ITﺳﺮاﺳﺮي (1392 ﺣﺬف ﻳﻚ ﻋﻨﺼﺮ دلﺧﻮاه از D درج ﻳﻚ ﻋﻨﺼﺮ دلﺧﻮاه در D ﻛﺎﻫﺶ ﻣﻘﺪار ﻳﻚ ﻋﻨﺼﺮ ﻣﻮﺟﻮد در D 0 (1 1 (2 3 (4 2 (3 39ـ ﻳﻚ ﻫﺮم ﺑﻴﺸﻴﻨﻪ ) (max-heapﺑﻪ اﻧﺪازهي mو ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ) (min-heapﺑﻪ اﻧﺪازهي nﻣﻮﺟﻮدﻧﺪ .ﺑﻬﺘﺮﻳﻦ اﻟﮕﻮرﻳﺘﻢ ﺑـﺮاي ادﻏـﺎم اﻳﻦ دو و اﻳﺠﺎد ﻳﻚ ﻫﺮم ﺑﻴﺸﻴﻨﻪ از ﻛﺪام ﻣﺮﺗﺒﻪ اﺳﺖ؟) ITﺳﺮاﺳﺮي (1393 O n m (1 O n log m m log n (2 O n log n m log m (3 O min n log m , m log n (4 40ـ ﻓﺮض ﻛﻨﻴﺪ ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ﺑﺎ ﻳﻚ درﺧﺖ ﻣﺘﻮازن ﭘﻴﺎده ﺳﺎزي ﺷﺪه اﺳﺖ .ﻛﺪام ﮔﺰﻳﻨﻪ ﻧﺎدرﺳﺖ اﺳﺖ؟ ) ITﺳﺮاﺳﺮي (1394 (1ﺑﺰرﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺣﺘﻤﺎً در ﻳﻚ ﺑﺮگ ذﺧﻴﺮه ﺷﺪه اﺳﺖ. HEAP 33 (2ﺳﻮﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ ﺣﺘﻤﺎٌ ﻓﺮزﻧﺪ رﻳﺸﻪ اﺳﺖ. (3دوﻣﻴﻦ ﺑﺰرﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ ﻟﺰوﻣﺎً در ﺑﺮگ ذﺧﻴﺮه ﻧﻤﻲﺷﻮد. (4ﻫﺮ ﺳﻪ ﮔﺰﻳﻨﻪي ﺑﺎﻻ 41ـ ﻓﺮض ﻛﻨﻴﺪ دو ﻫﺮم ﻣﻴﻨﻴﻤﻢ min heap ﻫﺮ ﻳﻚ داراي nﻋﺪد داده ﺷﺪه ﺑﺎﺷﻨﺪ .ادﻏﺎم اﻳﻦ دو ﻫﺮم در ﻳﻚ آراﻳﻪ ﺑﻪ ﺻﻮرت ﺻـﻌﻮدي داراي ﭼﻪ ﻣﺮﺗﺒﺔ زﻣﺎﻧﻲ اﺳﺖ؟)ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (91 O n (1 O log n (2 O n log n (3 O n log 2 n (4 42ـ اﮔﺮ در اﻟﮕﻮرﻳﺘﻢ اﻓﺰودن ﻳﻚ ﻋﻨﺼﺮ ﺑﻪ درﺧﺖ heapاز روش ﺟﺴﺘﺠﻮي دودوﻳﻲ ﺑﺮاي ﻳﺎﻓﺘﻦ ﻣﻜﺎن ﻋﻨﺼﺮ ﺟﺪﻳﺪ اﺳﺘﻔﺎده ﺷﻮد ،ﻛﺪامﻳﻚ از ﺟﻤﻼت زﻳﺮ ﺻﺤﻴﺢ اﺳﺖ؟) ﻧﺮماﻓﺰارآزاد (81 (1ﻣﺮﺗﺒﻪ اﻟﮕﻮرﻳﺘﻢ ﺗﻐﻴﻴﺮ ﻧﻜﺮده وﻟﻲ ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪﻫﺎ ﻛﻢﺗﺮ ﻣﻲﺷﻮد. (2ﻣﺮﺗﺒﻪ اﻟﮕﻮرﻳﺘﻢ و ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪﻫﺎ ﻛﻢﺗﺮ ﻣﻲﺷﻮد. (3ﻣﺮﺗﺒﻪ اﻟﮕﻮرﻳﺘﻢ ﺗﻐﻴﻴﺮ ﻧﻜﺮده وﻟﻲ ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪﻫﺎ ﺑﻴﺶﺗﺮ ﻣﻲﺷﻮد. (4ﻣﺮﺗﺒﻪ اﻟﮕﻮرﻳﺘﻢ و ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪﻫﺎ ﺗﻐﻴﻴﺮ ﻧﻤﻲﻛﻨﺪ. 43ـ ﺗﻌﺪاد ﺑﺮگﻫﺎي ﻳﻚ max – heapﺑﺎ nﻋﻨﺼﺮ ﭼﻨﺪ ﺗﺎ اﺳﺖ؟)دﻛﺘﺮي (93 n 1 (1 n 2 (2 n 2 (3 n 2 (4 44ـ در ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ) (min-heapﺑﺎ n 100ﻋﻨﺼﺮ ﻣﻲﺧﻮاﻫﻴﻢ ﻋﻨﺼﺮ ﺑﺎ اﻧﺪﻳﺲ 10را ﺣﺬف ﻛﻨﻴﻢ) .ﻓﺮض ﻛﻨﻴﺪ آراﻳﻪاي ﻛـﻪ ﻫـﺮم را در ﺧﻮد ذﺧﻴﺮه ﻛﺮده و داراي اﻧﺪﻳﺲﻫﺎي 1ﺗﺎ 100اﺳﺖ (.اﻟﮕﻮرﻳﺘﻢ ﺣﺬف اﻳـﻦ ﻋﻨـﺼﺮ در ﺑـﺪﺗﺮﻳﻦ ﺣﺎﻟـﺖ ﭼـﻪ ﺗﻌـﺪاد ﻣﻘﺎﻳـﺴﻪ ﺑـﻴﻦ ﻛﻠﻴﺪﻫﺎاﻧﺠﺎم ﻣﻲدﻫﺪ؟)دﻛﺘﺮي (93 9 (1 7 (2 3 (4 5 (3 45ـ ﻛﺎراﺗﺮﻳﻦ اﻟﮕﻮرﻳﺘﻢ در ﭼﻪ زﻣﺎﻧﻲ kاُﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ را از ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ﺑﺎ nﻋﻨﺼﺮ ﭘﻴﺪا ﻣﻴﻜﻨﺪ؟)داﻧﺸﮕﺎه ( MIT O k lg k (1 O n lg n (2 k lg n (4 O n k (3 46ـ اﻟﮕﻮرﻳﺘﻢ HeapSortدر ﭼﻪ زﻣﺎﻧﻲ ﻳﻚ ورودي ﺑﺎ ﻋﻨﺎﺻﺮ ﻳﻜﺴﺎن را ﻣﺮﺗﺐ ﻣﻲ ﻛﻨﺪ؟)داﻧﺸﮕﺎه ( MIT O n 2 (1 O n lg n (2 n lg2 n (4 O n (3 47ـ در ﻳﻚ heapدﻟﺨﻮاه ﺑﺎ nﻋﻨﺼﺮ ﺑﻪ ﻃﻮر ﺗﺼﺎدﻓﻲ ﺑﻪ ﻫﺮ ﻋﻨﺼﺮ ﻳﻚ واﺣﺪ اﺿﺎﻓﻪ ﻳﺎ ﻳﻚ واﺣﺪ از آن ﻛﻢ ﻣﻴﻜﻨﻴﻢ در ﭼﻪ زﻣﺎﻧﻲ ﺗﻤﺎم nﺗﻐﻴﻴﺮ روي ﻫﻤﻪ ﻋﻨﺎﺻﺮ اﻧﺠﺎم ﺷﺪه و درﺧﺖ ﻫﻤﭽﻨﺎن heapﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ؟)داﻧﺸﮕﺎه ( MIT O lg n (1 O n (2 n lg lg n (4 O n 2 (3 48ـ ﻳﻚ heapﺑﺎ n 2kﻋﻨﺼﺮ را در آراﻳﻪ اي ﺑﻪ ﻃﻮل nدر ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ،اﮔﺮ nﺑﺎر ﻋﻤﻞ ﺣﺬف ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ را ﺑﻄـﻮر ﻣﺘـﻮاﻟﻲ روي آن اﻧﺠﺎم دﻫﻴﻢ و ﺑﺮاي اﻓﺰاﻳﺶ ﻛﺎراﻳﻲ ﺣﺎﻓﻈﻪ ﻫﺮﺑﺎر ﻛﻪ اﻧﺪازه heapﺑﻪ ﺗﻮاﻧﻲ ﭘﺎﻳﻴﻦ ﺗﺮ) ( ..., 2k 2 , 2k 1 2 jﻛﺎﻫﺶ ﭘﻴﺪا ﻛـﺮد آﻧـﺮا ﺑـﻪ آراﻳﻪ اي ﻛﻮﭼﻜﺘﺮ ﺑﻄﻮل 2 jاﻧﺘﻘﺎل دﻫﻴﻢ ،در ﺻﻮرﺗﻴﻜﻪ ﻫﺰﻳﻨﻪ ﻫﺮ اﻧﺘﻘﺎل ﺑﻪ اﻧﺪازه ﭘﺎﻳﻴﻦ ﺗﺮ 2 jﺑﺎﺷﺪ ،ﻣﺠﻤﻮع ﻫﺰﻳﻨﻪ ﻫﺎي اﻧﺘﻘﺎل در ﻛﻞ ﭼﻘﺪر اﺳﺖ ؟ ) ﻫﺰﻳﻨﻪ ﺣﺬف ﻋﻨﺎﺻﺮ ﺗﻮﺳﻂ اﻟﮕﻮرﻳﺘﻢ heapifyرا در ﻧﻈﺮ ﻧﮕﻴﺮﻳﺪ()داﻧﺸﮕﺎه ( MIT O n lg lg n (1 O n lg n (2 O n (3 n lg2 n (4 49ـ در اﻟﮕﻮرﻳﺘﻢ heapifyﻳﻚ آراﻳﻪ دﻟﺨﻮاه ﺑﺎ nﻋﻨﺼﺮ A i در heapدر ﻋﻤﻖ aﺧﻮاﻫﺪ ﺑﻮد و ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪﻫﺎ ﺑﺮاي ﮔﻨﺠﺎﻧﺪن اﻳﻦ ﻋﻨـﺼﺮ در ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ bﺧﻮاﻫﺪ ﺑﻮد .ﻣﻘﺪار aو bﭼﻴﺴﺖ؟)ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (89 n n a lg , b 2 lg (1 i i a lg i , b 2 lg i (2 34 ﺳﺎﺧﺘﻤﺎن داده a lg n , b 2 lg n (3 a lg n , b 2 lg n (4 50ـ اﮔﺮ دﻧﺒﺎﻟﺔ زﻳﺮ ﻳﻚ max heapرا ﺑﺨﻮاﻫﺪ ﻧﺸﺎن دﻫﺪ ﻛﺪام اﻋﺪاد ﺑﺎﻳﺪ ﺑﺎ ﭼﻪ ﻣﻘﺎدﻳﺮ ﺗﻌﻮﻳﺾ ﺷﻮﻧﺪ؟)ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (88 23,17,14, 6,3,10,1,5, 7,11 ) aﺑﻪ bﺗﻐﻴﻴﺮ ﻧﻤﺎﻳﺪ ﻳﻌﻨﻲ ( a b 7 8 , 14 15 (2 10 11 , 1 8 (4 6 12 , 3 15 (1 6 9 , 3 10 (3 51ـ ﻓﺮض ﻛﻨﻴﺪ ﻳﻚ ﻫﺮم ﻛﻤﻴﻨﻪ ﺷﺎﻣﻞ nﻋﺪد ﻣﺘﻤﺎﻳﺰ داده ﺷﺪه ﺑﺎﺷﺪ .ﭘﻨﺠﻤﻴﻦ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻋﺪد در ﻛﺪامﻳﻚ از دراﻳﻪﻫﺎ ﻧﻤـﻲﺗﻮاﻧـﺪ ﻗـﺮار ﺑﮕﻴﺮد؟ )ﻋﻨﺼﺮ رﻳﺸﺔ ﻫﺮم در دراﻳﺔ ﺷﻤﺎرة 1ﻗﺮار دارد) (.ﻋﻠﻮم ﻛﺎﻣﭙﻴﻮﺗﺮ (93 1 (1ﺗﺎ 5 8 (2ﺗﺎ 15 16 (3ﺗﺎ 31 32 (4ﺗﺎ 63 HEAP 35 .1ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. ﻫﻤﺎنﻃﻮر ﻛﻪ در ﻣﺒﺤﺚ kاﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ ﻣﻄﺮح ﺷﺪ ،در ﺻﻮرﺗﻲﻛﻪ max heapﺣﺎوي اﻋﺪاد ﻣﺘﻤﺎﻳﺰ , 2,1ﺗـﺎ nﺑﺎﺷـﺪ .آنﮔـﺎه ﺑـﺰرگﺗـﺮﻳﻦ ﻋﺪدي ﻛﻪ ﻣﻲﺗﻮاﻧﺪ در ﭘﺎﻳﻴﻦﺗﺮﻳﻦ ﺳﻄﺢ از درﺧﺖ ﻗﺮار ﮔﻴﺮد ﺑﺮاﺑﺮ ﺑﺎ n lg n ﺑﻮده ﻛﻪ ﺑﻪ آن ﻣﺎﻛﺰﻳﻤﻢ lg n 1ام ﻣﻲﮔﻮﻳﻨﺪ .در اﻳﻦ ﺳﻮال دارﻳﻢ: n lg n 58ﺑﺰرگﺗﺮﻳﻦ ﻋﺪد در ﺳﻄﺢ آﺧﺮ n 64 ﻳﺎدآوري: در ﻫﺮ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﺑﻪ ارﺗﻔﺎع ، hﺣﺪاﻗﻞ ﺗﻌﺪاد ﮔﺮه ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﺤﺎﺳﺒﻪ ﻣﻲﺷﻮد. n 2h n 2h 1 .2 0 1 ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﻫﻤﺎنﻃﻮر ﻛﻪ در ﻣﺒﺤﺚ kاﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ ﻣﻄﺮح ﺷﺪ ،در ﺻﻮرﺗﻲﻛﻪ ﻳﻚ Maxheapﺣﺎوي اﻋﺪاد ﻣﺘﻤﺎﻳﺰ , 2,1ﺗﺎ nﺑﺎﺷﺪ .آنﮔﺎه ﺑـﺰرگﺗـﺮﻳﻦ ﻋﺪدي ﻛﻪ ﻣﻲﺗﻮاﻧﺪ در ﭘﺎﻳﻴﻦﺗﺮﻳﻦ ﺳﻄﺢ از درﺧﺖ ﻗﺮار ﮔﻴﺮد ﺑﺮاﺑﺮ ﺑﺎ n lg n ﺑﻮده ﻛﻪ ﺑﻪ آن ﻣﺎﻛﺰﻳﻤﻢ lg n 1ام ﻣﻲﮔﻮﻳﻨﺪ ،در اﻳﻦ ﺳﻮال دارﻳﻢ: n 1023 n lg n 1014ﺑﺰرگﺗﺮﻳﻦ ﻋﺪد در ﺳﻄﺢ آﺧﺮ اﻳﻦ ﻧﺸﺎن ﻣﻲدﻫﺪ ﻛﻪ ﺣﺪاﻛﺜﺮ 14ﻋﺪد ﺑﺰرگﺗﺮ از 1000ﻣﻲﺗﻮاﻧﻨﺪ در ﺳﻄﺢ آﺧﺮ درﺧﺖ ﻗﺮار ﮔﻴﺮﻧﺪ. 36 ﺳﺎﺧﺘﻤﺎن داده ﻳﺎدآوري :ﺗﻌﺪاد ﮔﺮه در ﻫﺮ درﺧﺖ دودوﻳﻲ ﭘﺮ ﺑﻪ ارﺗﻔﺎع hﺑﻪ ﺻﻮرت زﻳﺮ ﺑﻪ دﺳﺖ ﻣﻲآﻳﺪ: n 2n 1 1 n 2h 1 .3 0 1 ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. اﮔﺮ ﺑﻪ ﮔﺮهﻫﺎي ﻣﺘﻨﺎﻇﺮ در دو زﻳﺮ درﺧﺖ ﭼﭗ و راﺳﺖ دﻗﺖ ﻛﻨﻴﻢ اﺧﺘﻼف ﺑﻴﻦ ﻫﺮ دو ﮔﺮه ﻣﺘﻨﺎﻇﺮ ﺑﺮاﺑﺮ ﺑﺎ 1 2 اﺳﺖ. ﺑﺮاي ﻣﺜﺎل اﮔﺮ ﮔﺮهﻫﺎي ﻣﺘﻨﺎﻇﺮ در ﺳﻄﺢ آﺧﺮ از درﺧﺖ ﺑﺎﻻ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﻢ ،ﺟﺪول زﻳﺮ راﺑﻄﻪ ﺑﻴﻦ آنﻫﺎ را ﻧﺸﺎن ﻣﻲدﻫﺪ. j i 2 lg i 1 i 8 2lg 8 1 12 8 9 2lg 9 1 13 9 10 10 2lg10 1 14 11 11 2lg11 1 15 j دﻗﺖ ﻛﻨﻴﺪ :زﻣﺎﻧﻲﻛﻪ j nﺑﺎﺷﺪ ،ﻳﻌﻨﻲ ﮔﺮه jوﺟﻮد ﻧﺪارد ﺑﻨﺎﺑﺮاﻳﻦ ﮔﺮه ﻣﺘﻨﺎﻇﺮ ﺑﺮاي iﺑﺮاﺑﺮ ﺑﺎ ﺧﻮاﻫﺪ ﺑﻮد ﻛﻪ واﻟﺪ ﮔﺮه jاﺳﺖ. 2 HEAP .4 37 ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. اﮔﺮ در ﻳﻚ ﻫﻴﭗ دﻟﺨﻮاه ﺟﺎي زﻳﺮ درﺧﺖ ﭼﭗ و راﺳﺖ را ﻋﻮض ﻛﻨﻴﻢ ﺑﺎ اﻳﻦﻛﻪ وﻳﮋﮔﻲ ﻫﻴﭗ ﺣﻔﻆ ﻣﻲﺷﻮد اﻣﺎ در ﺑﺮﺧﻲ ﺷﺮاﻳﻂ ﻣﻤﻜﻦ اﺳﺖ ﺳﺎﺧﺘﺎر درﺧـﺖ از ﺣﺎﻟﺖ ﻛﺎﻣﻞ ﺧﺎرج ﺷﺪه و از ﺑﻴﻦ ﺑﺮود ﺑﻪ ﻣﺜﺎل زﻳﺮ دﻗﺖ ﻛﻨﻴﺪ: .5 ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. در ﺷﺮاﻳﻄﻲ ﻛﻪ ﺑﺨﻮاﻫﻴﻢ ﻳﻚ آراﻳـﻪ ﺑـﺎ وﻳﮋﮔـﻲ min heapرا ﺑـﻪ max heapو ﻳـﺎ ﺑـﺎﻟﻌﻜﺲ ﺗﺒـﺪﻳﻞ ﻛﻨـﻴﻢ .ﻫـﺮ ﮔـﺮه ﻏﻴﺮﺑـﺮگ در اﺛـﺮ ﻓﺮاﺧـﻮاﻧﻲ ﺗـﺎﺑﻊ HEAPIFYﺗﺎ ﻳﻚ ﮔﺮه ﺑﺮگ ﭘﺎﻳﻴﻦ آﻣﺪه و ﺣﺪاﻛﺜﺮ ﻣﻘﺎﻳﺴﻪ را ﺧﻮاﻫﻴﻢ داﺷﺖ در اﻳﻦ ﺷﺮاﻳﻂ ﺑﺮاي ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ در ارﺗﻔﺎع hﺑﺎ اﻳﻦ ﻓـﺮض ﻛـﻪ در ﻫـﺮ ﺳﻄﺢ دو ﻣﻘﺎﻳﺴﻪ ﻻزم دارﻳﻢ ﺣﺪاﻛﺜﺮ 2hﻣﻘﺎﻳﺴﻪ ﻻزم اﺳﺖ ﺗﺎ ﺑﻪ ﻳﻚ ﮔﺮه ﺑﺮگ ﻣﻨﺘﻘﻞ ﺷﻮد. n lg n ﺣﺪاﻛﺜﺮ ﺗﻌﺪاد ﮔﺮه در ارﺗﻔﺎع h h n ﺣﺪاﻛﺜﺮ ﻣﻘﺎﻳﺴﻪ در ﻛﻞn 1 2n 2 n 1 2h n h 2hﺣﺪاﻛﺜﺮ ﻣﻘﺎﻳﺴﻪ ﺑﺮاي ﻫﺮ ﮔﺮه در ارﺗﻔﺎع h h 1 2 h 0 2 ﻳﺎدآوري :ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ از ارﺗﻔﺎع h 1ﺗﺎ h lg n و ﮔﺮهﻫﺎي ﺑﺮگ ﻫﻤﮕﻲ در ارﺗﻔﺎع h 0ﻗﺮار دارﻧﺪ. ﻳﺎدآوري :ﺑﺮاي ﻣﺤﺎﺳﺒﻪ h 2h ﺑﺎﺗﻮﺟﻪ ﺑﻪ ﻣﺒﺤﺚ »ﻣﺸﺘﻖ ﺳﺮي ﻫﻨﺪﺳﻲ« در ﭘﻴﻮﺳﺖ ﻛﺘﺎب )ﻣﻘﺪﻣﻪ رﻳﺎﺿﻲ( دارﻳﻢ: h 0 h 2h 2 h 0 .6 1 x x 2 h x h h 0 1 x 2 0 x 1 ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﻫﻤﺎنﻃﻮر ﻛﻪ ﻣﻲداﻧﻴﻢ ،زﻣﺎن ﺳﺎﺧﺖ ﻳﻚ heapاز ﻣﺮﺗﺒﻪ ﺧﻄﻲ ﻳﻌﻨﻲ O n اﺳﺖ ،ﺑﻨﺎﺑﺮاﻳﻦ ﻗﻀﻴﻪ اﺻﻠﻲ ﺣﺎﻟﺖ II n O 1 O lg n 2 : T n T ﮔﺰﻳﻨﻪ 1 : T n T n 1 T n 2 O n O b n , b 1 * ﻗﻀﻴﻪ اﺻﻠﻲ ﺣﺎﻟﺖ II n O n O n lg n 2 : T n 2T ﮔﺰﻳﻨﻪ 3 ** : T n T n k 1 T k O 1 On : *اﻳﻦ ﺗﺎﺑﻊ از ﻧﻮع ﺧﻄﻲ ﻏﻴﺮﻫﻤﮕﻦ ﺑﻮده و از آنﺟﺎ ﻛﻪ ﻳﻜﻲ از رﻳﺸﻪﻫﺎي ﻣﻌﺎدﻟﻪ ﻣﺸﺨﺼﻪ در آن ﺑﺰرگﺗﺮ از ﻳﻚ اﺳـﺖ در ﻧﺘﻴﺠـﻪ ﺟـﻮاب ﺗـﺎﺑﻊ از ﻣﺮﺗﺒـﻪ ﻧﻤﺎﻳﻲ ﺧﻮاﻫﺪ ﺑﻮد و ﺧﻄﻲ ﻧﻴﺴﺖ. 1 5 r1 2 1 5 2 2ﻣﻌﺎدﻟﻪ ﻣﺸﺨﺼﻪ 1n n1 r r 1 r 1 0 r 2 2 r 3 r 4 1 n n t n t n 1 t n 2 1 5 1 5 1 5 t n c 1. c 2 . c 3 .1n c 4 .n.1n O 2 2 2 38 ﺳﺎﺧﺘﻤﺎن داده : **ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻦﻛﻪ 1 k nاﺳﺖ اﮔﺮ از روش ﺟﺎﻳﮕﺬاري ﺑﺮاي ﻣﻘﺎدﻳﺮ n 3, 4,ﺑﻪ ازاء k 2اﺳﺘﻔﺎده ﻛﻨﻴﻢ آنﮔﺎه ﺧﻮاﻫﻴﻢ داﺷﺖ: T 3 T 2 T 2 O 1 2 T 2 O 1 T 4 T 3 T 2 O 1 3T 2 O 1 T 5 T 4 T 2 O 1 4 T 2 O 1 T n T n k 1 T k O 1 n 1 T 2 O 1 O n .7 ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. در ﻫﺮ درﺧﺖ heapﺑﺎ nﻋﻨﺼﺮ ﻫﻤﻮاره: ﻳﺎﻓﺘﻦ ﻳﻚ ﻋﻨﺼﺮ ﺑﺎ ﻛﻠﻴﺪ ﻣﺸﺨﺺ از ﻣﺮﺗﺒﻪ ﺧﻄﻲ ﻳﻌﻨﻲ O nاﺳﺖ. اﻧﺠﺎم ﻫﺮ ﻳﻚ از ﻋﻤﻠﻴﺎت ﺣﺬف ،ﻛﺎﻫﺶ و اﻓﺰاﻳﺶ ﻣﻘﺪار ﻳﻚ ﻋﻨﺼﺮ ﻣﺸﺨﺺ از ﻣﺮﺗﺒﻪ O lg n اﺳﺖ. .8 ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. اﮔﺮ ﻋﻤﻠﻴﺎت را ﺑﻪ ﺗﺮﺗﻴﺐ . Change 2, 4 , Change 11,16 اﻧﺠﺎم دﻫﻴﻢ آﻧﮕﺎه ﻣﺠﻤﻮع ﺗﻌﺪاد ﺟﺎﺑﻪﺟﺎﻳﻲ ﻫﺎ 4ﺧﻮاﻫﺪ ﺑﻮد اﮔﺮ ﻋﻤﻠﻴﺎت را ﺑﻪ ﺗﺮﺗﻴﺐ . Change 11,16 , Change 2, 4 اﻧﺠﺎم دﻫﻴﻢ آﻧﮕﺎه ﻣﺠﻤﻮع ﺗﻌﺪاد ﺟﺎﺑﻪﺟﺎﻳﻲ ﻫﺎ 4ﺧﻮاﻫﺪ ﺑﻮد HEAP .9 39 ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. در ﻫﺮ درﺧﺖ Maxheapﺑﺎ nﻋﺪد ﻣﺘﻤﺎﻳﺰ ﻫﻤﻮاره ﻣﻲﺗﻮاﻧﻴﻢ iاﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ را از ﺳﻄﺢ دوم ﺗـﺎ ﺳـﻄﺢ iام در ﺧﺎﻧـﻪﻫـﺎي 2ﺗـﺎ 2i 1ﻗـﺮار دﻫﻴﻢ .ﺑﻨﺎﺑﺮاﻳﻦ: ﭼﻬﺎرﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ :ﻣﻲﺗﻮاﻧﺪ در ﺧﺎﻧﻪﻫﺎي 2ﺗﺎ 24 1از ﺳﻄﺢ دوم ﺗﺎ ﺳﻄﺢ ﭼﻬﺎرم ﻗﺮار ﮔﻴﺮد ﻛﻪ ﺧﺎﻧﻪﻫﺎي 2و 3در ﺳﻄﺢ دوم ،ﺧﺎﻧﻪﻫـﺎي 4 ﺗﺎ 7در ﺳﻄﺢ ﺳﻮم و ﺧﺎﻧﻪ 8ﺗﺎ 15در ﺳﻄﺢ ﭼﻬﺎرم ﻗﺮار دارد و در ﺣﺎﻟﻲﻛﻪ ﺧﺎﻧﻪﻫﺎي 16ﺗﺎ 31در ﺳﻄﺢ ﭘﻨﺠﻢ ﻗﺮار دارد .ﺑﻨﺎﺑﺮاﻳﻦ ﭼﻬﺎرﻣﻴﻦ ﺑﺰرگﺗﺮﻳﻦ ﻧﻤﻲﺗﻮاﻧﺪ در اﻳﻦ ﺧﺎﻧﻪﻫﺎ ﻗﺮار ﮔﻴﺮد. .10ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﻋﻤﻖ ﻫﺮ ﮔﺮه ﺑﺎ ﺷﻤﺎره iدر ﻫﺮ درﺧﺖ heapﺑﺎ nﮔﺮه ﻣﺎﻧﻨﺪ ﻫﺮ درﺧﺖ ﻛﺎﻣﻞ ﻣﺴﺘﻘﻞ از nﺑﻮده و ﺑﺮاﺑﺮ ﺑﺎ lg i اﺳﺖ. .11ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﻳﻚ درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ ﺗﻨﻬﺎ در ﺻﻮرﺗﻲﻛﻪ ارﻳﺐ ﺑﻪ ﭼﭗ ﻳﺎ ارﻳﺐ ﺑـﻪ راﺳـﺖ ﺑﺎﺷـﺪ ﻣـﻲﺗﻮاﻧـﺪ ﺧﺎﺻـﻴﺖ ﻫـﺮم ﺑﻴـﺸﻴﻨﻪ ) (Maxheapﻳـﺎ ﻫـﺮم ﻛﻤﻴﻨـﻪ ) (minheapرا داﺷﺘﻪ ﺑﺎﺷﺪ ﺑﻪ ﻃﻮر ﻣﺜﺎل درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ ﺑﺎ ﻛﻠﻴﺪﻫﺎي ,3, 2,1ﺗﺎ nرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ. ﺑﻨﺎﺑﺮاﻳﻦ ارﺗﻔﺎع درﺧﺖ ﻣﻮردﻧﻈﺮ h O n ﺧﻮاﻫﺪ ﺑﻮد. .12ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﮔﺰﻳﻨﻪ :1ﺳﺎﺧﺘﻤﺎن داده ) AVLدرﺧﺖ ﺟﺴﺘﺠﻮي ﻣﺘﻮازن( اﻳﻦﮔﻮﻧﻪ ﻃﺮاﺣﻲ ﻣﻲﺷﻮد. ﮔﺰﻳﻨﻪ :2ﺳﺎﺧﺘﻤﺎن داده ) maxheapﻫﺮم ﺑﻴﺸﻴﻨﻪ( اﻳﻦﮔﻮﻧﻪ ﻃﺮاﺣﻲ ﻣﻲﺷﻮد. ﮔﺰﻳﻨﻪ :3ﺳﺎﺧﺘﻤﺎن داده ) maxheapﻫﺮم ﺑﻴﺸﻴﻨﻪ( اﻳﻦﮔﻮﻧﻪ ﻃﺮاﺣﻲ ﻣﻲﺷﻮد. ﮔﺰﻳﻨﻪ :4ﻫﻴﭻ ﺳﺎﺧﺘﻤﺎن دادهاي را ﻧﻤﻲﺗﻮان ﺑﺪﻳﻦﮔﻮﻧﻪ ﻃﺮاﺣﻲ ﻛﺮد. .13ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. i در ﻫﺮ درﺧﺖ minheapﺑﺎ nﻛﻠﻴﺪ ﻣﺘﻤﺎﻳﺰ ،ﻫﻤﻮاره ﻣﻲﺗﻮاﻧﻴﻢ iاﻣﻴﻦ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ را از ﺳﻄﺢ دوم ﺗﺎ ﺳﻄﺢ iام در ﺧﺎﻧـﻪﻫـﺎي 2ﺗـﺎ 2 1ﻗـﺮار دﻫﻴﻢ ،ﺑﻨﺎﺑﺮاﻳﻦ: ﺳﻮﻣﻴﻦ ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ :ﻣﻲﺗﻮاﻧﺪ دار ﺧﺎﻧﻪﻫﺎي 2ﺗﺎ 23 1از ﺳﻄﺢ دوم ﺗﺎ ﺳﻄﺢ ﺳﻮم ﻗﺮار ﮔﻴﺮدﻛﻪ ﺧﺎﻧﻪﻫﺎي 2و 3در ﺳﻄﺢ دوم و ﺧﺎﻧﻪﻫﺎي 4ﺗـﺎ 7در ﺳﻄﺢ ﺳﻮم ﻗﺮار دارﻧﺪ. .14ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. روش اول: ﻳﻜﻲ از دو ﺣﺎﻟﺖ )اﻟﻒ( ﻳﺎ )ب( را ﺑﺮاي دو ﻫﻴﭗ اﻧﺠﺎم ﻣﻲ دﻫﻴﻢ : اﻟﻒ -ﻋﻨﺎﺻﺮ را ﻳﻜﻲ ﻳﻜﻲ از heapﺑﺎ nﻋﻨﺼﺮ ﺧﺎرج ﻛﺮده و در heapﺑﺎ mﻋﻨﺼﺮ درج ﻣﻲﻛﻨﻴﻢ ،زﻣﺎن ﻻزم O m lg m m lg n m lg mn اﺳﺖ. 40 ﺳﺎﺧﺘﻤﺎن داده ب -ﻋﻨﺎﺻﺮ را ﻳﻜﻲ ﻳﻜﻲ از heapﺑﺎ mﻋﻨﺼﺮ ﺧﺎرج ﻛﺮده و در heapﺑﺎ nﻋﻨﺼﺮ درج ﻣﻲﻛﻨﻴﻢ ،زﻣﺎن ﻻزم O n lg n n lg m n lg mn اﺳﺖ. روش دوم: ﻋﻨﺎﺻﺮ دو heapرا در آراﻳﻪ اي ﺑﻪ ﻃﻮل m+nدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ و اﻟﮕﻮرﻳﺘﻢ BUILD-MAX-HEAPرا ﺑﺮاي آن در زﻣﺎن O m n اﺟﺮا ﻣﻲ ﻛﻨﻴﻢ. .15ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﺑﺎ اﺳﺘﻔﺎده از ﭘﻴﻤﺎﻳﺶ ﻋﻤﻘﻲ ﺷﺒﻴﻪ ﺑﻪ ) VLRﭘﻴﺶ ﺗﺮﺗﻴﺐ( و ﻳﻚ ﺷﻤﺎرﻧﺪه ﺑﺎ ﻣﻘﺪار اوﻟﻴﻪ ﺻﻔﺮ co unt 0 در درﺧﺖ از ﺑـﺎﻻ ﺑـﻪ ﭘـﺎﻳﻴﻦ و از ﭼـﭗ ﺑـﻪ راﺳﺖ ﺣﺮﻛﺖ ﻣﻲﻛﻨﻴﻢ ﻫﻨﮕﺎم رﺳﻴﺪن ﺑﻪ ﻫﺮ ﮔﺮه ﻣﻘﺪار ﻛﻠﻴﺪ آنرا ﺑﺎ xﻣﻘﺎﻳﺴﻪ ﻣﻲﻛﻨﻴﻢ: : key x ﻳﻚ واﺣﺪ ﺑﻪ ﺷﻤﺎرﻧﺪه countاﺿﺎﻓﻪ ﻛﺮده و ﻣﺴﻴﺮ را ﺑﺮ ﻃﺒﻖ ﭘﻴﻤﺎﻳﺶ VLRاداﻣﻪ ﻣﻲدﻫﻴﻢ. : key x اداﻣﻪ ﻣﺴﻴﺮ را ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ ﻣﺘﻮﻗﻒ ﻛﺮده و ﺑﺮ ﻃﺒﻖ ﭘﻴﻤﺎﻳﺶ VLRﺑﻘﻴﻪ زﻳﺮ درﺧﺘﺎن را ﺑﺮرﺳﻲ ﻣﻲﻛﻨﻴﻢ. ﺑﻪﻃﻮر ﻣﺜﺎل ﻓﺮض ﻛﻨﻴﺪ ﻣﻲﺧﻮاﻫﻴﻢ ﺗﻤﺎم اﻋﺪاد ﻛﻮﭼﻚﺗﺮ ﻳﺎ ﻣﺴﺎوي ﺑﺎ x 38را در ﻫﺮم ﻛﻤﻴﻨﻪ ) (minheapﺑﻪ ﺷﻜﻞ زﻳﺮ ﭘﻴﺪا ﻛﻨﻴﻢ: ﺗﺤﻠﻴﻞ :ﺑﺎ اﻳﻦ ﻓﺮض ﻛﻪ دﻗﻴﻘﺎً kﻋﻨﺼﺮ ﻛﻮﭼﻚﺗﺮ ﻳﺎ ﻣﺴﺎوي ﺑﺎ xوﺟﻮد دارﻧﺪ زﻣﺎن اﺟﺮا ﻧﻬﺎﻳﺘﺎً O k ﺧﻮاﻫﺪ ﺷﺪ در ﻋﻴﻦ ﺣﺎل اﮔﺮ kﻣﻌﻠﻮم ﻧﺒﺎﺷﺪ آنﮔﺎه زﻣﺎن ﺣﺪاﻛﺜﺮ O n ﺧﻮاﻫﺪ ﺑﻮد. .16ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﻫﻤﺎنﻃﻮر ﻛﻪ ﻣﻲداﻧﻴﺪ ﺑﺮاي ﺗﺒﺪﻳﻞ ﻳﻚ آراﻳﻪ ﺑﻪ ﻳﻚ heapﺑﺎﻳﺪ ﺑﺮاي ﺗﻤﺎم ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ از ﺗﺎﺑﻊ heapifyاﺳﺘﻔﺎده ﺷﻮد در اﻳﻦ ﺷـﺮاﻳﻂ ﺣـﺪاﻛﺜﺮ ﻣﻘﺎﻳـﺴﻪ ﺑﺮاي ﻫﺮ ﮔﺮه ﻏﻴﺮ ﺑﺮگ زﻣﺎﻧﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ﻛﻪ در اﺛﺮ ﻣﻘﺎﻳﺴﻪ و ﺟﺎﺑﺠﺎﻳﻲ ﺑﺎ ﺗﺎﺑﻊ ﻓﻮق ﺑﻪ ﭘﺎﻳﻴﻦﺗﺮﻳﻦ ﺑﺮگ در ﻳﻜﻲ از زﻳﺮدرﺧﺘﺎن ﻣﺸﺘﻖ ﺷﺪه از ﻓﺮ؟؟؟ ﻣﻨﺘﻘـﻞ ﺷﻮد. ﮔﺮه 6 5 4 3 2 1 وﺿﻌﻴﺖ ﻣﻘﺎﻳﺴﻪ ﮔﺮه در ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮه 12 ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮهﻫﺎي 11,10 ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮهﻫﺎي 9,8 اﺑﺘﺪا ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮهﻫﺎي 7, 6 ﺳﭙﺲ ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮه 12 اﺑﺘﺪا ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮهﻫﺎي 5, 4 ﺳﭙﺲ ﺑﺎ ﻳﻜﻲ از زوج ﮔﺮه ﻫﺎي 9,8ﻳﺎ 11,10 اﺑﺘﺪا ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﮔﺮهﻫﺎي 3, 2 ﺳﭙﺲ ﺑﺎ ﮔﺮهﻫﺎي ، 5, 4 در اﻧﺘﻬﺎ ﺑﺎ ﻳﻜﻲ از زوج ﮔﺮه ﻫﺎي 9,8ﻳﺎ 11,10 ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪ 1 2 2 3 4 6 18 ﻣﺠﻤﻮع HEAP 41 .17ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. در ﻳﻚ maxheapﺑﺎ nﻋﻨﺼﺮ ﻛﻪ ﺑﻪ ﺻﻮرت آراﻳﻪ ﭘﻴﺎدهﺳﺎزي ﺷﺪه اﺳﺖ ﻋﻨﺼﺮ ﻣﻲﻧﻴﻤﻢ در ﻳﻜﻲ از ﺑﺮگﻫﺎ ﻗﺮار دارد ﺑﻨـﺎﺑﺮاﻳﻦ از آنﺟـﺎ ﻛـﻪ ﺗﻌـﺪاد ﺑـﺮگﻫـﺎ n n اﺳﺖ ﺑﺮاي ﭘﻴﺪا ﻛﺮدن ﻋﻨﺼﺮ ﻣﻲﻧﻴﻤﻢ ﺑﻪ دﻗﻴﻘﺎً 1ﻣﻘﺎﻳﺴﻪ ﻧﻴﺎز دارﻳﻢ. 2 2 n n 1 n اﺳﺖ ﻳﺎدآوري :زﻳﺮ آراﻳﻪ A 2 1, , n ﻫﻤﮕﻲ ﺑﺮگ ﻫﺴﺘﻨﺪ ،و ﺗﻌﺪاد آﻧﻬﺎ ﺑﺮاﺑﺮ ﺑﺎ 2 2 دﻗﺖ ﻛﻨﻴﺪ :ﻃﺮاح ﺳﻮال ﺑﻪ اﺷﺘﺒﺎه در ﮔﺰﻳﻨﻪ 2از ﻛﻠﻤﻪ "ﺣﺪاﻛﺜﺮ" اﺳﺘﻔﺎده ﻛﺮده اﺳﺖ. .18ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. در ﻳﻚ minheapﺑﺎ nﻋﻨﺼﺮ ﻛﻪ ﺑﻪ ﺻﻮرت آراﻳﻪ A 1, , n ﭘﻴﺎدهﺳﺎزي ﺷﺪه اﺳﺖ ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ )ﺑﺰرگﺗﺮﻳﻦ ﻋﻨﺼﺮ( در ﻳﻜـﻲ از ﺑـﺮگﻫـﺎ ﻗـﺮار دارد. n n ﺑﻨﺎﺑﺮاﻳﻦ از آنﺟﺎ ﻛﻪ ﺗﻌﺪاد ﺑﺮگﻫﺎ اﺳﺖ ﺑﺮاي ﭘﻴﺪا ﻛﺮدن ﻋﻨﺼﺮ ﻣﺎﻛﺰﻳﻤﻢ ﺑﻪ دﻗﻴﻘﺎً 1ﻣﻘﺎﻳﺴﻪ ﻧﻴﺎز دارﻳﻢ .در ﻋﻴﻦ ﺣﺎل ﮔﺰﻳﻨﻪ 4ﺗﻌﺪاد ﺑﺮﮔﻬﺎ را 2 2 ﻧﺸﺎن ﻣﻲ دﻫﺪ. ﻳﺎدآوري :زﻳﺮ آراﻳﻪ 1, , n n n 1 n اﺳﺖ A ﻫﻤﮕﻲ ﺑﺮگ ﻫﺴﺘﻨﺪ .و ﺗﻌﺪاد آﻧﻬﺎ ﺑﺮاﺑﺮ ﺑﺎ 2 2 2 .19ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﺑﺮاي ﺗﺒﺪﻳﻞ ﻳﻚ آراﻳﻪ ﺑﻪ ﻳﻚ max heapﺑﻪ ﺻﻮرت درﺟﺎ ﺑﺎﻳﺪ ﺑﺮاي ﻫﺮ ﻳﻚ از ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ از روال heapifyاﺳﺘﻔﺎده ﻛﻨﻴﻢ اﻳﻦ ﻋﻤﻞ ﺑﺎﻳﺪ از ﭘﺎﻳﻴﻦ ﺑـﻪ ﺑﺎﻻ و ﺳﻄﺢ ﺑﻪ ﺳﻄﺢ از آﺧﺮﻳﻦ ﮔﺮه ﻏﻴﺮﺑﺮگ ﺗﺎ ﮔﺮه رﻳﺸﻪ اﻧﺠﺎم ﭘﺬﻳﺮد. .20ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. در ﻳﻚ maxheapﻛﻪ در آن ﻫﺮ ﮔﺮه ﺑﻪ ﺻﻮرت زوج >ﻣﻘﺪار ﻛﻠﻴﺪ= Valueو اﻧﺪﻳﺲ= < keyﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮد .ﺳﺎﺧﺘﻤﺎن داده xﻣﻲﺗﻮاﻧﺪ ﺑﻪ ﻳﻜﻲ از دو ﺷﻜﻞ زﻳﺮ ﭘﻴﺎدهﺳﺎزي ﺷﻮد: ﺻﻒ )(Queue درج در اﻧﺘﻬﺎ count++ :ﻳﻚ ﮔﺮه ﺑﻪ اﻧﺘﻬﺎي ﺳﺎﺧﺘﺎر اﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ. ﺣﺬف از اﺑﺘﺪا :اﮔﺮ ﻣﻌﻴﺎر ﻣﻘﺎﻳﺴﻪ ﺑﺮاي ﺣﺬف ،ﺑﺰرگﺗﺮﻳﻦ ﻣﻘﺪار ﻛﻠﻴﺪ ) (Valueﺑﺎﺷﺪ آنﮔﺎه ﻋﻤﻞ ﺣﺬف از اﺑﺘﺪا )رﻳﺸﻪ( اﻧﺠﺎم ﻣﻲﺷﻮد. ﭘﺸﺘﻪ )(Stack درج در اﻧﺘﻬﺎ count++ :ﻳﻚ ﮔﺮه ﺑﻪ اﻧﺘﻬﺎي ﺳﺎﺧﺘﺎر اﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ. ﺣﺬف از اﻧﺘﻬﺎ :اﮔﺮ ﻣﻌﻴﺎر ﻣﻘﺎﻳﺴﻪ ﺑﺮاي ﺣﺬف ،ﺑﺰرگﺗﺮﻳﻦ اﻧﺪﻳﺲ ) (keyﺑﺎﺷﺪ .آنﮔﺎه ﻋﻤﻞ ﺣﺬف از اﻧﺘﻬﺎ )ﮔﺮه آﺧﺮ( اﻧﺠﺎم ﻣﻲﺷﻮد 42 ﺳﺎﺧﺘﻤﺎن داده . در اﻳﻦ ﺳﻮال از آنﺟﺎ ﻛﻪ ﻣﻌﻴﺎر ﻣﻘﺎﻳﺴﻪ keyاﺳﺖ ﺑﻨﺎﺑﺮاﻳﻦ ﭘﻴﺎدهﺳﺎزي ﻣﺮﺑﻮط ﺑﻪ ﭘﺸﺘﻪ اﺳﺖ. .21ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﺑﺮاي ﺗﺒﺪﻳﻞ ﻳﻚ آراﻳﻪ ﺑﻪ ﻳﻚ minheapﺑﺎﻳﺪ ﺑﺮاي ﻫﺮ ﻳﻚ از ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ از روال heapifyاﺳﺘﻔﺎده ﻛﻨﻴﻢ اﻳﻦ ﻋﻤﻞ ﺑﺎﻳﺪ از ﭘـﺎﻳﻴﻦ ﺑـﻪ ﺑـﺎﻻ و ﺳـﻄﺢ ﺑـﻪ ﺳﻄﺢ اﻧﺠﺎم ﺷﻮد) .از آﺧﺮﻳﻦ ﮔﺮه ﻏﻴﺮﺑﺮگ ﺗﺎ ﮔﺮه رﻳﺸﻪ( .22ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﺑﺮاي ﺗﺒﺪﻳﻞ ﻳﻚ آراﻳﻪ ﺑﻪ ﻳﻚ maxheapدرﺟﺎ ﺑﺎﻳﺪ ﺑﺮاي ﻫﺮ ﻳﻚ از ﮔﺮهﻫﺎي ﻏﻴﺮﺑﺮگ از روال heapifyاﺳﺘﻔﺎده ﻛﻨﻴﻢ اﻳﻦ ﻋﻤﻞ ﺑﺎﻳﺪ از ﭘﺎﻳﻴﻦ ﺑﻪ ﺑﺎﻻ و ﺳـﻄﺢ ﺑﻪ ﺳﻄﺢ اﻧﺠﺎم ﺷﻮد )از آﺧﺮﻳﻦ ﮔﺮه ﻏﻴﺮﺑﺮگ ﺗﺎ ﮔﺮه رﻳﺸﻪ( HEAP 43 .23ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. در ﺻﻮرﺗﻲﻛﻪ ﻛﻠﻴﺪﻫﺎي 2,50, 45, 70, 75, 22, 40,55, 45را ﺑﻪ ﺗﺮﺗﻴﺐ از راﺳﺖ ﺑﻪ ﭼﭗ در ﻳﻚ درﺧﺖ ﺗﻬﻲ minheapدرج ﻛﻨﻴﻢ آنﮔﺎه ﺧﻮاﻫﻴﻢ داﺷﺖ: .24ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. اﺑﺘﺪا ﻛﻠﻴﺪﻫﺎي 75, 40,55, 45, 42,50, 45, 70را ﺑﻪ ﺗﺮﺗﻴﺐ از راﺳﺖ ﺑﻪ ﭼﭗ در ﻳﻚ درﺧﺖ ﺗﻬﻲ minheapدرج ﻣﻲﻛﻨﻴﻢ. 44 ﺳﺎﺧﺘﻤﺎن داده ﺳﭙﺲ ﺳﻪ ﺑﺎر ﻋﻤﻞ ﺣﺬف را روي رﻳﺸﻪ درﺧﺖ اﻧﺠﺎم ﻣﻲدﻫﻴﻢ .25ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﻛﺎراﺗﺮﻳﻦ اﻟﮕﻮرﻳﺘﻢ ﺑﺮاي ﺑﺮرﺳﻲ heapﺑﻮدن ﻳﻚ درﺧﺖ دودوﻳﻲ آن اﺳﺖ ﻛﻪ ﻫﺮ ﮔﺮه ﻏﻴﺮﺑﺮگ را ﺑـﺎ دو ﻓﺮزﻧـﺪش ﻣﻘﺎﻳـﺴﻪ ﻛﻨـﻴﻢ اﻳـﻦ ﻋﻤﻠﻴـﺎت ﺑـﻪ ﺣـﺪاﻛﺜﺮ n 2ﻣﻘﺎﻳﺴﻪ ﻧﻴﺎز داﺷﺘﻪ و در زﻣﺎن ﺧﻄﻲ O n اﻧﺠﺎم ﺧﻮاﻫﺪ ﺷﺪ. 2 n ﻳﺎدآوري :زﻳﺮ آراﻳﻪ A 1, , در ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﻫﻤﮕﻲ ﻏﻴﺮﺑﺮگ ﻫﺴﺘﻨﺪ. 2 .26ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﻛﺎراﺗﺮﻳﻦ ﺳﺎﺧﺘﺎر ﺑﺮاي ادﻏﺎم ﻟﻴﺴﺖﻫﺎي ﻣﺮﺗﺐ اﺳﺘﻔﺎده از درﺧﺖ minheapاﺳﺖ ،اﻳﻦ ﻣﻮﺿﻮع ﻳﻜﻲ از ﻛﺎرﺑﺮدﻫﺎي درﺧﺖ heapاﺳﺖ ﻛﻪ در ﻣـﺘﻦ درس ﺑـﻪ ﺗﻔﻀﻴﻞ آن را ﺷﺮح دادﻳﻢ. .27ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. در اﻳﻦ ﺳﻮال از آنﺟﺎ ﻛﻪ ﮔﺮه رﻳﺸﻪ T 1 75 ﺑﺰرگﺗﺮﻳﻦ ﻣﻘﺪار اﺳﺖ ﺑﻨﺎﺑﺮاﻳﻦ درﺧﺖ ﻣﻮردﻧﻈﺮ maxheapﺑﻮده و ﻣﻘﺪار ﻛﻠﻴﺪ ﻫﺮ ﮔﺮه در آن ﺑﺎﻳﺪ از دو ﻓﺮزﻧﺪش ﺑﺰرگﺗﺮ ﻳﺎ ﻣﺴﺎوي ﺑﺎﺷﺪ. در ﺻﻮرﺗﻲﻛﻪ اﻳﻦ وﻳﮋﮔﻲ را ﺑﺮاي ﺧﺎﻧﻪﻫﺎي آراﻳﻪ ﻛﻨﺘﺮل ﻛﻨﻴﻢ ﺧﻮاﻫﻴﻢ دﻳﺪ ﻛﻪ ﻓﻘﻂ ﮔﺰﻳﻨﻪ 4اﻳﻦ ﺷﺮاﻳﻂ را دارد. HEAP ]T[2i] , T[2i 1 10 9 45 ]T[i i ]T[2] , T[3 ]T[1 1 ]T[4] , T[5 ]T[2 2 ]T[6] , T[7 ]T[3 3 ]T[8] , T[9 ]T[4 4 ]T[10] , T[11 ]T[5 3 8 7 6 28 20 7 5 17 4 3 30 2 1 75 T : T 2 21 ; T 4 14 ; T 9 0 ; T 10 16ﮔﺰﻳﻨﻪ4 .28ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. ﻫﺮ ﻳﻚ از ﻋﻤﻠﻴﺎت ﺣﺬف D و درج I ﺑﻪ ﺷﺮح زﻳﺮ در درﺧﺖ heapاﻧﺠﺎم ﻣﻲﭘﺬﻳﺮد. : Dاﺑﺘﺪا ﻛﻮﭼﻚﺗﺮﻳﻦ ﻛﻠﻴﺪ از رﻳﺸﻪ درﺧﺖ ﺣﺬف ﻣﻲﺷﻮد ،ﺳﭙﺲ ﮔﺮه آﺧﺮ ﺟﺎﻳﮕﺰﻳﻦ آن ﻣﻲﺷﻮد در اﻧﺘﻬﺎ روال heapifyﺑﺮاي ﮔﺮه رﻳﺸﻪ ﺑﺎ ﻣﻘﺪار ﺟـﺎﻳﮕﺰﻳﻦ ﺷﺪه اﺟﺮا ﻣﻲﺷﻮد. : i X ﮔﺮه ﺟﺪﻳﺪي ﺑﺎ ﻣﻘﺪار ﻛﻠﻴﺪ Xﺑﻪ اﻧﺘﻬﺎي درﺧﺖ اﺿﺎﻓﻪ ﻣﻲﺷﻮد ،ﺳﭙﺲ ﺑﺎ ﻣﻘﺎﻳﺴﻪ و در ﺻﻮرت ﻧﻴﺎز ﺟﺎﺑﺠﺎﻳﻲ ﺑﺎ اﺟﺪادش )از ﭘﺪر ﺗﺎ ﺣـﺪاﻛﺜﺮ رﻳـﺸﻪ( در ﻣﻜﺎن ﻣﻨﺎﺳﺒﺶ ﻗﺮار ﻣﻲﮔﻴﺮد. 46 ﺳﺎﺧﺘﻤﺎن داده .29ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. اﺑﺘﺪا ﮔﺮه ﺟﺪﻳﺪ ﺑﺎ ﺷﻤﺎره اﻧﺪﻳﺲ nﺑﻪ ﻋﻨـﻮان ﺑﺮﮔـﻲ در اﻧﺘﻬـﺎي درﺧـﺖ درج ﻣـﻲﺷـﻮد ﺳـﭙﺲ ﺑـﺮاي ﺣﻔـﻆ وﻳﮋﮔـﻲ Maxheapﺑﺎﻳـﺪ ﻛﻠﻴـﺪ ﮔـﺮه ﺟﺪﻳـﺪ )) (temp A(nرا ﺑﺎﻳﺪ و در ﺻﻮرت ﻧﻴﺎز اﺟﺪادش ﺟﺎﺑﺠﺎ ﻛﻨﻴﻢ ﺗﺎ در ﻣﻜﺎن ﻣﻨﺎﺳﺒﻲ ﻗﺮار ﮔﻴﺮد اﻳﻦ ﻛﺎر ﺗﻮﺳﻂ ﺣﻠﻘﻪ Whileاﻧﺠﺎم ﻣﻲﮔﻴﺮد .در ﺣﻠﻘﻪ whileﺗـﺎ زﻣﺎﻧﻲﻛﻪ ﻛﻠﻴﻪ ﮔﺮه ﺟﺪﻳﺪ از اﺟﺪادش ﺑﺰرگﺗﺮ ﺑﺎﺷﺪ A i temp آنﻫﺎ را ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ ﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﺪ اﻳﻦ ﻋﻤﻠﻴﺎت ﺣـﺪاﻛﺜﺮ ﺗـﺎ رﺳـﻴﺪن ﺑـﻪ رﻳـﺸﻪ درﺧﺖ i 1ﻣﻲﺗﻮاﻧﺪ ﺗﻜﺮار ﺷﻮد. ﺑﻌﺪ از اﺗﻤﺎم ﺣﻠﻘﻪ ﻛﻠﻴﺪ ﺟﺪﻳﺪ در ﻣﻜﺎن ﻣﻨﺎﺳﺒﺶ ﻗﺮار ﻣﻲﮔﻴﺮد. .30ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﻫﻤﺎنﻃﻮر ﻛﻪ در ﺷﻜﻞ ﻣﻲﺑﻴﻨﻴﻢ ﺑﻌﺪ از درج ﻋﺪد 95ﺑﻪ ﻋﻨﻮان ﮔﺮه آﺧﺮ در اﻧﺘﻬﺎي درﺧﺖ ﺑﺎﻳﺪ آن را در ﻣﺴﻴﺮ اﺟﺪادش اﺑﺘﺪا ﺑﺎ 74و ﺳﭙﺲ ﺑﺎ 90ﺟﺎﺑﺠـﺎ ﻛﻨﻴﻢ ﺗﺎ وﻳﮋﮔﻲ maxheapﺣﻔﻆ ﺷﻮد. .31ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﺑﺮاي آﻧﻜﻪ ﺧﺎﻧﻪ ﻫﺎي ﻳﻚ آراﻳﻪ ﻧﺸﺎن دﻫﻨﺪه ﻳﻚ maxheapﺑﺎﺷﻨﺪ ﺑﺎﻳﺪ وﺿﻌﻴﺖ زﻳﺮ ﺑﺮاي آﻧﻬﺎ ﺑﺮﻗﺮار ﺑﺎﺷﺪ: HEAP 47 ﺑﺎ ﺑﺮرﺳﻲ ﮔﺰﻳﻨﻪ ﻫﺎ ﻓﻘﻂ در ﮔﺰﻳﻨﻪ ، 1ﻣﻘﺪار ﺧﺎﻧﻪ ﺑﺎ اﻧﺪﻳﺲِ 2ﺷﺮط ﻣﻮرد ﻧﻈﺮ را ﻧﺪارد ]A[2i] , A[2i 1 ]A[i i 10 , 5 20 1 3 , 6 5 2 1 , 4 10 3 7 6 5 4 3 2 1 1 4 3 6 10 5 20 .32ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. !6 اﺑﺘﺪا ﺑﻌﺪ از ﻛﻨﺎرﮔﺬاﺷﺘﻦ ﻛﻠﻴﺪ ﻣﻴﻨﻴﻤﻢ )ﻋﺪد ( 1ﺑﺮاي رﻳﺸﺔ درﺧﺖ ، min heap ﺑﻘﻴﻪ ﻛﻠﻴﺪﻫﺎ ) 2ﺗـﺎ ( 6را ﺑـﻪ !3!3 راﺳﺖ ﺗﻮزﻳﻊ ﻣﻲﻛﻨﻴﻢ ﺳﭙﺲ اﻳﻦ ﻋﻤﻠﻴﺎت را ﺑﻪ ﻃﻮر ﻣﺸﺎﺑﻪ ﺑﺮاي دو زﻳﺮ درﺧﺖ ﭼﭗ و راﺳﺖ ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ. زﻳﺮ درﺧﺖ راﺳﺖ: زﻳﺮ درﺧﺖ ﭼﭗ: از ﺳﻪ ﻛﻠﻴﺪ ،ﻛﻠﻴﺪ ﻣﻴﻨﻴﻤﻢ را ﺑﺮاي رﻳﺸﻪ ﻛﻨﺎر ﮔﺬاﺷﺘﻪ و دو ﻛﻠﻴـﺪ از ﺳﻪ ﻛﻠﻴﺪ ،ﻛﻠﻴﺪ ﻣﻴﻨﻴﻤﻢ را ﺑﺮاي رﻳﺸﻪ ﻛﻨـﺎر ﮔﺬاﺷـﺘﻪ و دو ﻛﻠﻴـﺪ !2 !2 در دو زﻳﺮ درﺧﺖ ﺗﻮزﻳﻊ ﻣﻲﻛﻨﻴﻢ. ﺑﺎﻗﻴﻤﺎﻧﺪه را ﺑﻪ در دو زﻳﺮ درﺧﺖ ﺗﻮزﻳﻊ ﻣﻲﻛﻨﻴﻢ. ﺑﺎﻗﻴﻤﺎﻧﺪه را ﺑﻪ !1!1 !1!1 ﺣﺎﻟـﺖ در دو زﻳـﺮ درﺧـﺖ ﭼـﭗ و 6! 2! 2! ﺗﻌﺪاد ﻛﻞ ﺣﺎﻻت 80 3!3! 1!1! 1!1! .33ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. !10 اﺑﺘﺪا ﺑﻌﺪ از ﻛﻨﺎرﮔﺬاﺷﺘﻦ ﻛﻠﻴﺪ ﻣﺎﻛﺰﻳﻤﻢ )ﻋﺪد ( 11ﺑﺮاي رﻳﺸﺔ درﺧﺖ ، max heap ﺑﻘﻴﻪ ﻛﻠﻴﺪﻫﺎ ) 1ﺗﺎ ( 10را ﺑﻪ !7!3 ﺣﺎﻟﺖ در دو زﻳﺮ درﺧـﺖ ﭼـﭗ و راﺳﺖ ﺗﻮزﻳﻊ ﻣﻲﻛﻨﻴﻢ ﺳﭙﺲ اﻳﻦ ﻋﻤﻠﻴﺎت را ﺑﻪ ﻃﻮر ﻣﺸﺎﺑﻪ ﺑﺮاي دو زﻳﺮ درﺧﺖ ﭼﭗ و راﺳﺖ ﺗﻜﺮار ﻣﻲﻛﻨﻴﻢ 10! 6! 4! 2! 2! ﺗﻌﺪاد درﺧﺖ 11520 7!3! 1!5! 3!1! 1!1! 1!1! 48 ﺳﺎﺧﺘﻤﺎن داده .34ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. ﻣﺮﺗﺒﻪ زﻣﺎﻧﻲ اﻟﮕﻮرﻳﺘﻢ ﺣﺬف ﻋﻨﺼﺮ دﻟﺨﻮاه iام 1 i n از ﻳﻚ Max Heapﺑﻪ ﮔﻮﻧﻪاي ﻛﻪ ﺳﺎﺧﺘﺎرِ آﻧﺮا ﺣﻔﻆ ﻛﻨﺪ ﻫﻤﻮاره ﺑﺮاﺑﺮ ﺑﺎ O lg n اﺳﺖ. .35ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. اﻟﮕﻮرﻳﺘﻢ داده ﺷﺪه ﻫﻤﺎن روال BUILD MAX HEAPاﺳﺖ ﻛﻪ ﺑﺼﻮرت درﺟﺎ آراﻳﻪ T 1..n را ﺗﺒﺪﻳﻞ ﺑـﻪ ﻳـﻚ maxheapﻣـﻲ ﻛﻨـﺪ .در اﻳـﻦ اﻟﮕﻮرﻳﺘﻢ ،ﺣﻠﻘﻪ repeatﻋﻤﻠﻴﺎت ﻣﺮﺑﻮط ﺑﻪ ﺗﺎﺑﻊ max-heapifyرا ﺑﺮاي ﻋﻨﺎﺻﺮِ ﻏﻴﺮ ﺑﺮگ از اﻧﺘﻬﺎ ﺗﺎ اﺑﺘﺪا )ﮔﺮه رﻳﺸﻪ ﺑﺎ اﻧﺪﻳﺲ (1اﻧﺠﺎم ﻣﻲ دﻫـﺪ .اﮔـﺮ t ﺗﻌﺪاد دﻓﻌﺎت اﺟﺮاي ﺣﻠﻘﻪ repeatﺑﺎﺷﺪ ،آﻧﮕﺎه tﺑﺮاﺑﺮ ﺧﻮاﻫﺪ ﺑﻮد ﺑﺎ ﻣﺠﻤﻮع ارﺗﻔﺎع ﻋﻨﺎﺻﺮ ﻏﻴﺮ ﺑﺮگ ﻛـﻪ در ﻃـﻲ اﺟـﺮاي ﺗـﺎﺑﻊ max-heapifyﺑـﺮاي اﻳـﻦ ﻋﻨﺎﺻﺮ رخ ﻣﻲ دﻫﺪ .از آﻧﺠﺎ ﻛﻪ ﮔﺰﻳﻨﻪ ﻫﺎ ﻛﺮانِ ﺑﺎﻻي ﻣﻘﺪار tرا ﻣﻮرد ﺑﺮرﺳﻲ ﻗﺮار داده اﻧﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﺳﻪ ﺷﺮط زﻳﺮ وﺟﻮد ﺧﻮاﻫﺪ داﺷﺖ -1:درﺧﺖ ﻣﻮرد ﻧﻈﺮ ﭘﺮ اﺳﺖ 2ـ آراﻳﻪ اوﻟﻴﻪ minheapاﺳﺖ -3ﺗﻜﺮار ﺣﻠﻘﻪ ) reapeatﺗﺎﺑﻊ (max-heapifyﺑﺮاي ﻫﺮ ﻋﻨﺼﺮِ ﻏﻴﺮ ﺑﺮگ ﻳﻚ واﺣﺪ ﺑﻴﺸﺘﺮ از ارﺗﻔﺎع ﮔـﺮه ﻋﻨـﺼﺮ ﻣـﻮرد ﻧﻈﺮ اﺳﺖ ﻳﺎد آوري :ﺗﺎﺑﻊ max-heapifyدر ﺑﻬﺘﺮﻳﻦ ﺣﺎﻟﺖ )آراﻳﻪ اوﻟﻴﻪ (maxheapﺑﺎ ﻳﻜﺒﺎر اﺟﺮا ﺑﺮاي ﻫﺮ ﮔﺮه ﺑﻪ ﻛﺎر ﺧﻮد ﭘﺎﻳﺎن ﻣﻲ دﻫﺪ اﻣﺎ در ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ)آراﻳـﻪ اوﻟﻴﻪ (minheapﺑﺎ ﺷﺮوع از ﻫﺮ ﮔﺮه در ﻣﺴﻴﺮ ارﺗﻔﺎعِ ﮔﺮه ﭘﺎﻳﻴﻦ آﻣﺪه و ﺑﺎ رﺳﻴﺪن ﺑﻪ ﻳﻚ ﺑﺮگ ﺑﻪ ﻛﺎر ﺧﻮد ﺧﺎﺗﻤﻪ ﻣﻲ دﻫﺪ. begin procedure M T 1..n n for i downto 1 do 2 R i repeat j R if 2 j n and T 2 j T R then BUILD MAX HEAP MAX HEAPIFY R 2j if 2 j 1 n and T 2 j 1 T R then R 2 j 1 swap T j , T R until j R end ﻧﺘﻴﺠﻪ: ﺑﻄﻮر ﻛﻠﻲ اﮔﺮ tﺗﻌﺪاد اﺟﺮاي ﺗﺎﺑﻊ heapifyﺑﺮاي ﮔﺮه ﻫﺎي ﻏﻴﺮ ﺑﺮگ ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ ﺑﺎﺷﺪ ،آﻧﮕﺎه ﻣﻘﺪار آن در ﺑﺎزه زﻳﺮ ﻗﺮار ﺧﻮاﻫﺪ داﺷﺖ: k k ... k 1 2 k 2 3 2 k 1 22 t 1 2 k 1 1 2k 2 ... 1 2k k k lg n .36ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﻫﻴﭻ اﻟﮕﻮرﻳﺘﻤﻲ ﻣﺒﺘﻨﻲ ﺑﺮ ﻣﻘﺎﻳﺴﻪ ﻧﻤﻲﺗﻮاﻧﺪ ﻛﻢﺗﺮ از زﻣﺎن n log nﻳﻚ درﺧﺖ Heapرا ﺑﻪ درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ BST ﺗﺒﺪﻳﻞ ﻛﻨﺪ ،ﺑﻪ اﻟﮕـﻮرﻳﺘﻢ زﻳﺮ دﻗﺖ ﻛﻨﻴﺪ: ورودي :آراﻳﻪ دﻟﺨﻮاه ÷ (1ﺳﺎﺧﺘﻦ درﺧﺖ Heapاز آراﻳﻪ داده ﺷﺪه ﺑﻪ ﺻﻮرت درﺟﺎ (2ﺗﺒﺪﻳﻞ درﺧﺖ Heapﺑﻪ درﺧﺖ BST (3ﭘﻴﻤﺎﻳﺶ ﻣﻴﺎنﺗﺮﺗﻴﺐ LVR ﺑﺮاي درﺧﺖ BST ﺧﺮوﺟﻲ :آراﻳﻪ ﻣﺮﺗﺐ On ؟ On HEAP 49 اﮔﺮ ﺗﺒﺪﻳﻞ درﺧﺖ Heapﺑﻪ درﺧﺖ BSTﻛﻢﺗﺮ از زﻣﺎن n log nاﻧﺠﺎم ﺷﻮد .آﻧﮕﺎه ﻣﺎ ﺗﻮاﻧﺴﺘﻪاﻳﻢ ﻛﻢﺗﺮ از زﻣـﺎن n log nﻳـﻚ آراﻳـﻪ دﻟﺨـﻮاه را ﻣﺮﺗـﺐ ﻛﻨﻴﻢ در ﺣﺎﻟﻴﻜﻪ ﺣﺪاﻗﻞ زﻣﺎن ﻣﺮﺗﺐﺳﺎزي ﺑﺮاي اﻟﮕﻮرﻳﺘﻢﻫﺎي ﻣﺒﺘﻨﻲ ﺑﺮ ﻣﻘﺎﻳﺴﻪ ﻣﺎﻧﻨﺪ ... ، merge sort ، Quick sort :ﺑﺮاﺑﺮ ﺑﺎ n log nاﺳﺖ. .37ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. ﺑﺎ اﻳﻦ ﭘﻴﺶ ﻓﺮض ﻛﻪ ﺻﻒ اوﻟﻮﻳﺖ ﻣﺎﻛﺰﻳﻤﻢ ﺑﺎ ﻳﻚ maxheapﭘﻴﺎده ﺳﺎزي ﺷﺪه ﺑﺎﺷﺪ ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ ﻋﻤﻠﻴﺎت ﻣﺨﺘﻠﻒ ﺑﻪ ﺷﺮح زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد: ﻋﻤﻠﮕﺮ »ﭘﻴﺪا ﻛﺮدن ﻣﺎﻛﺰﻳﻤﻢ« داراي ﭘﻴﭽﻴﺪﮔﻲ O 1اﺳﺖ .ﭼﺮاﻛﻪ ﮔﺮه ﻣﻮرد ﻧﻈﺮ در رﻳﺸﻪ اﺳﺖ. ﻋﻤﻠﮕﺮ »اﺿﺎﻓﻪ ﻛﺮدن« ﻳﻚ ﻗﻠﻢ ﺟﺪﻳﺪ ﺑﻪ ﺻﻒ اوﻟﻮﻳﺖ داراي ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ O lg n اﺳﺖ. ﻋﻤﻠﮕﺮ »ﺣﺬف« ﻳﻚ ﻗﻠﻢ از ﺻﻒ اوﻟﻮﻳﺖ داراي ﭘﻴﭽﻴﺪﮔﻲ زﻣﺎﻧﻲ O lg n اﺳﺖ..38ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. در ﻳﻚ درﺧﺖ heapﺑﺎ nﻋﻨﺼﺮ ﻫﺮ ﻳﻚ از ﻋﻤﻠﻴﺎت زﻳﺮ در زﻣﺎن O lg n اﻧﺠﺎم ﻣﻲ ﺷﻮد: ﺣﺬف ﻳﻚ ﻋﻨﺼﺮ دﻟﺨﻮاه ،درج ﻳﻚ ﻋﻨﺼﺮ دﻟﺨﻮاه ،ﻛﺎﻫﺶ ﻣﻘﺪار ﻳﻚ ﻋﻨﺼﺮ ،اﻓﺰاﻳﺶ ﻣﻘﺪار ﻳﻚ ﻋﻨﺼﺮ ،ﺗﻐﻴﻴﺮ ﻣﻘﺪار ﻳﻚ ﻋﻨﺼﺮ .39ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. روش اول: ﻳﺎ ﻋﻨﺎﺻﺮ را ﻳﻜﻲ ﻳﻜﻲ از heapﺑﺎ nﻋﻨﺼﺮ ﺧﺎرج ﻛﺮده و در heapﺑﺎ mﻋﻨﺼﺮ درج ﻣﻲﻛﻨﻴﻢ ،زﻣﺎن ﻻزم O m lg m m lg n m lg mn ﺧﻮاﻫﺪ ﺷﺪ. ﻳﺎ ﻋﻨﺎﺻﺮ را ﻳﻜﻲ ﻳﻜﻲ از heapﺑﺎ mﻋﻨﺼﺮ ﺧﺎرج ﻛﺮده و در heapﺑﺎ nﻋﻨﺼﺮ درج ﻣﻲﻛﻨﻴﻢ ،زﻣﺎن ﻻزم O n lg n n lg m n lg mn ﺧﻮاﻫﺪ ﺷﺪ. روش دوم: ﻋﻨﺎﺻﺮ دو heapرا در آراﻳﻪ اي ﺑﻪ ﻃﻮل m+nدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ و اﻟﮕﻮرﻳﺘﻢ BUILD-MAX-HEAPرا ﺑﺮاي آن در زﻣﺎن O m nاﺟﺮا ﻣﻲ ﻛﻨﻴﻢ. .40ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. ﮔﺰﻳﻨﻪ :1در ﻳﻚ minheapﻣﺎﻛﺰﻳﻤﻢ اول)ﺑﺰرﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ( ﺣﺘﻤﺎ در ﻳﻜﻲ از ﺑﺮﮔﻬﺎ اﺳﺖ ﮔﺰﻳﻨﻪ :2در ﻳﻚ minheapﻣﻴﻨﻴﻤﻢ اول ﻫﻤﻮاره در رﻳﺸﻪ ﻗﺮار دارد اﻣﺎ ﻣﻴﻨﻴﻤﻢ ﺳﻮم ﻣﻤﻜﻦ اﺳﺖ ﻓﺮزﻧﺪ ﻣﻴﻨﻴﻤﻢ دوم ﺑﻮده وﻓﺮزﻧﺪ رﻳﺸﻪ ﻧﺒﺎﺷﺪ. ﮔﺰﻳﻨﻪ: 3درﻳﻚ minheapﻣﺎﻛﺰﻳﻤﻢ دوم ﻣﻤﻜﻦ اﺳﺖ واﻟﺪ ﻣﺎﻛﺰﻳﻤﻢ اول ﺑﻮد و ﺑﺮگ ﻧﺒﺎﺷﺪ. .41ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. اﮔﺮ ﭼﻪ ﺑﺮاي ادﻏﺎم دو ﻫﻴﭗ ﻛﺎﻓﻲ اﺳﺖ اﻟﮕﻮرﻳﺘﻢ BUILD-MAX-HEAPرا در زﻣﺎن O n n O n ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﻴﻢ اﻣﺎ از آﻧﺠﺎ ﻛﻪ آراﻳـﻪ ﻧﻬـﺎﻳﻲ ﺑﺎﻳﺪ ﻣﺮﺗﺐ ﺑﺎﺷﺪ ﺑﺎﻳﺪ از ﻳﻚ اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎزي ﻣﺎﻧﻨﺪ heapsortدر زﻣﺎن O n lg n ﺑﺮاي آن اﺳﺘﻔﺎده ﻛﻨﻴﻢ . .42ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﻫﻨﮕﺎم درج ﻋﻨﺼﺮ ﺟﺪﻳﺪ ﺑﻪ درﺧﺖ heapاﺑﺘﺪا ﮔﺮه ﺟﺪﻳﺪ ﺑﻪ اﻧﺘﻬﺎي درﺧﺖ اﺿﺎﻓﻪ ﺷﺪه ﺳﭙﺲ ﻣﺴﻴﺮ اﺟﺪاد ﺧﻮد ﺑﻄﻮل O lg n را ﺑﺮاي ﭘﻴﺪا ﻛﺮدن ﻣﻜـﺎن ﻣﻨﺎﺳﺐ ﺣﺪاﻛﺜﺮ ﺗﺎ رﻳﺸﻪ ﻃﻲ ﻣﻲ ﻛﻨﺪ ،در ﺻﻮرﺗﻴﻜﻪ ﺑﺮاي ﭘﻴﺪا ﻛﺮدن ﻣﻜﺎن ﻣﻨﺎﺳﺐ ﻋﻨﺼﺮ ﺟﺪﻳﺪ از ﺟﺴﺘﺠﻮي دودوﻳﻲ در ﻣﺴﻴﺮ اﺟﺪاد اﺳﺘﻔﺎده ﻛﻨﻴﻢ اﮔﺮﭼـﻪ ﺗﻌﺪاد ﻣﻘﺎﻳﺴﻪ ﻛﻤﺘﺮ ﻣﻲ ﺷﻮد O lg lg n اﻣﺎ از آﻧﺠﺎ ﻛﻪ ﺑﻌﺪ از ﭘﻴﺪا ﻛﺮدن ﻣﻜﺎن ﻣﻨﺎﺳﺐ ﺑﺎﻳﺪ ﺟﺎﺑﺠﺎﻳﻲ ﻻزم ﺗﺎ ﻣﺤﻞ ﻣﻮرد ﻧﻈﺮ )ﺣﺪاﻛﺜﺮ از رﻳﺸﻪ ﺗﺎ آﺧﺮﻳﻦ ﺑﺮگ( اﺗﻔﺎق ﺑﻴﺎﻓﺘﺪ زﻣﺎن اﻟﮕﻮرﻳﺘﻢ ﺗﻐﻴﻴﺮي ﻧﻜﺮده و ﻫﻤﺎن O lg n ﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ. .43ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. n 1 n اﺳﺖ از آﻧﺠﺎ ﻛﻪ ﻫﺮ درﺧﺖ heapﺑﺎ nﮔﺮه ﻳﻚ درﺧﺖ دودوﻳﻲ ﻛﺎﻣﻞ اﺳﺖ ،ﺑﻨﺎﺑﺮاﻳﻦ ﺗﻌﺪاد ﺑﺮﮔﻬﺎ در آن ﺑﺮاﺑﺮ ﺑﺎ 2 2 .44ﮔﺰﻳﻨﻪ 2درﺳﺖ اﺳﺖ. ﺑﻨﺎﺑﺮ اﻟﮕﻮرﻳﺘﻢ ﺑﺮاي ﺣﺬف ﻳﻚ ﮔﺮه دﻟﺨﻮاه اﺑﺘﺪا ﮔﺮه ﻣﻮرد ﻧﻈﺮ ﺑﺎ واﻟﺪ ﺧﻮدش ﻣﻘﺎﻳﺴﻪ ﻣﻲ ﺷﻮد در ﺻﻮرﺗﻴﻜﻪ ﻛﻮﭼﻜﺘﺮ ﺑﺎﺷﺪ در ﻣـﺴﻴﺮ اﺟـﺪاد ﺑـﻪ ﺳـﻤﺖ ﺑـﺎﻻو درﺻﻮرﺗﻴﻜﻪ ﺑﺰرﮔﺘﺮ ﺑﺎﺷﺪ ﺑﻪ ﻛﻤﻚ اﻟﮕﻮرﻳﺘﻢ heapifyدر ﻣﺴﻴﺮ ﻓﺮزﻧﺪاﻧﺶ ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮد از آﻧﺠﺎ ﻛﻪ ﻋﻨﺼﺮ ﺑﺎ اﻧﺪﻳﺲ 10ﺑﻪ رﻳﺸﻪ ﻧﺰدﻳﻚ اﺳﺖ در ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺑﻌﺪ از ﻣﻘﺎﻳﺴﻪ ﺑﺎ واﻟﺪش ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ ﻣﻨﺘﻘﻞ ﺷﺪه و در ﻣﺠﻤﻮع ﺑﺎ ﺣﺪاﻛﺜﺮ 7ﻣﻘﺎﻳﺴﻪ ﺑﻪ ﻳﻜﻲ از ﺑﺮﮔﻬﺎ ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮد ﺷﻜﻞ زﻳﺮ ﻧﺸﺎن دﻫﻨﺪه ﭼﮕﻮﻧﮕﻲ اﻳﻦ وﺿﻌﻴﺖ ﺧﻮاﻫﺪ ﺑﻮد: 50 ﺳﺎﺧﺘﻤﺎن داده .45ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. Kاُﻣﻴﻦ ﻛﻮﭼﻜﺘﺮ در ﻳﻚ minheapﻳﺎ kاُﻣﻴﻦ ﺑﺰرﮔﺘﺮ در ﻳﻚ maxheapﺑﺎ nﻋﻨﺼﺮ را ﻣـﻲ ﺗـﻮان ﺑـﺼﻮرت ﻛـﺎرا در زﻣـﺎن O k lg k ﭘﻴـﺪا ﻛـﺮد ).ﺑـﺮاي ﺗﻮﺿﻴﺤﺎت ﺑﻴﺸﺘﺮ ﺑﻪ ﻣﺘﻦ درس ﻣﺮاﺟﻌﻪ ﺷﻮد( .46ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. درﺻﻮرﺗﻴﻜﻪ ﻋﻨﺎﺻﺮ ورودي ﻳﻚ آراﻳﻪ ﺑﺎ ﻛﻠﻴﺪﻫﺎي ﻣﺴﺎوي ﺑﺎﺷﺪ آﻧﮕﺎه ﻫﺮﻳﻚ از n 1ﺑﺎر ﻓﺮﺧﻮاﻧﻲ روال MAX HEAPIFYﺑـﺮاي رﻳـﺸﻪ زﻣـﺎﻧﻲ ﺑـﻪ ﺟﺎي زﻣﺎن ، O lg n زﻣﺎﻧﻲ ﻣﻌﺎدل ﺑﺎ O 1را ﺻﺮف ﻣﻲﻛﻨﺪ زﻳﺮا ﻫﻴﭻ اﻧﺘﻘﺎﻟﻲ ﺑﻪ ﺳﻤﺖ ﭘﺎﻳﻴﻦ اﻧﺠﺎم ﻧﻤﻲ ﺷﻮد و درﻧﻬﺎﻳـﺖ زﻣـﺎن اﺟـﺮاي ﻣﺮﺗـﺐﺳـﺎزي ﺑﺼﻮرت زﻳﺮ ﺑﺮاﺑﺮ ﺑﺎ O n ﺧﻮاﻫﺪ ﺑﻮد: O1 O n n 1 O lg n O n .47ﮔﺰﻳﻨﻪ 3درﺳﺖ اﺳﺖ. در ﺻﻮرﺗﻴﻜﻪ ﺑﻌﺪ از اﻧﺠﺎم ﻫﻤﻪ ﺗﻐﻴﻴﺮات ،اﻟﮕﻮرﻳﺘﻢ ) BUILD-MAX-HEAPﺗﺒﺪﻳﻞ آرﻳﻪ ﺑﻪ ﻫﻴﭗ ﺑﺼﻮرت درﺟﺎ( را ﻓﺮاﺧﻮاﻧﻲ ﻛﻨﻴﻢ ،در زﻣـﺎن ) O(nﺗﻤـﺎم ﺗﻐﻴﻴﺮات اﻧﺠﺎم ﺷﺪه و درﺧﺖ ﺑﺼﻮرت ﻫﻴﭗ ﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ .48ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. k 1 اوﻟﻴﻦ اﻧﺘﻘﺎل ﻫﺰﻳﻨﻪ اي ﻣﻌﺎدل ﺑﺎ 2را دارد ﺗﺎ اﻧﺘﻘﺎل iاُم ﻛﻪ ﻫﺰﻳﻨﻪ اي ﻣﻌﺎدل ﺑﺎ ﻛﻞ ﻫﺰﻳﻨﻪ ﻫﺎي اﻧﺘﻘﺎل ﺑﺮاﺑﺮ ﺧﻮاﻫﺪ ﺑﻮد ﺑﺎ : k i 2را ﺧﻮاﻫﺪ داﺷﺖ و ﻫﻤﻴﻨﻄﻮر ﺗﺎ اﻧﺘﻘﺎل آﺧﺮ ...ﺑﻨـﺎﺑﺮاﻳﻦ ﻣﺠﻤـﻮع k 1 2 j 20 21 ... 2k 2 2k 1 2k 1 2k n j0 .49ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. n در ﻳﻚ heapﺑﺎ nﻋﻨﺼﺮ اﮔﺮ اﻟﮕﻮرﻳﺘﻢ heapifyﺑﺮاي ﻋﻨﺼﺮي ﺑﺎ اﻧﺪﻳﺲ iﻛﻪ در ﻋﻤﻖ lg i و ارﺗﻔﺎع lg ﻗﺮار دارد اﺟﺮا ﺷﻮد ،ﺣـﺪاﻛﺜﺮ ﺗﻌـﺪاد i n ﻣﻘﺎﻳﺴﻪ ﺑﺮاي ﮔﻨﺠﺎﻧﺪن اﻳﻦ ﻋﻨﺼﺮ در ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ زﻣﺎﻧﻴﻜﻪ ﺗﺎ ﭘﺎﻳﻴﻦ ﺗﺮﻳﻦ ﺑﺮگ اداﻣﻪ ﭘﻴﺪا ﻛﻨﺪ ﺣﺪاﻛﺜﺮ 2 lg ﺧﻮاﻫﺪ ﺑﻮد).ﻇﺎﻫﺮا ﻣﻨﻈﻮر ﻃﺮاح ﺳـﻮال از i ﻋﻤﻖ ﮔﺮه ﻫﻤﺎن ارﺗﻔﺎع ﮔﺮه ﺑﻮده اﺳﺖ !!( .50ﮔﺰﻳﻨﻪ 1درﺳﺖ اﺳﺖ. ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ وﺿﻌﻴﺖ ﮔﺮه ﻫﺎي درﺧﺖ ﺑﻪ ﺻﻮرت زﻳﺮ ﻓﻘﻂ ﮔﺰﻳﻨﻪ 1ﻣﻲ ﺗﻮاﻧﺪ ﺷﺮاﻳﻂ درﺧﺖ heapرا ﺑﺮآورده ﻛﻨﺪ HEAP 51 .51ﮔﺰﻳﻨﻪ 4درﺳﺖ اﺳﺖ. در ﻫﺮ درﺧﺖ Minheapﺑﺎ nﻋﺪد ﻣﺘﻤﺎﻳﺰ ﻫﻤﻮاره ﻣﻲﺗﻮاﻧﻴﻢ iاﻣﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ را از ﺳﻄﺢ دوم ﺗـﺎ ﺳـﻄﺢ iام در ﺧﺎﻧـﻪﻫـﺎي 2ﺗـﺎ 2i 1ﻗـﺮار دﻫﻴﻢ .ﺑﻨﺎﺑﺮاﻳﻦ: ﭘﻨﺠﻤﻴﻦ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ ﻣﻲﺗﻮاﻧﺪ در ﺧﺎﻧﻪﻫﺎي 2ﺗﺎ 25 1از ﺳﻄﺢ دوم ﺗﺎ ﺳﻄﺢ ﭘﻨﺠﻢ ﻗﺮار ﮔﻴﺮد ﻛﻪ ﺧﺎﻧﻪﻫﺎي 2و 3در ﺳﻄﺢ دوم ،ﺧﺎﻧﻪﻫﺎي 4ﺗـﺎ 7در ﺳﻄﺢ ﺳﻮم ،ﺧﺎﻧﻪ ﻫﺎي 8ﺗﺎ 15در ﺳﻄﺢ ﭼﻬﺎرم و ﺧﺎﻧﻪﻫﺎي 16ﺗﺎ 31در ﺳﻄﺢ ﭘﻨﺠﻢ ﻗﺮار دارد .در ﺣﺎﻟﻴﻜﻪ ﺧﺎﻧﻪ ﻫﺎي 32ﺗﺎ 63در ﺳﻄﺢ ﺷـﺸﻢ ﻗﺮار دارد ﺑﻨﺎﺑﺮاﻳﻦ ﭘﻨﺠﻤﻴﻦ ﻛﻮﭼﻜﺘﺮﺗﺮﻳﻦ ﻧﻤﻲﺗﻮاﻧﺪ در اﻳﻦ ﺧﺎﻧﻪﻫﺎ ﻗﺮار ﮔﻴﺮد. دﻗﺖ ﻛﻨﻴﺪ :ﻇﺎﻫﺮا ﻃﺮاح ﺳﻮال در ﮔﺰﻳﻨﻪ 1ﻣﺮﺗﻜﺐ اﺷﺘﺒﺎه ﺳﻬﻮي ﺷﺪه اﺳﺖ ﭼﺮاﻛﻪ ﺧﺎﻧﻪ ﺷﻤﺎره 1ﻣﻨﺤﺼﺮا ﻣﺮﺑﻮط ﺑﻪ اوﻟﻴﻦ ﻛﻮﭼﻜﺘﺮ )ﻋﻨﺼﺮ ﻣﻴﻨﻴﻤﻢ( درﺧﺖ ﻣﻲ ﺑﺎﺷﺪ .ﺑﻨﺎﺑﺮاﻳﻦ اﺣﺘﻤﺎﻻ ﻣﻨﻈﻮر ﻃﺮاح ﺳﻮال در اﻳﻦ ﮔﺰﻳﻨﻪ ﺧﺎﻧﻪ ﻫﺎي 2ﺗﺎ 5ﺑﻮده اﺳﺖ.