ﺗﻤﺮﻳﻦ ﺳﺮﯼ اول ﺳﺎﺧﺘﻤﺎن دادﻩهﺎ و اﻟﮕﻮرﻳﺘﻢهﺎ ﺳﺮرﺳﻴﺪ ﺗﺤﻮﻳﻞ ١٣٨۵/١٢/٢۴ : .١ﺗﺸﺨﻴﺺ رﺷﺘﻪ ﺣﺮوف: ﺑﺮاﯼ هﺮ ﻳﮏ از ﻣﺠﻤﻮﻋﻪ هﺎﯼ زﻳﺮ ﺑﺎ اﺳﺘﻔﺎدﻩ از ﺗﻌﺪادﯼ ﭘﺸﺘﻪ )ﮐﻪ ﺑﺮاﯼ هﺮ ﻗﺴﻤﺖ ﻣﺸﺨﺺ ﺷﺪﻩ اﺳﺖ( اﻟﮕﻮرﻳﺘﻤﯽ ﻃﺮاﺣﯽ ﮐﻨﻴﺪ ﮐﻪ رﺷﺘﻪ اﯼ را از ورودﯼ درﻳﺎﻓﺖ ﮐﻨﺪ و وﺟﻮد ﻳﺎ ﻋﺪم وﺟﻮد ﺁن رﺷﺘﻪ را در ﻣﺠﻤﻮﻋﻪ رﺷﺘﻪ هﺎ ﺗﻌﻴﻴﻦ ﮐﻨﺪ .در اﻟﮕﻮرﻳﺘﻢ اﺳﺘﻔﺎدﻩ ﺷﺪﻩ ﺗﻨﻬﺎ ﻣﺠﺎز هﺴﺘﻴﺪ از دادﻩ هﺎﯼ ﺑﺎ ﻧﻮع ﮐﺎراﮐﺘﺮ و ﺑﻮﻟﯽ ) (booleanاﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ) .ﻋﺪد ﺑﺎﻻﯼ هﺮ ﺣﺮف ﻧﺸﺎن دهﻨﺪﻩ ﺗﻌﺪاد ﺗﮑﺮار ﺁن ﺣﺮف اﺳﺖ( )a) {anbmambn | m, n ≥ 0} (1 Stack )b) {aibjckdl | i+j > k+l & i, j, k, l ≥ 0} (1 Stack )c) {aibjckdl | i+k > j+l & i, j, k, l ≥ 0} (1 Stack )d) {an^2 | n ≥ 0} (3 Stacks * در ﺻﻮرﺗﯽ ﮐﻪ ﺑﺮاﯼ ﺑﺨﺶ dﺑﺘﻮاﻧﻴﺪ اﻟﮕﻮرﻳﺘﻤﯽ ﺑﺎ ٢ﭘﺸﺘﻪ اراﺋﻪ دهﻴﺪ ﻧﻤﺮﻩ اﺿﺎﻓﯽ درﻳﺎﻓﺖ ﺧﻮاهﻴﺪ ﮐﺮد. .٢ﺻﻒ هﺎ و ﭘﺸﺘﻪ هﺎ: اﻟﻒ( دو ﭘﺸﺘﻪ ﺑﺎ ﻇﺮﻓﻴﺖ Nدر اﺧﺘﻴﺎر دارﻳﻢ ﮐﻪ ﺗﻨﻬﺎ ﻣﯽ ﺗﻮاﻧﻴﻢ اﻋﻤﺎل pushو popرا روﯼ ﺁﻧﻬﺎ ﺑﻪ ﮐﺎر ﺑﺮﻳﻢ .اﻟﮕﻮرﻳﺘﻤﯽ ﻃﺮاﺣﯽ ﮐﻨﻴﺪ ﮐﻪ ﺑﺎ اﺳﺘﻔﺎدﻩ از اﻳﻦ دو ﭘﺸﺘﻪ ﻳﮏ ﺻﻒ را ﺷﺒﻴﻪ ﺳﺎزﯼ ﮐﻨﺪ. ﺑﺪﻳﻦ ﻣﻌﻨﯽ ﮐﻪ ﺑﺘﻮاﻧﺪ اﻋﻤﺎل enqueueو dequeueرا ﭘﺸﺘﻴﺒﺎﻧﯽ ﮐﻨﺪ .ﺧﻄﺎهﺎﯼ Overflowو Underflowرا ﻧﻴﺰ ﻣﺪ ﻧﻈﺮ داﺷﺘﻪ ﺑﺎﺷﻴﺪ .زﻣﺎن اﺟﺮاﯼ اﻟﮕﻮرﻳﺘﻢ را ﻧﻴﺰ ﺗﺤﻠﻴﻞ ﮐﻨﻴﺪ. ب( ﻣﺎﻧﻨﺪ ﺑﺨﺶ ﻗﺒﻞ ﺑﺎ اﺳﺘﻔﺎدﻩ از دو ﺻﻒ ﻳﮏ ﭘﺸﺘﻪ را ﭘﻴﺎدﻩ ﺳﺎزﯼ ﮐﻨﻴﺪ .زﻣﺎن اﺟﺮاﯼ اﻟﮕﻮرﻳﺘﻢ را ﻧﻴﺰ ﺗﺤﻠﻴﻞ ﮐﻨﻴﺪ. .٣ﺻﻒ دوﻃﺮﻓﻪ: ﻳﮏ ﭘﺸﺘﻪ ﺗﻨﻬﺎ اﺟﺎزﻩ اﻓﺰودن و ﺑﺮداﺷﺘﻦ ﻋﻨﺎﺻﺮ را از ﺑﺎﻻﯼ ﺧﻮد ﻣﯽ دهﺪ .ﻳﮏ ﺻﻒ ﻧﻴﺰ ﺗﻨﻬﺎ اﺟﺎزﻩ اﻓﺰودن ﺑﻪ اﻧﺘﻬﺎ و ﺑﺮداﺷﺘﻦ از اﺑﺘﺪا را ﻣﯽ دهﺪ .اﻣﺎ ﻳﮏ ﺻﻒ دو ﻃﺮﻓﻪ ﭼﻨﻴﻦ ﻣﺤﺪودﻳﺘﯽ ﻧﺪارد و ﻣﯽ ﺗﻮان ﻋﻤﻞ اﻓﺰودن و ﺑﺮداﺷﺘﻦ را ﺑﺮاﯼ اﺑﺘﺪا و اﻧﺘﻬﺎﯼ ﺁن ﺑﻪ ﮐﺎر ﺑﺮد .ﺑﺮاﯼ ﭼﻬﺎر ﻋﻤﻞ pop_front ، push_back ،push_frontو pop_backدر ﻳﮏ ﺻﻒ دوﻃﺮﻓﻪ اﻟﮕﻮرﻳﺘﻢ هﺎﻳﯽ ﻃﺮاﺣﯽ ﮐﻨﻴﺪ ﮐﻪ در زﻣﺎن ) O(1اﺟﺮا ﺷﻮﻧﺪ. .۴ﻳﮏ ﻣﺮﺗﺐ ﺳﺎزﯼ ﺧﺎص: ﺁراﻳﻪ nﺗﺎﻳﯽ Aﺑﺎ اﻋﺪاد ﻣﺘﻤﺎﻳﺰ ١ﺗﺎ nﭘﺮ ﺷﺪﻩ اﺳﺖ .اﻟﮕﻮرﻳﺘﻢ زﻳﺮ ﺑﺮاﯼ ﻣﺮﺗﺐ ﮐﺮدن ﺁراﻳﻪ ﭘﻴﺸﻨﻬﺎد ﺷﺪﻩ اﺳﺖ: {)void Mysort (int []A, int n ;int t, i )for (i=1; i<=n; i++ {)while (A[i] != i ;]t = A[i ;]]A[i] = A[A[i ;A[t] = t } } اﻟﻒ( ﺑﺮاﯼ اﺛﺒﺎت درﺳﺖ ﺑﻮدن ﻳﮏ اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎزﯼ ﺑﺎﻳﺪ ﭼﻪ ﮔﺰارﻩ هﺎﻳﯽ را اﺛﺒﺎت ﮐﺮد؟ ب( ﻧﺸﺎن دهﻴﺪ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ درﺳﺖ ﮐﺎر ﻣﯽ ﮐﻨﺪ. پ( زﻣﺎن اﺟﺮاﯼ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ را ﺗﺤﻠﻴﻞ ﮐﻨﻴﺪ. .۵ﻣﺤﺎﺳﺒﻪ :Xn اﻟﮕﻮرﻳﺘﻢ زﻳﺮ ﺑﺮاﯼ ﻣﺤﺎﺳﺒﻪ Xnﻧﻮﺷﺘﻪ ﺷﺪﻩ اﺳﺖ: { )int Pow(int x, int n )if (n==0 ;return 1 )if (n%2 == 0 ;)return pow(x, n/2) * pow(x, n/2 else return pow(x, n/2) * pow(x, n/2) * x } اﻟﻒ( ﭘﻴﭽﻴﺪﮔﯽ زﻣﺎﻧﯽ اﻟﮕﻮرﻳﺘﻢ ﺑﺎﻻ را ﻣﺤﺎﺳﺒﻪ ﮐﻨﻴﺪ و ﺑﺎ ﻧﻤﺎد Oﻧﻤﺎﻳﺶ دهﻴﺪ. ب( ﺑﺎ ﺗﻐﻴﻴﺮ اﻳﻦ اﻟﮕﻮرﻳﺘﻢ زﻣﺎن اﺟﺮاﯼ ﺁن را ﺑﻪ ) O(log nﺗﻐﻴﻴﺮ دهﻴﺪ. پ( اﻟﮕﻮرﻳﺘﻤﯽ را ﮐﻪ در ﻗﺴﻤﺖ ﻗﺒﻞ ﺑﻪ دﺳﺖ ﺁوردﻳﺪ ﺑﻪ ﺻﻮرت ﻏﻴﺮ ﺑﺎزﮔﺸﺘﯽ در ﺁورﻳﺪ ﺑﻪ ﻃﻮرﯼ ﮐﻪ ﭘﻴﭽﻴﺪﮔﯽ زﻣﺎﻧﯽ ﺁن ﺗﻐﻴﻴﺮ ﻧﮑﻨﺪ. .۶ﻋﻨﺼﺮ اﮐﺜﺮﻳﺖ: در ﺁراﻳﻪ اﯼ nﺗﺎﻳﯽ ﺗﻤﺎﻣﯽ اﻋﺪاد ﻣﺘﻤﺎﻳﺰ هﺴﺘﻨﺪ ﺑﻪ ﺟﺰ ﻋﺪد xﮐﻪ اﺳﺖ .اﻟﮕﻮرﻳﺘﻤﯽ ﻃﺮاﺣﯽ ﮐﻨﻴﺪ ﮐﻪ در زﻣﺎن ) O(nﻣﻘﺪار xرا ﭘﻴﺪا ﮐﻨﺪ. .٧ﻣﺴﺎﻟﻪ 3-3از ﮐﺘﺎب CLRS ﺑﺎر ﺗﮑﺮار ﺷﺪﻩ ﺗﻮﺿﻴﺤﺎت: ﭘﺎﺳﺦ هﺎﯼ ﺧﻮد را ﺑﻪ ﺻﻮرت اﻟﮑﺘﺮوﻧﻴﮑﯽ و در ﻗﺎﻟﺐ ﻓﺎﻳﻞ PDFﻳﺎ Wordﺑﻪ ﺁدرس [email protected]ﺑﻔﺮﺳﺘﻴﺪ. ﻣﻮﺿﻮع ﻧﺎﻣﻪ ) (subjectرا ﺑﺮاﺑﺮ ??????? HW1-8ﻗﺮار دهﻴﺪ ﺑﻪ ﻃﻮرﯼ ﮐﻪ ﺷﻤﺎرﻩ داﻧﺸﺠﻮﻳﯽ ﺷﻤﺎ ﺑﻪ ﺟﺎﯼ ﻋﻼﻣﺖ هﺎﯼ ﺳﻮال ﺟﺎﻳﮕﺰﻳﻦ ﺷﺪﻩ ﺑﺎﺷﺪ .در ﺑﺪﻧﻪ ﻧﺎﻣﻪ و در داﺧﻞ ﻓﺎﻳﻞ ارﺳﺎﻟﯽ ﻧﻴﺰ ﻧﺎم و ﻧﺎم ﺧﺎﻧﻮادﮔﯽ ﺧﻮد را ﺑﻪ هﻤﺮاﻩ ﺷﻤﺎرﻩ داﻧﺸﺠﻮﻳﯽ ذﮐﺮ ﮐﻨﻴﺪ. ﺑﻪ ﭘﺎﺳﺦ هﺎﯼ ﻣﺸﺎﺑﻪ ﺟﺮﻳﻤﻪ ﺗﻌﻠﻖ ﺧﻮاهﺪ ﮔﺮﻓﺖ ،ﺑﻨﺎﺑﺮاﻳﻦ ﺑﻪ ﺷﺪت ﺗﻮﺻﻴﻪ ﻣﯽﺷﻮد ﮐﻪ ﺧﻮدﺗﺎن ﺑﻪ ﺗﻨﻬﺎﻳﯽ ﺗﻤﺮﻳﻦ هﺎ را ﺣﻞ ﮐﻨﻴﺪ. ﭘﺎﺳﺦ هﺎﯼ ﺷﻤﺎ ﺑﻪ دﻗﺖ ﺗﺼﺤﻴﺢ ﺧﻮاهﺪ ﺷﺪ ،ﺑﻨﺎﺑﺮاﻳﻦ ﺳﻌﯽ ﮐﻨﻴﺪ ﺑﻪ ﺳﻮاﻻت ﭘﺎﺳﺦ هﺎﯼ ﻣﺤﮑﻢ ،ﻣﺴﺘﺪل و ﺗﺎ ﺣﺪ اﻣﮑﺎن ﮐﻮﺗﺎﻩ ﺑﺪهﻴﺪ. ﻣﻬﻠﺖ ارﺳﺎل ﭘﺎﺳﺦ هﺎ ﺗﺎ ﻧﻴﻤﻪ ﺷﺐ روز ﺳﺮرﺳﻴﺪ اﺳﺖ .ﺑﻪ ﭘﺎﺳﺦ هﺎﻳﯽ ﮐﻪ ﺗﺎ ۴٨ﺳﺎﻋﺖ ﺑﻌﺪ از ﻣﻮﻋﺪ ﻓﺮﺳﺘﺎدﻩ ﻣﯽﺷﻮﻧﺪ ،ﺑﻪ ﻧﺴﺒﺖ ﺟﺮﻳﻤﻪ اﯼ ﺗﻌﻠﻖ ﻣﯽﮔﻴﺮد اﻣﺎ ﺗﺎﺧﻴﺮ ﺑﻴﺶ از ۴٨ ﺳﺎﻋﺖ ﺑﻪ هﻴﭻ وﺟﻪ ﻗﺎﺑﻞ ﻗﺒﻮل ﻧﻴﺴﺖ .در ﺿﻤﻦ ﻣﺸﮑﻼت اﺣﺘﻤﺎﻟﯽ ﺳﺮور CEرا ﻣﺪ ﻧﻈﺮ ﻗﺮار دهﻴﺪ و ﺗﺮﺟﻴﺤﺎً ﺑﺮاﯼ ارﺳﺎل از ﺳﺮور دﻳﮕﺮﯼ اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ. ﺻﻮرت ﺗﻤﺮﻳﻦ هﺎ ﮔﻮﻳﺎ هﺴﺘﻨﺪ ،وﻟﯽ در ﺻﻮرﺗﯽ ﮐﻪ ﺳﻮاﻟﯽ دارﻳﺪ ﻣﯽ ﺗﻮاﻧﻴﺪ در ﺑﺨﺶ Discussion Areaﺳﺎﻳﺖ درس ﺳﻮال ﺧﻮد را ﻣﻄﺮح ﮐﻨﻴﺪ.
© Copyright 2025 Paperzz