ﺳﺎﺧﺘﻤﺎن داده ﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢ ﻧﯿﻢﺳﺎل دوم ٩۵-٩۴ ﻣﺪرس :ﻋﻠ ﺷﺮﯾﻔ زارﭼ داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﭘﺸﺘﻪ و ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی ﺗﻤﺮﯾﻦ ﻧﻈﺮی ﭼﻬﺎرم ﭘﺎرﺳﻮآ ﺧﻮرﺳﻨﺪ رﺣﯿﻢ زاده ﻣﺴﺌﻠﻪی .١ﮐﺎﻣﭙﯿﻮﺗﺮ دو ﭘﺮدازه ای ﮐﺎﻣﭙﯿﻮﺗﺮی دارﯾﻢ ﮐﻪ از ﺳﯿﺴﺘﻢ ﻋﺎﻣﻞ ( Double DOS ) DDOSاﺳﺘﻔﺎده ﻣ ﮐﻨﺪ .اﯾﻦ ﺳﯿﺴﺘﻢ ﻋﺎﻣﻞ ﻧﺴﺨﻪ ﺑﻬﺒﻮد ﯾﺎﻓﺘﻪ DOSاﺳﺖ ﮐﻪ ﺗﻮاﻧﺎﯾﯽ اﺟﺮای دو ﭘﺮدازه را ﺑﻪ ﺻﻮرت ﻫﻤﺰﻣﺎن ١دارد DDOS .ﺣﺎﻓﻈﻪ RAMرا ﺑﻪ دو ﭘﺸﺘﻪ ﺗﻘﺴﯿﻢ ﻣ ﮐﻨﺪ ﮐﻪ ﯾ از اﺑﺘﺪای ﺣﺎﻓﻈﻪ و دﯾ ﺮی از اﻧﺘﻬﺎی آن ﺷﺮوع ﻣ ﺷﻮد و ﻫﺮﮐﺪام ﺑﺮای ﻧﮕﻬﺪاری وﺿﻌﯿﺖ ﯾ از ﭘﺮدازه ﻫﺎ اﺳﺘﻔﺎده ﻣ ﺷﻮد .اﮔﺮ ﺣﺎﻓﻈﻪ RAMرا ﯾ آراﯾﻪ ﻓﺮض ﮐﻨﯿﻢ ،اﻟ ﻮرﯾﺘﻤ ﺑﺮای ﻣﺪﯾﺮﯾﺖ دو ﭘﺸﺘﻪ ﻓﻮق اراﺋﻪ دﻫﯿﺪ ﺑﻪ ﻃﻮرﯾ ﻪ ﻫﯿﭻ ﮐﺪام از ﭘﺸﺘﻪ ﻫﺎ ﺟﺰ در ﺣﺎﻟﺘ ﮐﻪ ﻣﺠﻤﻮﻋﻪ ﺗﻌﺪاد ﻋﻨﺎﺻﺮ آﻧﻬﺎ از ﻇﺮﻓﯿﺖ ﺣﺎﻓﻈﻪ ﺗﺠﺎوز ﮐﻨﺪ Overflowﻧﮑﻨﻨﺪ. ﺣﻞ .در اﺑﺘﺪا اﻧﺪازه ﯾ از ﭘﺸﺘﻪ ﻫﺎ را ﯾ و اﻧﺪازه دﯾ ﺮی را n − ١ﻓﺮض ﮐﻨﯿﺪ .ﺑﺎ اﺳﺘﻔﺎده از ﯾ اﺷﺎره ﮔﺮ ﮐﻪ ﺑﻪ ▷ ﺧﺎﻧﻪ ﺑﺎﻻﯾﯽ ﭘﺸﺘﻪ ﮐﻮﭼ ﺘﺮ اﺷﺎره ﻣ ﮐﻨﺪ و ﺗﻐﯿﯿﺮ ﻣﻘﺪار آن ،ﭘﺸﺘﻪ ﮐﻮﭼ ﺘﺮ ﻣ ﺗﻮاﻧﺪ ﺑﺮ ﺣﺴﺐ ﻧﯿﺎز رﺷﺪ ﮐﻨﺪ. ﻣﺴﺌﻠﻪی Queue .٢ Queueداده ﺳﺎﺧﺘﺎر ﺳﺎده اﯾﺴﺖ ﮐﻪ اﻋﻤﺎل زﯾﺮ را ﭘﺸﺘﯿﺒﺎﻧ ﻣ ﮐﻨﺪ : • : Enqueueاﺿﺎﻓﻪ ﮐﺮدن ﯾ • : Dequeueﺣﺬف ﯾ ﻋﻨﺼﺮ ﺑﻪ اﺑﺘﺪای ﺻﻒ ﻋﻨﺼﺮ از اﻧﺘﻬﺎی ﺻﻒ ﺑﺎ اﺳﺘﻔﺎده از داده ﺳﺎﺧﺘﺎر ﭘﺸﺘﻪ Queueرا ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ .ﺗﻨﻬﺎ اﺳﺘﻔﺎده از ﻋﻤﻠﯿﺎت ﻫﺎی اﺳﺘﺎﻧﺪارد Pop ، Push و isEmptyدر ﭘﺸﺘﻪ اﻣ ﺎن ﭘﺬﯾﺮ اﺳﺖ. ﺣﻞ .اﯾﻦ ﭘﯿﺎده ﺳﺎزی ﺑﻪ ﮐﻤ دو ﭘﺸﺘﻪ اﻣ ﺎن ﭘﺬﯾﺮ اﺳﺖ .ﻓﺮض ﮐﻨﯿﻢ ﺑﺎﻻی ﭘﺸﺘﻪ ﻫﻤﺎن اﺑﺘﺪای ﺻﻒ و اﻧﺘﻬﺎی ﭘﺸﺘﻪ ﻧﯿﺰ اﻧﺘﻬﺎی ﺻﻒ ﺑﺎﺷﺪ .ﻋﻤﻠﯿﺎت Enqueueﻣﻌﺎدل ﻫﻤﺎن Pushﺧﻮاﻫﺪ ﺑﻮد .ﺑﺮای Dequeueﺑﺎﯾﺪ ﺗﻤﺎم ﻋﻨﺎﺻﺮ ﭘﺸﺘﻪ اﺻﻠ را Popﮐﺮد و در ﭘﺸﺘﻪ ﺛﺎﻧﻮﯾﻪ Pushﮐﺮد .ﺳﭙﺲ اوﻟﯿﻦ ﻋﻨﺼﺮ ﭘﺸﺘﻪ ﺛﺎﻧﻮﯾﻪ ﮐﻪ ﻫﻤﺎن آﺧﺮﯾﻦ ﻋﻨﺼﺮ ﭘﺸﺘﻪ اﺻﻠ ▷ اﺳﺖ را Popﻣ ﮐﻨﯿﻢ و ﺑﺎﻗ ﻋﻨﺎﺻﺮ را ﺑﻪ ﭘﺸﺘﻪ اﺻﻠ Pushﻣ ﮐﻨﯿﻢ. ﻣﺴﺌﻠﻪی .٣ﭘﺸﺘﻪ ﭘﯿﺸﺮﻓﺘﻪ داده ﺳﺎﺧﺘﺎر ﭘﺸﺘﻪ را ﺑﻪ ﺷ ﻠ ﮔﺴﺘﺮش دﻫﯿﺪ ﮐﻪ اﻣ ﺎن ﺑﺮﮔﺮداﻧﺪن ﻋﻨﺼﺮ ﮐﻤﯿﻨﻪ را در زﻣﺎن ) O(1داﺷﺘﻪ ﺑﺎﺷﺪ .ﻋﻤﻠﯿﺎت ﻫﺎی اﺳﺘﺎﻧﺪارد Pushو Popﺑﺎﯾﺪ ﻫﻤﭽﻨﺎن در زﻣﺎن ) O(1ﻗﺎﺑﻞ اﻧﺠﺎم ﺑﺎﺷﻨﺪ. ﺣﻞ .ﻫﺮ ﻋﻨﺼﺮ ﭘﺸﺘﻪ ﻣ ﺗﻮاﻧﺪ ﻣﻘﺪار ﮐﻤﯿﻨﻪ در ﻋﻨﺎﺻﺮ زﯾﺮﯾﻦ ﺧﻮد را ﻧﮕﺎه دارد .ﺑﻪ اﺳﺘﻘﺮا ﻋﻨﺼﺮ ﺑﺎﻻﯾﯽ ﭘﺸﺘﻪ ﮐﻤﯿﻨﻪ ﺗﻤﺎم ﻋﻨﺎﺻﺮ را ﻣ داﻧﺪ .اﯾﻦ ﻣﻘﺪار را ﻣ ﺗﻮان ﻫﻨﮕﺎم Pushﺑﺮای ﻫﺮ ﻋﻨﺼﺮ ﻣﺤﺎﺳﺒﻪ ﮐﺮد ﮐﻪ ﺑﺮاﺑﺮ ﮐﻤﯿﻨﻪ ﻣﻘﺪار ﺧﻮد ▷ آن ﻋﻨﺼﺮ و ﻣﻘﺪار ﮐﻤﯿﻨﻪ ﻋﻨﺎﺻﺮ زﯾﺮﯾﻦ ﺑﺮای Headﻗﺒﻠ ﭘﺸﺘﻪ اﺳﺖ. ﻣﺴﺌﻠﻪی .۴ادﻏﺎم ﭘﺸﺘﻪ و ﺻﻒ Concurrent١ ١ ﺑﺎ ادﻏﺎم داده ﺳﺎﺧﺘﺎر ﻫﺎی Stackو Queueداده ﺳﺎﺧﺘﺎر ﻣﺠﺎزی Leverageرا ﺳﺎﺧﺘﻪ اﯾﻢ .اﯾﻦ داده ﺳﺎﺧﺘﺎر اﻋﻤﺎل زﯾﺮ را ﭘﺸﺘﯿﺒﺎﻧ ﻣ ﮐﻨﺪ : • : Popﺣﺬف ﯾ ﻋﻨﺼﺮ از اﺑﺘﺪای ﺳﻤﺖ راﺳﺖ ﻟﯿﺴﺖ • : Enqueueاﺿﺎﻓﻪ ﮐﺮدن ﯾ • : Dequeueﺣﺬف ﯾ ﻋﻨﺼﺮ ﺑﻪ اﺑﺘﺪای ﺳﻤﺖ ﺳﻤﺖ راﺳﺖ ﻟﯿﺴﺖ ﻋﻨﺼﺮ از اﻧﺘﻬﺎی ﭼﭗ ﻟﯿﺴﺖ ﺑﺎ اﺳﺘﻔﺎده از ٣ﭘﺸﺘﻪ و ) O(1ﺣﺎﻓﻈﻪ اﺿﺎﻓ داده ﺳﺎﺧﺘﺎر ﻓﻮق را ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ ﺑﻪ ﻃﻮری ﮐﻪ اﻋﻤﺎل ﻓﻮق در زﻣﺎن ﺳﺮﺷ ﻦ ) O(1ﻗﺎﺑﻞ اﻧﺠﺎم ﺑﺎﺷﻨﺪ .ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﺗﻨﻬﺎ اﻋﻤﺎل ﻣﺠﺎز روی ﭘﺸﺘﻪ ﻫﺎ ﻫﻤﺎن Pushو Popﻋﺎدی ﻫﺴﺘﻨﺪ. ﺣﻞ .ﺳﻮال ﺳﺨﺘ اﺳﺖ (: ﺑﺮای اﯾﻦ داده ﺳﺎﺧﺘﺎر از ﭘﺸﺘﻪ ای از ﭘﺸﺘﻪ ﻫﺎی اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﻢ .در ﺣﻘﯿﻘﺖ ٣اﺷﺎره ﮔﺮ دارﯾﻢ ﮐﻪ ﻫﺮ ﮐﺪام ﺑﻪ ﯾ داده ﺳﺎﺧﺘﺎر ﭘﺸﺘﻪ اﺷﺎره ﻣ ﮐﻨﻨﺪ .اﺷﺎره ﮔﺮ Stack١ﭘﺸﺘﻪ اﺻﻠ اﺳﺖ Stack٢ .آﺧﺮﯾﻦ ﻋﻨﺼﺮ ﭘﺸﺘﻪ اﺻﻠ اﺳﺖ ﮐﻪ ﺧﻮد ﯾ ﭘﺸﺘﻪ ﺗﮏ ﻋﻨﺼﺮی اﺳﺖ .ﻧﻬﺎﯾﺘﺎ Stack٣ﻫﻢ ﻋﻨﺼﺮ ﺑﺎﻻﯾﯽ Stack٢اﺳﺖ ﮐﻪ ﺧﻮد ﭘﺸﺘﻪ ای از ﭘﺸﺘﻪ ﻫﺎی ﺑﺎ ﺳﺎﺧﺘﺎر ﻣﺸﺎﺑﻪ Stack١ اﺳﺖ .ﭘﺲ ﯾ داده ﺳﺎﺧﺘﺎر ﺑﺎزﮔﺸ دارﯾﻢ .ﺷﻤﺎی ﮐﻠ ﺑﻪ اﯾﻦ ﺗﺮﺗﯿﺐ اﺳﺖ: ﺣﺎل ﻋﻤﻠﯿﺎت ﻫﺎی ﺧﻮاﺳﺖ ﺷﺪه ﺑﻪ ﺷ ﻞ زﯾﺮ ﻗﺎﺑﻞ ﭘﯿﺎده ﺳﺎزی ﻫﺴﺘﻨﺪ. اﺑﺘﺪا آﻣﺎده ﺳﺎزی اوﻟﯿﻪ داده ﺳﺎﺧﺘﺎر: begin ; )>Leverage.new() : Stack1 = Stack.new(<Stack ; Stack2 = Stack1 end ﺣﺎل ﻋﻤﻠﯿﺎت Enqueueﺑﻪ ﺷ ﻞ زﯾﺮ ﻗﺎﺑﻞ ﭘﯿﺎده ﺳﺎزی اﺳﺖ. ﺗﮑﻪ ﮐﺪ زﯾﺮ ﻋﻨﺼﺮ ﺧﻮاﺳﺘﻪ ﺷﺪه را در Stack٢درج ﻣ ﮐﻨﺪ ،ﺳﭙﺲ ﭘﺸﺘﻪ ﺟﺪﯾﺪی روی آن Pushﻣ ﮐﻨﺪ و اﺷﺎره ﮔﺮ Stack٢را ﺑﻪ اﯾﻦ ﭘﺸﺘﻪ ﺗﻐﯿﯿﺮ ﻣ دﻫﺪ. ٢ begin ; )>enqueue(element): Stack3 = Stack.new(<Type of element ; )Stack3.push(element ; )Stack2.push(Stack3 ; )>Stack3 = Stack.new(<Stack ; )Stack2.push(Stack3 ; Stack2 = Stack3 end begin ; )(dequeue(): Stack3 = Stack1.pop ; )(Stack1 = Stack1.pop ; )(dequeue() = Stack1.pop ; Stack1 = Stack3 end ﺑﺮای Dequeueﺑﻪ اﯾﻦ ﺗﺮﺗﯿﺐ ﻋﻤﻞ ﻣ ﮐﻨﯿﻢ: اﯾﻦ روﯾﻪ اﺑﺘﺪا داﺧﻠ ﺗﺮﯾﻦ ﭘﺸﺘﻪ در Stack١را Popﻣ ﮐﻨﺪ ،ﺣﺎل در Stack١ﺗﻨﻬﺎ ﻫﻤﺎن آﺧﺮﯾﻦ ﻋﻨﺼﺮ ﺻﻒ ﺑﺎﻗ ﻣﺎﻧﺪه اﺳﺖ ﮐﻪ آن را Popﻣ ﮐﻨﯿﻢ و اﺷﺎره ﮔﺮ Stack١را ﺑﻪ ﭘﺸﺘﻪ Popﺷﺪه ﺑﺮ ﻣ ﮔﺮداﻧﯿﻢ ﮐﻪ از اﯾﻦ ﭘﺲ ﭘﺸﺘﻪ اﺻﻠ ﺧﻮاﻫﺪ ﺑﻮد. در ﺗﻤﺎم ﻋﻤﻠﯿﺎت ﻫﺎ ،اﺷﺎره ﮔﺮ Stack١ﺑﻪ ﺧﺎرﺟ ﺗﺮﯾﻦ ﭘﺸﺘﻪ اﺷﺎره ﻣ ﮐﻨﺪ. ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻮﺿﯿﺤﺎت ﻓﻮق Popرا )ﻣﻄﺎﺑﻖ ﺑﺎ ﺻﻮرت ﺗﻤﺮﯾﻦ( ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﺪ. ▷ ﻣﺴﺌﻠﻪی .۵ﻣﺎﺷﯿﻦ ﺟﺎﯾ ﺸﺖ ﺳﺎز ﺑﺮای ﺗﻮﻟﯿﺪ ﺟﺎﯾ ﺸﺖ ﻫﺎی ﻣﺠﻤﻮﻋﻪ ای از ﮐﺎراﮐﺘﺮﻫﺎ از ﻣﺎﺷﯿﻦ ﺳﺎﺧﺘﮕ Artemisاﺳﺘﻔﺎده ﻣ ﮐﻨﯿﻢ ﮐﻪ ﺑﻪ ﺷ ﻞ زﯾﺮ ﻋﻤﻞ ﻣ ﮐﻨﺪ: اﯾﻦ ﻣﺎﺷﯿﻦ ﯾ رﯾﻞ ورودی ،ﯾ رﯾﻞ ﺧﺮوﺟ و ﯾ رﯾﻞ اﺿﺎﻓ ﺑﺮای ذﺧﯿﺮه ﻣﯿﺎﻧ ﮐﺎراﮐﺘﺮﻫﺎ دارد .ﮐﺎراﮐﺘﺮی ﮐﻪ از ﺳﻤﺖ ﭼﭗ وارد ﻣﺎﺷﯿﻦ ﻣ ﺷﻮد ﻣ ﺗﻮاﻧﺪ ﻣﺴﺘﻘﯿﻢ از ﺳﻤﺖ راﺳﺖ ﺧﺎرج ﺷﻮد و ﯾﺎ وارد رﯾﻞ ﻣﯿﺎﻧ ﺷﻮد .رﯾﻞ ﻣﯿﺎﻧ ﻣﺎﻧﻨﺪ ﯾ ﭘﺸﺘﻪ ﻋﻤﻞ ﻣ ﮐﻨﺪ ﺑﻨﺎﺑﺮاﯾﻦ ﺗﻨﻬﺎ ﻋﻨﺼﺮ ﺑﺎﻻﯾﯽ آن ﻣ ﺗﻮاﻧﺪ ﺧﺎرج ﺷﻮد Artemis .ﻣﺠﻤﻮﻋﻪ ای از ﮐﺎراﮐﺘﺮﻫﺎ را ﺑﻪ ﻋﻨﻮان ورودی درﯾﺎﻓﺖ ﻣ ﮐﻨﺪ و ﺟﺎﯾ ﺸﺘ از آﻧﻬﺎ را ﺧﺮوﺟ ﻣ دﻫﺪ .ﺗﻤﺎم ﮐﺎراﮐﺘﺮﻫﺎی ورودی در ﺟﺎﯾ ﺸﺖ ﺧﺮوﺟ اﺳﺘﻔﺎده ﻣ ﺷﻮﻧﺪ و ﭘﺸﺘﻪ ﻣﯿﺎﻧ در ﻧﻬﺎﯾﺖ ﺧﺎﻟ ﺧﻮاﻫﺪ ﺑﻮد. دﻗﺖ ﮐﻨﯿﻢ ﮐﻪ ﻣﺎﺷﯿﻦ ﺗﻮﺻﯿﻒ ﺷﺪه ﻧﻤ ﺗﻮاﻧﺪ ﺗﻤﺎم ﺟﺎﯾ ﺸﺖ ﻫﺎی ﻣﻤ ﻦ را ﺗﻮﻟﯿﺪ ﮐﻨﺪ .ﺑﺮای ﻣﺜﺎل اﮔﺮ ﮐﺎراﮐﺘﺮ ﻫﺎی ورودی ) 8, 7, 6, 5, 4, 3, 2, 1ﮐﺎراﮐﺘﺮ ﻫﺎ از راﺳﺖ ﺑﻪ ﭼﭗ وارد ﻣﺎﺷﯿﻦ ﻣ ﺷﻮﻧﺪ( ﺑﺎﺷﺪ رﺷﺘﻪ 1, 5, 2, 6, 8, 7, 3, 4 )ﮐﺎراﮐﺘﺮ از ﭼﭗ ﺑﻪ راﺳﺖ از ﻣﺎﺷﯿﻦ ﺧﺎرج ﺷﺪه اﻧﺪ( ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟ ﻗﺎﺑﻞ ﺗﻮﻟﯿﺪ ﻧﯿﺴﺖ. ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺳﺎﺧﺘﺎر ﻓﻮق ﺑﻪ ﺳﻮاﻻت زﯾﺮ ﭘﺎﺳﺦ دﻫﯿﺪ : .١ﺗﻌﺪاد ﺟﺎﯾ ﺸﺖ ﻫﺎی ﻗﺎﺑﻞ ﺗﻮﻟﯿﺪ ﺑﺎ ﻣﺎﺷﯿﻦ Artemisﺑﺮای nﮐﺎراﮐﺘﺮ ورودی ﭼﻨﺪﺗﺎ اﺳﺖ ؟ ﻓﺮض ﮐﻨﯿﺪ ﮐﻪ ﮐﺎراﮐﺘﺮﻫﺎی ورودی ﻫﻤﻪ ﻣﺘﻤﺎﯾﺰ ﻫﺴﺘﻨﺪ .ﺑﺮای ﺳﺎدﮔ ﮐﺎر ﺳﻌ ﮐﻨﯿﺪ ﺑﺎ ﺗﺸ ﯿﻞ ﯾ راﺑﻄﻪ ﺑﺎزﮔﺸﺘ و ﺣﻞ آن ﺗﻌﺪاد ﺧﺮوﺟ ﻫﺎ را ﻣﺤﺎﺳﺒﻪ ﮐﻨﯿﺪ. .٢ﺷﺮط ﻻزم و ﮐﺎﻓ ﺑﺮای اﯾﻨﮑﻪ ﯾ دﻧﺒﺎﻟﻪ ﻗﺎﺑﻞ ﺗﻮﻟﯿﺪ ﺑﺎﺷﺪ ﭼﯿﺴﺖ ؟ .٣اﻟ ﻮرﯾﺘﻤ از ) O(nاراﺋﻪ دﻫﯿﺪ ﮐﻪ ﺑﺎ درﯾﺎﻓﺖ ﯾ رﺷﺘﻪ ورودی ﻗﺎﺑﻞ ﺗﻮﻟﯿﺪ ﺑﻮدن آن را ﺑﺮرﺳ ﮐﻨﺪ. ٣ ﺣﻞ .ﺗﻌﺪاد اﯾﻦ ﺟﺎﯾ ﺸﺖ ﻫﺎ ﻋﺪد ﮐﺎﺗﺎﻻن nام اﺳﺖ: ∑ Cn = ni=٠ Ci × Cn−i ﺳﻌ ﮐﻨﯿﺪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻧﻤﺎﯾﺶ ﻓﻮق ﺑﺮای اﯾﻦ اﻋﺪاد ،اﯾﻦ ﺧﺎﺻﯿﺖ را اﺛﺒﺎت ﮐﻨﯿﺪ. در ﺣﺎﻟﺖ ﮐﻠ دﻧﺒﺎﻟﻪ ﻫﺎﯾﯽ ﻗﺎﺑﻞ ﺗﻮﻟﯿﺪ ﻫﺴﺘﻨﺪ ﮐﻪ دارای اﻟ ﻮی ٢١٣ﻧﺒﺎﺷﻨﺪ) .ﺗﺮﺗﯿﺐ ورودی ﻫﺎ را ٣٢١ﺑ ﯿﺮﯾﺪ( ▷ ﻣﺴﺌﻠﻪی .۶ﺗﻮﻗﻒ ﻧﺎﭘﺬﯾﺮ ﺑﺮای آﻧﮑﻪ ﺛﺎﺑﺖ ﮐﻨﯿﻢ ﻫﯿﭻ ﭼﯿﺰ ﺟﻠﻮدار ﻣﺎ ﻧﯿﺴﺖ داده ﺳﺎﺧﺘﺎر Craterرا ﺑﻪ ﺷ ﻞ زﯾﺮ ﺗﻌﺮﯾﻒ ﻣ ﮐﻨﯿﻢ : ﯾ Craterﻣﺘﺸ ﻞ از ﺗﻌﺪاد ﻧﺎﻣﺘﻨﺎﻫ ﭘﺸﺘﻪ S0 , S1 , S2 ...اﺳﺖ ﮐﻪ ﭘﺸﺘﻪ iام ﺗﻮاﻧﺎﯾﯽ ذﺧﯿﺮه ﺣﺪاﮐﺜﺮ 3iﻋﻨﺼﺮ را دارد Push .و Popﻫﻤﻮاره از ﮐﻮﭼ ﺗﺮﯾﻦ ﭘﺸﺘﻪ ﯾﻌﻨ S0اﻧﺠﺎم ﻣ ﺷﻮد .ﻗﺒﻞ از آﻧﮑﻪ ﻋﻨﺼﺮ ﺟﺪﯾﺪی ﺑﻪ ﭘﺸﺘﻪ ﭘﺮ Siوارد ﺷﻮد ﺑﺎﯾﺪ ﺗﻤﺎم ﻋﻨﺎﺻﺮ Siرا Popﮐﻨﯿﻢ و ﺑﻪ ﭘﺸﺘﻪ Push Si+1ﮐﻨﯿﻢ )اﮔﺮ Si+1ﻫﻢ ﭘﺮ ﺑﺎﺷﺪ اﯾﻦ ﮐﺎر ﺑﻪ ﻃﻮر ﺑﺎزﮔﺸﺘ اداﻣﻪ ﭘﯿﺪا ﻣ ﮐﻨﺪ ﺗﺎ ﺑﻪ ﯾ ﭘﺸﺘﻪ ﺧﺎﻟ ﺑﺮﺳﯿﻢ( .ﺑﻪ ﻃﻮر ﻣﺸﺎﺑﻪ ﻗﺒﻞ از آﻧﮑﻪ ﯾ ﻋﻨﺼﺮ ﺑﺘﻮاﻧﺪ از ﭘﺸﺘﻪ ﺧﺎﻟ Si Popﺷﻮد ﺑﺎﯾﺪ اﺑﺘﺪا 3iﻋﻨﺼﺮ از ﭘﺸﺘﻪ Pop Si+1ﮐﻨﯿﻢ و آﻧﻬﺎ را در Push Siﮐﻨﯿﻢ )اﮔﺮ Si+1ﺧﺎﻟ ﺑﺎﺷﺪ اﺑﺘﺪا ﺑﺎﯾﺪ آن را ﺑﺎ si+1ﻋﻨﺼﺮ از Si+2ﭘﺮ ﮐﻨﯿﻢ(. ﺣﺎل ﺑﻪ ﺳﻮاﻻت زﯾﺮ در ﻣﻮرد داده ﺳﺎﺧﺘﺎر Craterﭘﺎﺳﺦ دﻫﯿﺪ : • زﻣﺎن ﻣﻮرد ﻧﯿﺎز ﺑﺮای Pushﮐﺮدن ﯾ ﮐﻨﯿﺪ. ﻋﻨﺼﺮ ﺟﺪﯾﺪ ﺑﻪ ﯾ Craterﺑﺎ nﻋﻨﺼﺮ را در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ ﻣﺤﺎﺳﺒﻪ • ﻧﺸﺎن دﻫﯿﺪ ﮐﻪ اﮔﺮ ﻫﯿﭻ ﮔﺎه ﻋﻤﻞ Popاﻧﺠﺎم ﻧﺸﻮد ﻫﺰﯾﻨﻪ ﺳﺮﺷ ﻦ Pushﮐﺮدن ﯾ ﺣﺎوی nﻋﻨﺼﺮ از ) O(log nاﺳﺖ. ﻋﻨﺼﺮ ﺟﺪﯾﺪ ﺑﻪ Crater • ﻧﺸﺎن دﻫﯿﺪ ﮐﻪ ﺑﺮای ﻫﺮ ﺗﺮﮐﯿﺒﯽ از اﻋﻤﺎل Pushو Popزﻣﺎن ﺳﺮﺷ ﻦ ﻫﺮ ﻋﻤﻠﯿﺎت از ) O(log nﺧﻮاﻫﺪ ﺑﻮد. ﺣﻞ .ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ زﻣﺎﻧ اﺳﺖ ﮐﻪ ﺗﻤﺎم ﭘﺸﺘﻪ ﻫﺎی ﻣﻮﺟﻮد ﭘﺮ ﺑﺎﺷﻨﺪ و ﺑﺮای ﺟﺎ ﺑﺎز ﮐﺮدن ﻧﯿﺎز ﺑﺎﺷﺪ ﺗﻤﺎم ﭘﺸﺘﻪ ﻫﺎ ﺑﻪ ﭘﺸﺘﻪ ﺑﻌﺪی ﻣﻨﺘﻘﻞ ﺷﻮﻧﺪ .ﮐﻪ از ) O(nﺧﻮاﻫﺪ ﺑﻮد. ﻓﺮض ﮐﻨﯿﻢ داده ﺳﺎﺧﺘﺎر ﻣﺎ در اﺑﺘﺪا ﺧﺎﻟ ﺑﺎﺷﺪ .ﺳﭙﺲ nﻋﻨﺼﺮ ﺑﻪ ﺗﺮﺗﯿﺐ در آن pushﻣ ﮐﻨﯿﻢ .ﻣﺸﺎﻫﺪه ﻣ ﺷﻮد ﮐﻪ ﺗﻌﺪاد ﭘﺸﺘﻪ ﻫﺎ ﺣﺪاﮐﺜﺮ log٣ nاﺳﺖ .ﺑﻨﺎﺑﺮاﯾﻦ ﺣﺪاﮐﺜﺮ log٣ nﺑﺎر ﺗﻤﺎم ﭘﺸﺘﻪ ﻫﺎ ﭘﺮ ﺑﻮده اﻧﺪ و ﻧﯿﺎز ﺑﻪ ﺣﺮﮐﺖ دادن ﺗﻤﺎم ﻋﻨﺎﺻﺮ ﺑﻮده اﺳﺖ .ﻣ ﺗﻮان ﻧﺸﺎن داد ﻫﺰﯾﻨﻪ ﺳﺮﺷ ﻦ ﺑﺮای ﺳﺎﯾﺮ ﻣﻮارد ﻣﻘﺪاری ﺛﺎﺑﺖ اﺳﺖ .ﺑﻪ اﯾﻦ ﻣﻨﻈﻮر nرا ﻣﻘﺪاری ▷ ﺑﻪ ﺷ ﻞ ٣٠ + ٣١ + ... + ٣kﺑ ﯿﺮﯾﺪ .ﺑﻨﺎﺑﺮاﯾﻦ ﻫﺰﯾﻨﻪ ﺳﺮﺷ ﻦ ﮐﻠ ﻟ ﺎرﯾﺘﻤ ﻣ ﺷﻮد. ﻣﺴﺌﻠﻪی .٧ﻟﯿﺴﺖ دور دار اﮔﺮ در ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی ﻟﻮپ اﯾﺠﺎد ﺷﻮد ﺑﻪ ﺳﺎﺧﺘﺎر ﺣﺎﺻﻞ Circular Linked Listاﺗﻼق ﻣ ﺷﻮد .ﻟﻮپ زﻣﺎﻧ اﯾﺠﺎد ﻣ ﺷﻮد ﮐﻪ اﺷﺎره ﮔﺮ nextﯾ ﻋﻨﺼﺮ ﺑﻪ ﻋﻨﺼﺮی ﮐﻪ ﻗﺒﻼ در ﻟﯿﺴﺖ آﻣﺪه اﺳﺖ اﺷﺎره ﮐﻨﺪ .اﻟ ﻮرﯾﺘﻤ ﺑﺎ زﻣﺎن اﺟﺮای ) O(nاراﺋﻪ دﻫﯿﺪ ﮐﻪ وﺟﻮد ﻟﻮپ را در ﯾ ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی ﺗﺸﺨﯿﺺ دﻫﺪ. ﺣﻞ .اﯾﻦ ﺳﻮال ﺑﺎ اﺳﺘﻔﺎده از Hashدر زﻣﺎن ﺧﻄ ﻗﺎﺑﻞ ﺣﻞ اﺳﺖ .ﮐﺎﻓ اﺳﺖ ﯾ ﺗﺎﺑﻊ در ﻫﻢ ﺳﺎزی روی ﻋﻨﺎﺻﺮ ﻟﯿﺴﺖ اﻋﻤﺎل ﮐﻨﯿﺪ و ﺳﭙﺲ ﺷﺮوع ﺑﻪ ﭘﯿﻤﺎﯾﺶ ﻟﯿﺴﺖ از اﺑﺘﺪای آن ﮐﻨﯿﺪ .ﺑﺮای ﻫﺮ ﻋﻨﺼﺮ ﻣﺸﺎﻫﺪه ﺷﺪه ﻣﻘﺪار ﻣﺘﻨﺎﻇﺮ ﺑﺎ آن در Hashtableرا ﻋﻼﻣﺖ ﻣ زﻧﯿﻢ .اﮔﺮ دور وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ﺣﺘﻤﺎ ﻋﻨﺼﺮی دارﯾﻢ ﮐﻪ ﺑﯿﺸﺘﺮ از ﯾ ﺑﺎر ﺗﮑﺮار ▷ ﺷﺪه اﺳﺖ ،ﺑﻨﺎﺑﺮاﯾﻦ ﻫﻨﮕﺎم ﻋﻼﻣﺖ زدن آن در Hashtableﻣ ﺗﻮاﻧﯿﻢ ﺗﮑﺮاری ﺑﻮدن ﻋﻨﺼﺮ را ﺗﺸﺨﯿﺺ دﻫﯿﻢ. ﻣﺴﺌﻠﻪی .٨ﺟﻤﻊ ﮐﻨﻨﺪه اﻟ ﭘﯿﭽﯿﺪه ۴ ﻓﺮض ﮐﻨﯿﺪ ﺑﺮای ﻧﻤﺎﯾﺶ اﻋﺪاد از ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﻢ ﺑﻪ ﻃﻮری ﮐﻪ ﻫﺮ ﻋﻨﺼﺮ ﻟﯿﺴﺖ ﯾ رﻗﻢ را ذﺧﯿﺮه ﻣ ﮐﻨﺪ و ﮐﻢ ارزش ﺗﺮﯾﻦ رﻗﻢ در اﺑﺘﺪای ﻟﯿﺴﺖ ﻗﺮار دارد .اﻟ ﻮرﯾﺘﻤ اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﺑﺎ درﯾﺎﻓﺖ دو ﻋﺪد ﺑﻪ ﺷ ﻞ ﻓﻮق ﺣﺎﺻﻞ ﺟﻤﻊ آﻧﻬﺎ را در ﻗﺎﻟﺐ ﯾ ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی ﺑﺎزﮔﺮداﻧﺪ. ﺣﻞ .ﭘﯿﺎده ﺳﺎزی ﻣﺸﺎﺑﻪ ﺳﺎﺧﺘﺎر ﺟﻤﻊ ﮐﻨﻨﺪه ﻫﺎی ﺳﺨﺖ اﻓﺰاری اﺳﺖ ﮐﻪ در درس ﻣﺪار ﻣﻨﻄﻘ دﯾﺪه اﯾﻢ .ﺑﺎﯾﺪ ﺑﻪ اﯾﻦ ﻧﮑﺘﻪ ﺗﻮﺟﻪ ﮐﻨﯿﻢ ﮐﻪ اﮔﺮ ﻃﻮل ﺗﻮ ﻟﯿﺴﺖ ورودی ﯾ ﺴﺎن ﻧﺒﺎﺷﺪ ﺑﺎﯾﺪ در ﺻﻮرت رﺳﯿﺪن ﺑﻪ ﭘﺎﯾﺎن ﻟﯿﺴﺖ ﮐﻮﺗﺎﻫﺘﺮ ،از آن ▷ ﻧﻘﻄﻪ ﺑﻪ ﺑﻌﺪ ﻣﻘﺎدﯾﺮ آن را ﺻﻔﺮ ﻓﺮض ﮐﻨﯿﻢ. ﻣﺴﺌﻠﻪی TA .٩ﻫﺎی ﺿﺮﺑﺪری از ﭘﺪﯾﺪه ﻫﺎﯾﯽ ﮐﻪ ﺗﻨﻬﺎ در داﻧﺸ ﺪه ﮐﺎﻣﭙﯿﻮﺗﺮ رخ ﻣ دﻫﺪ TAﺑﻮدن ﺑﺮای درﺳ اﺳﺖ ﮐﻪ ﺑﺮﺧ از داﻧﺸﺠﻮﯾﺎن آن TA ﺷﻤﺎ در درس دﯾ ﺮی در ﻃﻮل ﻫﻤﺎن ﺗﺮم ﺑﺎﺷﻨﺪ! ﺑﻪ ﭼﻨﯿﻦ ﭘﺪﯾﺪه ﻧﺎﺑﺴﺎﻣﺎﻧ TA ،ﺿﺮﺑﺪری ﮔﻔﺘﻪ ﻣ ﺷﻮد. ﻓﺮض ﮐﻨﯿﺪ ﺑﻪ دﻻﯾﻞ ﻧﺎﻣﻌﻠﻮﻣ ﻣ ﺧﻮاﻫﯿﻢ ﺗﻤﺎم داﻧﺸﺠﻮﯾﺎن و TAﻫﺎی ﮐﻼس ﺑﯿﻨﺎﯾﯽ ﻣﺎﺷﯿﻦ را ﺿﻤﻦ رﻋﺎﯾﺖ ﺷﺮاﯾﻂ ﺧﺎﺻ در ﯾ ﺳﺎﻟﻦ ﻣﺮﺑﻊ ﺷ ﻞ ﺑﺎ ﭼﯿﺪﻣﺎن ﺻﻨﺪﻟ در ﻗﺎﻟﺐ Gridﺑﻨﺸﺎﻧﯿﻢ .ﻣ داﻧﯿﻢ اﮔﺮ دو داﻧﺸﺠﻮ ﺑﻪ ﻃﻮر ﺿﺮﺑﺪری TAﻫﻢ ﺑﺎﺷﻨﺪ ﺷﺮوع ﺑﻪ ﭼﺸﻢ ﻏﺮه رﻓﺘﻦ ﺑﻪ ﻫﻢ ﻣ ﮐﻨﻨﺪ .ﺷﻌﺎع دﯾﺪ ﯾ داﻧﺸﺠﻮی را ﺑﺮاﺑﺮ ﺗﻤﺎم ﺻﻨﺪﻟ ﻫﺎﯾﯽ ﮐﻪ در ﻫﻤﺎن ردﯾﻒ ﯾﺎ ﺳﺘﻮن وی و ﯾﺎ روی ﯾ از ﻗﻄﺮﻫﺎی ﮔﺬرا از ﻣﺨﺘﺼﺎت او ﺑﺎﺷﻨﺪ ﺗﻌﺮﯾﻒ ﻣ ﮐﻨﯿﻢ .ﯾ داﺷﻨﺠﻮ ﺗﻨﻬﺎ ﻣ ﺗﻮاﻧﺪ ﺑﻪ اﻓﺮادی ﮐﻪ در ﺷﻌﺎع دﯾﺪش ﺑﺎﺷﻨﺪ ﭼﺸﻢ ﻏﺮه ﺑﺮود .ﻣ ﺧﻮاﻫﯿﻢ داﻧﺸﺠﻮﯾﺎن را ﺑﻪ ﮔﻮﻧﻪ ای ﺑﭽﯿﻨﯿﻢ ﮐﻪ ﻫﯿﭻ دو داﻧﺸﺠﻮﯾﯽ ﺑﻪ ﻫﻢ ﭼﺸﻢ ﻏﺮه ﻧﺮوﻧﺪ. ﻓﺮض ﮐﻨﯿﺪ nداﻧﺸﺠﻮ و ﺳﺎﻟﻨ ﺑﺎ اﺑﻌﺎد n × nدارﯾﻢ .ﺑﺎ اﺳﺘﻔﺎده از ﭘﺸﺘﻪ اﻟ ﻮرﯾﺘﻤ اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﭼﯿﺪﻣﺎﻧ ﻣﺠﺎز ﺑﺮای داﻧﺸﺠﻮﻫﺎ اراﺋﻪ دﻫﺪ. زﻣﺎن اﺟﺮای اﻟ ﻮرﯾﺘﻢ در اﯾﻦ ﺳﻮال اﻫﻤﯿﺘ ﻧﺪارد ،اﻣﺎ ﺣﺎﻓﻈﻪ ﻣﺼﺮﻓ ﺷﻤﺎ ﺑﺎﯾﺪ از ) O(nﺑﺎﺷﺪ. ﺣﻞ .از آﻧﺠﺎ ﮐﻪ ﻣﺤﺪودﯾﺖ زﻣﺎﻧ وﺟﻮد ﻧﺪارد ﻣ ﺗﻮاﻧﯿﻢ ﺑﺎ backtrackروی ﺗﻤﺎم ﺟﺎﯾ ﺸﺖ ﻫﺎی ﻣﻤ ﻦ ﺑﺎ ﯾ اﻟ ﻮرﯾﺘﻢ ﺑﺎزﮔﺸﺘ ﻣﺴﺎﻟﻪ را ﺣﻞ ﮐﻨﯿﻢ .ﺑﻪ ﮐﻤ ﭘﺸﺘﻪ ﻣ ﺗﻮاﻧﯿﻢ ﯾ اﻟ ﻮرﯾﺘﻢ ﺑﺎزﮔﺸﺘ را ﺑﻪ اﻟ ﻮرﯾﺘﻢ ﻏﯿﺮ ﺑﺎزﮔﺸﺘ ﺗﺒﺪﯾﻞ ﮐﻨﯿﻢ .ﺑﻪ ﺷ ﻞ زﯾﺮ ﻋﻤﻞ ﻣ ﮐﻨﯿﻢ: begin ;i←0 ; ]find the first valid position Pi for student[i if no such position found then ; pop Pi−1 from the stack ; put student[i-1] at Pi−1 ; i=i−1 ; repeat end ; push Pi to stack ; i++ end ▷ ﻣﺴﺌﻠﻪی .١٠ﺻﻒ ﻃﻮﻻﻧ nداﻧﺸﺠﻮ در ﯾ ﺻﻒ ﭘﺸﺖ ﺳﺮ ﻫﻢ اﯾﺴﺘﺎده اﻧﺪ و ﻫﺮ ﻧﻔﺮ ﺳﻌ ﻣ ﮐﻨﺪ ﺟﻠﻮی ﺻﻒ را ﺑﺒﯿﻨﺪ .ﯾ ﻧﻔﺮ ﺗﻨﻬﺎ در ﺻﻮرﺗ ﻣ ﺗﻮاﻧﺪ ﺟﻠﻮی ﺻﻒ را ﺑﺒﯿﻨﺪ ﮐﻪ ﻫﻤﻪ اﻓﺮادی ﮐﻪ ﺟﻠﻮﺗﺮ از او اﯾﺴﺘﺎده اﻧﺪ از وی ﮐﻮﺗﺎﻫﺘﺮ ﺑﺎﺷﻨﺪ .ﺗﻨﻬﺎ ﺑﺎ اﺳﺘﻔﺎده از داده ۵ ﺳﺎﺧﺘﺎر ﭘﺸﺘﻪ اﻟ ﻮرﯾﺘﻤ اراﺋﻪ دﻫﯿﺪ ﮐﻪ ﺑﺎ درﯾﺎﻓﺖ ﻗﺪ داﻧﺸﺠﻮﯾﺎن از اﺑﺘﺪای ﺻﻒ ﺗﺎ اﻧﺘﻬﺎی آن ﺗﻌﺪاد داﻧﺸﺠﻮﯾﺎﻧ ﮐﻪ ﻣ ﺗﻮاﻧﻨﺪ ﺟﻠﻮ ﺻﻒ را ﺑﺒﯿﻨﻨﺪ ﺑﺎزﮔﺮداﻧﺪ. ﺣﻞ .ﺑﺮای اﯾﻨﮑﻪ ﮐﺴ ﺑﺘﻮاﻧﺪ ﺟﻠﻮی ﺻﻒ را ﺑﺒﯿﻨﺪ ﺑﺎﯾﺪ ﻣﺎﮐﺴﯿﻤﻮم ﻗﺪ اﻓﺮاد ﻗﺒﻠ او در ﺻﻒ از ﻗﺪ ﺧﻮدش ﮐﻤﺘﺮ ﺑﺎﺷﺪ. ﻗﺪ اﻓﺮاد را ﺑﻪ ﺗﺮﺗﯿﺐ از اﺑﺘﺪای ﺻﻒ در ﯾ ﭘﺸﺘﻪ Pushﮐﻨﯿﺪ .ﺑﺎ اﯾﺪه ﻣﺸﺎﺑﻪ ﺳﻮال ٣ﻣ ﺗﻮان ﺳﻮال را ﺣﻞ ﮐﺮد▷ . ﻣﺴﺌﻠﻪی .١١ﻟﯿﺴﺖ دوﺳﻮﯾﻪ ﺗﮏ اﺷﺎره ﮔﺮ ﻣ ﺧﻮاﻫﯿﻢ ﯾ ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی دو ﺳﻮﯾﻪ را ﺗﻨﻬﺎ ﺑﺎ ﯾ اﺷﺎره ﮔﺮ ﺑﻪ ازای ﻫﺮ ﻋﻨﺼﺮ ﭘﯿﺎده ﺳﺎزی ﮐﻨﯿﻢ .ﺑﻨﺎﺑﺮاﯾﻦ اﯾﻦ اﺷﺎره ﮔﺮ ﺑﺎﯾﺪ اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﻫﺮ دو ﻋﻨﺼﺮ nextو prevرا ﻧﮕﻬﺪاری ﮐﻨﺪ .ﻫﺮ اﺷﺎره ﮔﺮ ﯾ ﻣﻘﺪار ٣٢ integerﺑﯿﺘ اﺳﺖ ﮐﻪ آدرس ﯾ ﻋﻨﺼﺮ ﻟﯿﺴﺖ در ﺣﺎﻓﻈﻪ را ذﺧﯿﺮه ﻣ ﮐﻨﺪ .روش ﺑﺮای ﭘﯿﺎده ﺳﺎزی ﻟﯿﺴﺖ ﭘﯿﻮﻧﺪی ﺑﺎ ﺳﺎﺧﺘﺎر ﻓﻮق اراﺋﻪ دﻫﯿﺪ. ﺣﻞ .از ﻋﻤﻠﯿﺎت ﻫﺎی ﺑﯿﺘ ﺑﺮ روی اﺷﺎره ﮔﺮﻫﺎ اﺳﺘﻔﺎده ﮐﻨﯿﺪ. ۶ ▷
© Copyright 2025 Paperzz