ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ ﻣﺒﺎﻧ ﺳﺎﺧﺘﻤﺎن دادهﻫﺎ و اﻟ ﻮرﯾﺘﻢﻫﺎ )(۴٠-٢۵۴ Introduction to Data Structures and Algorithms داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﻣﺪرس :ﻣﺤﻤﺪ ﻋﻠ آﺑﺎم رﻓ ﻣﺸ ﻼت ﺷﻤﺎ راﻫﻨﻤﺎی ﭘﺮوژه ﻋﻤﻠ در اﯾﻦ راﻫﻨﻤﺎ ﺑﻪ ﺳﻮالﻫﺎی زﯾﺮ ﭘﺎﺳ ﻣ دﻫﯿﻢ. • ﭼ ﻮﻧﻪ ﺗﻤﺮﯾﻦ ﺧﻮد را ارﺳﺎل ﮐﻨﻢ؟ • ﺳﻮالﻫﺎ ﭼﻪ ارﺗﺒﺎﻃ ﺑﻪ ﺳﺎﺧﺘﻤﺎندادهﻫﺎ و اﻟ ﻮرﯾﺘﻢﻫﺎ دارد؟ • ﺳﯿﺴﺘﻢ ارزﯾﺎﺑﯽ ﺑﺮﻧﺎﻣﻪﻫﺎ ﭼﻄﻮر اﺳﺖ؟ • ﮐﺪ ﻣﻦ ﺑﻪ درﺳﺘ ﮐﺎﻣﭙﺎﯾﻞ ﻣ ﺷﻮد اﻣﺎ ﺳﺮور ﺧﻄﺎی ﮐﺎﻣﭙﺎﯾﻠﺮ ﻣ دﻫﺪ؛ ﻋﻠﺖ آن ﭼﯿﺴﺖ؟ • ﻣﺤﺪودﯾﺖ زﻣﺎن و ﺣﺎﻓﻈﻪ ﺑﻪ ﭼﻪ ﻣﻌﻨ اﺳﺖ؟ • ﭼﺮا ﺳﺮور ﺑﻪ ﻣﻦ ﻧﻤﺮهی ﺻﻔﺮ ﻣ دﻫﺪ در ﺣﺎﻟ ﮐﻪ ﮐﺪ ﻣﻦ ﮐﺎﻣﻼ درﺳﺖ اﺳﺖ؟ • ﮐﺪم را ﺑﺎرﻫﺎ و ﺑﺎرﻫﺎ ﺗﺴﺖ ﮐﺮدم اﻣﺎ ﺳﺮور ﻧﻤﺮهی ﺑﯿﺸﺘﺮ از ۴٠ﺑﻪ ﻣﻦ ﻧﻤ دﻫﺪ .ﭼﺮا؟ ١ ﭼ ﻮﻧﻪ ﺗﻤﺮﯾﻦ ﺧﻮد را ارﺳﺎل ﮐﻨﻢ؟ ﺑﺮای ارﺳﺎل ﺗﻤﺮﯾﻦﻫﺎ ﺑﺎﯾﺪ از ﺳﺎﻣﺎﻧﻪی ﺑﺮﺧﻂ http://learn.inoi.irاﺳﺘﻔﺎده ﮐﻨﯿﺪ .ﻧﺎم ﮐﺎرﺑﺮی ﺷﻤﺎره داﻧﺸﺠﻮﯾﯽ ﺷﻤﺎ و رﻣﺰ ﻋﺒﻮر ﺷﻤﺎ ١٢٣۴۵۶اﺳﺖ .ﺑﺎ اﯾﻦ ﻧﺎم ﮐﺎرﺑﺮی وارد ﺳﺎﯾﺖ ﺷﻮﯾﺪ. ﭘﺲ از ورود ﺑﻪ ﺳﺎﯾﺖ ﺑﻪ ﺑﺨﺶ اﻣﺘﺤﺎن ﺑﺮوﯾﺪ و »اﻣﺘﺤﺎﻧﺎت ﺧﺼﻮﺻ ﻣﻦ« را اﻧﺘﺨﺎب ﮐﻨﯿﺪ .ﺳﭙﺲ ﺑﻪ ﺗﻤﺮﯾﻦ ﻋﻤﻠ ﻣﺮﺑﻮط وارد ﺷﻮﯾﺪ .از ﻗﺴﻤﺖ ﭘﺎﯾﯿﻦ ﺻﻔﺤﻪ ﻣ ﺗﻮاﻧﯿﺪ ﺗﻤﺮﯾﻦ ﺧﻮد را ارﺳﺎل ﮐﻨﯿﺪ .ﭘﺲ از ارﺳﺎل ﺗﻤﺮﯾﻦ از ﻗﺴﻤﺖ ﺑﺎﻻ و ﺳﻤﺖ راﺳﺖ ﺻﻔﺤﻪ ﻣﻨﺘﻈﺮ درﯾﺎﻓﺖ ﻧﻤﺮه ﺧﻮد ﺑﺎﺷﯿﺪ .ﺳﺮور ۴ﭘﯿﻐﺎم ﻣﺨﺘﻠﻒ ﻣﻤ ﻦ اﺳﺖ ارﺳﺎل ﮐﻨﺪ: • ﻧﺎﻣﺸﺨﺺ :وﺿﻌﯿﺖ ﻧﺎﻣﺸﺨﺺ اﺳﺖ .اﻣﺘﺤﺎن ﺑﻪ ﮔﻮﻧﻪای ﺗﻨﻈﯿﻢ ﺷﺪه ﮐﻪ ﭘﺲ از ﻫﺮ ارﺳﺎل ﻧﻤﺮهی آن داده ﻧﺸﻮد. • اﻧﺘﻈﺎر ﺑﺮای ﻣﺤﺎﮐﻤﻪ :ﺳﺮور اﻵن ﻣﺸﻐﻮل اﺳﺖ .ﺑﺎﯾﺪ ﻣﻨﺘﻈﺮ ﺑﺎﺷﯿﺪ ﺗﺎ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﻣﺤﺎﮐﻤﻪ ﺷﻮد. • در ﺣﺎل ﻣﺤﺎﮐﻤﻪ :ﺳﺮور ﻣﺸﻐﻮل ﻣﺤﺎﮐﻤﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ اﺳﺖ .ﮐﻤ ﺻﺒﺮ ﮐﻨﯿﺪ ﺗﺎ ﻣﺤﺎﮐﻤﻪ ﺗﻤﺎم ﺷﻮد) .ﻣﻤ ﻦ اﺳﺖ ﺗﺎ دو‐ﺳﻪ دﻗﯿﻘﻪ ﻃﻮل ﺑ ﺸﺪ(. • ﺧﻄﺎی ﮐﺎﻣﭙﺎﯾﻠﺮ :ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ در ﺳﺮور ﺑﺎ ﺧﻄﺎی ﮐﺎﻣﭙﺎﯾﻠﺮ ﻣﻮاﺟﻪ ﺷﺪه اﺳﺖ .ﮐﺪ ﺧﻮد را اﺻﻼح ﮐﻨﯿﺪ. • ﮐﺎﻣﭙﺎﯾﻞ درﺳﺖ :ﻣﻌﻤﻮﻻ ﺑﺎ اﯾﻦ ﭘﯿﻐﺎم ﺑﺮﺧﻮرد ﺑﯿﺸﺘﺮی ﺧﻮاﻫﯿﺪ داﺷﺖ .ﮐﺪ ﺷﻤﺎ ﺑﻪ درﺳﺘ ﮐﺎﻣﭙﺎﯾﻞ ﺷﺪه اﺳﺖ؛ ﻣ ﺗﻮاﻧﯿﺪ ﻧﻤﺮهی ﺧﻮد را ﺑﺒﯿﻨﯿﺪ. در ﺻﻮرﺗ ﮐﻪ در ﻣﺮاﺣﻞ ارﺳﺎل ﺗﻤﺮﯾﻦ ﺑﻪ ﻣﺸ ﻞ ﺑﺮﺧﻮردﯾﺪ ﺑﻪ آدرس hbagherinezhad@gmail.comاﯾﻤﯿﻞ ﺑﺰﻧﯿﺪ. ١ ٢ ﺳﻮالﻫﺎ ﭼﻪ ارﺗﺒﺎﻃ ﺑﻪ ﺳﺎﺧﺘﻤﺎندادهﻫﺎ و اﻟ ﻮرﯾﺘﻢﻫﺎ دارد؟ ﻣﻌﻤﻮﻻ ﺑﺮای ﺳﻮالﻫﺎﯾﯽ ﮐﻪ داده ﻣ ﺷﻮد ﯾ ﺣﻞ ﺑﺪﯾﻬ وﺟﻮد دارد ﮐﻪ ﻓﻘﻂ ﺗﻮاﻧﺎﯾﯽ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴ اﺳﺖ و ﻫﯿﭻ ﻧﯿﺎزی ﺑﻪ درس »ﻣﺒﺎﻧ ﺳﺎﺧﺘﻤﺎن دادهﻫﺎ و اﻟ ﻮرﯾﺘﻢﻫﺎ« ﻧﺪارد .ﭼﻨﯿﻦ ﺣﻞﻫﺎﯾﯽ ﻋﻤﻮﻣﺎ ﻧﻤﺮهی ﺧﻮﺑﯽ ﻧﻤ ﮔﯿﺮﻧﺪ .ﻣﺴﺌﻠﻪی اﺻﻠ ﻣﺤﺪودﯾﺖ زﻣﺎن و ﺣﺎﻓﻈﻪ ﺳﻮالﻫﺎﺳﺖ ﮐﻪ آﻧﻬﺎ را ﺑﻪ اﯾﻦ درس ﻣﺮﺗﺒﻂ ﻣ ﮐﻨﺪ .ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ در ﻣﺤﺪوده زﻣﺎﻧ ﻣﻄﺮح ﺷﺪه ﺑﺮای ﺳﻮالﻫﺎ ﺑﻪ ﭘﺎﯾﺎن ﺑﺮﺳﺪ .ﻫﻤﭽﻨﯿﻦ ﻧﺒﺎﯾﺪ ﻫﯿﭽ ﺎه ﺑﯿﺸﺘﺮ از ﻣﺤﺪودﯾﺖ ﺣﺎﻓﻈﻪ ﮔﻔﺘﻪ ﺷﺪه در ﺳﻮال از ﻣﻨﺒﻊ ﺣﺎﻓﻈﻪی ﺳﯿﺴﺘﻢ اﺳﺘﻔﺎده ﮐﻨﯿﺪ. ﻫﻤﭽﻨﯿﻦ ﺷﻤﺎ ﻧﻤ ﺗﻮاﻧﯿﺪ از دﯾ ﺮ ﻣﻨﺎﺑﻊ ﺳﯿﺴﺘﻢ ﻣﺎﻧﻨﺪ ﺻﺪا ،ﺗﺼﻮﯾﺮ ،ﻫﺎرددﯾﺴ و ...اﺳﺘﻔﺎده ﮐﻨﯿﺪ .در اﯾﻦ ﺻﻮرت ﺟﻠﻮی اﺟﺮای ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﮔﺮﻓﺘﻪ ﻣ ﺷﻮد و ﻧﻤﺮهی آن ﺑﺨﺶ ﺻﻔﺮ داده ﻣ ﺷﻮد. ٣ ﺳﯿﺴﺘﻢ ارزﯾﺎﺑﯽ ﺑﺮﻧﺎﻣﻪﻫﺎ ﭼ ﻮﻧﻪ اﺳﺖ؟ ﺑﺮﻧﺎﻣﻪﻫﺎی ﺷﻤﺎ اﺑﺘﺪا compileﻣ ﺷﻮد .در ﺻﻮرت وﺟﻮد ﺧﻄﺎی ﮐﺎﻣﭙﺎﯾﻠﺮ ﻧﻤﺮهی ﺻﻔﺮ ﺑﻪ آن ﺑﺮﻧﺎﻣﻪ داده ﻣ ﺷﻮد .در ﺻﻮرﺗ ﮐﻪ روﻧﺪ compileدرﺳﺖ اﻧﺠﺎم ﺷﻮد ﺑﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺗﻌﺪادی Test Caseداده ﻣ ﺷﻮد و ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎ آﻧﻬﺎ ﺗﺴﺖ ﻣ ﺷﻮد .در ﺻﻮرﺗ ﮐﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎ آن Test Caseدرﺳﺖ اﺟﺮا ﺷﺪ و ﺧﺮوﺟ ﺻﺤﯿﺢ ﺗﻮﻟﯿﺪ ﮐﺮد ﻧﻤﺮهی آن Test Caseﺑﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺗﻌﻠّﻖ ﻣﯿﺎﺑﺪ .ﺗﻤﺎم Test Caseﻫﺎ ﻧﻤﺮهی ﺑﺮاﺑﺮ دارﻧﺪ. ۴ ﮐﺪ ﻣﻦ ﺑﻪ درﺳﺘ ﮐﺎﻣﭙﺎﯾﻞ ﻣ ﺷﻮد اﻣﺎ ﺳﺮور ﺧﻄﺎی ﮐﺎﻣﭙﺎﯾﻠﺮ ﻣ دﻫﺪ؛ ﻋﻠﺖ آن ﭼﯿﺴﺖ؟ اﮔﺮ ﺑﺮﻧﺎﻣﻪﺗﺎن را ﺑﻪ زﺑﺎن Cﯾﺎ C++ﻧﻮﺷﺘﻪاﯾﺪ ﻣﻤ ﻦ اﺳﺖ ﺑﻪ دﻟﯿﻞ اﺧﺘﻼف ﮐﺎﻣﭙﺎﯾﻠﺮ ﺳﺮور و ﮐﺎﻣﭙﯿﻮﺗﺮ ﺷﻤﺎ اﯾﻦ ﻣﺸ ﻞ رخ داده ﺑﺎﺷﺪ .ﮐﺎﻣﭙﺎﯾﻠﺮ ﺳﺮور gcc version 4.4.3اﺳﺖ .ﻣﻤ ﻦ اﺳﺖ ﻧﯿﺎز ﺑﺎﺷﺪ libraryﻫﺎی ﺑﯿﺸﺘﺮی را در ﮐﺪﺗﺎن include ﮐﻨﯿﺪ .در ﺻﻮرﺗ ﮐﻪ از ﻓﻀﺎی ﻧﺎم اﺳﺘﺎﻧﺪارد C++اﺳﺘﻔﺎده ﮐﺮدﯾﺪ دﺳﺘﻮر using namespace stdﻓﺮاﻣﻮش ﻧﺸﻮد. در ﺻﻮرﺗ ﮐﻪ ﮐﺪﺗﺎن را ﺑﻪ زﺑﺎن Javaﻧﻮﺷﺘﻪاﯾﺪ دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ ﮐﺎﻣﭙﺎﯾﻠﺮ ﺳﺮور javac 1.6.0 26اﺳﺖ ﭘﺲ ﺷﻤﺎ ﺑﺎﯾﺪ ﮐﺪ ﺟﺎواﯾﺘﺎن را ﻣﻄﺎﺑﻖ ﺑﺎ اﺳﺘﺎﻧﺪارد Java 1.6ﺑﻨﻮﯾﺴﯿﺪ .ﮐﺪ ﺟﺎوای ﺷﻤﺎ ﺑﺎﯾﺪ ﺷﺎﻣﻞ ﯾ ﮐﻼس ﻋﻤﻮﻣ ﺑﻪ ﻧﺎم progﺑﺎﺷﺪ ﮐﻪ ﺗﺎﺑﻊ ﻋﻤﻮﻣ mainﺗﺎن در آن ﻗﺮار دارد. ۵ ﻣﺤﺪودﯾﺖ زﻣﺎن و ﺣﺎﻓﻈﻪ ﺑﻪ ﭼﻪ ﻣﻌﻨ اﺳﺖ؟ ﻣﺤﺪودﯾﺖ زﻣﺎن و ﯾ ﺑﻪ ازای ﻫﺮ Test Caseﮐﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ داده ﻣ ﺷﻮد ﯾ ﻣﺤﺪودﯾﺖ ﺣﺎﻓﻈﻪ ﻗﺮار داده ﻣ ﺷﻮد ﮐﻪ در ﺻﻮرﺗ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺨﻮاﻫﺪ از اﯾﻦ ﻣﺤﺪودﯾﺖﻫﺎ ﺗﺠﺎوز ﮐﻨﺪ ﻣﺘﻮﻗﻒ ﻣ ﺷﻮد و ﻧﻤﺮهی آن Test Caseﺑﻪ ﺷﻤﺎ داده ﻧﻤ ﺷﻮد. ﻣﻬﻢ: ﮐﺪ ﯾ ﺣﺎل ﺳﻮال اﯾﻦ اﺳﺖ ﮐﻪ ﭼﻪ ﻃﻮر ﺑﻔﻬﻤﯿﻢ زﻣﺎن اﺟﺮای ﺑﺮﻧﺎﻣﻪی ﻣﺎ ﭼﻘﺪر ﺧﻮاﻫﺪ ﺑﻮد .ﻗﺒﻞ از اﯾﻨﮑﻪ ﺷﺮوع ﺑﻪ ﻧﻮﺷﺘﻦ اﻟ ﻮرﯾﺘﻢ ﮐﻨﯿﻢ ﺑﺎﯾﺪ ﻻزم اﺳﺖ زﻣﺎن و ﺣﺎﻓﻈﻪای ﮐﻪ ﺑﺮﻧﺎﻣﻪی ﻣﺎ ﻣ ﺧﻮاﻫﺪ اﺳﺘﻔﺎده ﮐﻨﺪ را ﺗﺨﻤﯿﻦ ﺑﺰﻧﯿﻢ. ﺑﺮای اﯾﻨﮑﻪ ﺑﻔﻬﻤﯿﻢ اﻟ ﻮرﯾﺘﻢ ﻣﺎ ﭼﻘﺪر ﻃﻮل ﻣ ﮐﺸﺪ ﺑﺎﯾﺪ اﺑﺘﺪا ﭘﯿﭽﯿﺪﮔ اﻟ ﻮرﯾﺘﻢﻣﺎن را ﺣﺴﺎب ﮐﻨﯿﻢ .در اﯾﻦ ﻣﺮﺣﻠﻪ ﺑﺎﯾﺪ ﺑﻪ اﺻﻄﻼح Orderاﻟ ﻮرﯾﺘﻢ را در ﺑﺪﺗﺮﯾﻦ ﺣﺎﻟﺖ ﻣﺤﺎﺳﺒﻪ ﮐﻨﯿﻢ .ﭘﺲ از اﯾﻨﮑﻪ Orderﻣﺤﺎﺳﺒﻪ ﺷﺪ ﺣﺪاﮐﺜﺮ ﻣﻘﺎدﯾﺮی ﮐﻪ در Test Caseﻫﺎ ﺧﻮاﻫﺪ آﻣﺪ را در ﻓﺮﻣﻮل Orderﻗﺮار ﻣ دﻫﯿﻢ ﺗﺎ ﺑﻪ دﺳﺖ آورﯾﻢ ﺑﺮﻧﺎﻣﻪی ﻣﺎ ﭼﻨﺪ ﻋﻤﻠﯿﺎت ﻻزم دارد ﮐﻪ اﻧﺠﺎم دﻫﺪ ﺗﺎ ﺑﻪ ٢ Test Caseﺑﺎ آن ﻣﺤﺪودﯾﺖﻫﺎ ﭘﺎﺳ دﻫﺪ .ﺣﺎل ﺑﻪ ﺗﻮﺟﻪ ﺑﻪ آﻧﮑﻪ ﻣ داﻧﯿﻢ ﯾ ﮐﺎﻣﭙﯿﻮﺗﺮ در ﺛﺎﻧﯿﻪ ﺣﺪود ۶ × ١٠٧ﻋﻤﻠﯿﺎت اﻧﺠﺎم ﻣ دﻫﺪ زﻣﺎن ﻃ ﺷﺪه ﺗﻮﺳﻂ ﺑﺮﻧﺎﻣﻪ ﺑﺮای آن Test Caseرا ﭘﯿﺶ ﺑﯿﻨ ﻣ ﮐﻨﯿﻢ. ﺑ ﺬارﯾﺪ ﻣﺜﺎﻟ ﺑﺰﻧﻢ .ﻣﺜﻼ ﺑﺮای ﺳﻮال اول ﺗﻤﺮﯾﻦ ﺳﺮی اول؛ ﯾ ﯾﺎ ﻣﺎﮐﺴﯿﻤﻢ ﯾ اﻟ ﻮرﯾﺘﻢ ﺑﺪﯾﻬ اﯾﻦ اﺳﺖ ﮐﻪ ﻫﺮ ﺑﺎر ﮐﻪ از ﻣﺎ ﺟﻤ ﯾ ﺑﺎزه kﺗﺎﯾﯽ را ﻣ ﭘﺮﺳﺪ ﻣﺎ ﻫﻤﺎﻧﺠﺎ آن ﻋﻤﻠﯿﺎت را اﻧﺠﺎم دﻫﯿﻢ و ﭘﺎﺳ ﺑﺪﻫﯿﻢ .اﯾﻦ ﯾﻌﻨ ﺑﻪ ازای ﻫﺮ ﭘﺮﺳﺶ از ﻧﻮع MAXﻣﺎ از ) O(kﻫﺰﯾﻨﻪ ﻣ ﮐﻨﯿﻢ و ﺑﻪ ازای ﻫﺮ ﭘﺮﺳﺶ از ﺟﻨﺲ SUMاز ) O(nﻫﺰﯾﻨﻪ ﻣ ﮐﻨﯿﻢ .ﻣ ﺗﻮان ﮔﻔﺖ ﺑﻪ ﻃﻮر ﮐﻠ ﻫﺮ ﭘﺮﺳﺶ ﻫﺰﯾﻨﻪی ) O(nدارد .ﭘﺲ ﺑﺎ اﯾﻦ ﺣﺴﺎب qﺗﺎ ﭘﺮﺳﺶ ﻫﺰﯾﻨﻪی ) O(nqﺧﻮاﻫﻨﺪ داﺷﺖ .ﺑﻪ ﺗﻮﺟﻪ ﺑﻪ اﯾﻨﮑﻪ در ﺳﻮال ﮔﻔﺘﻪ ﺷﺪه nﺣﺪاﮐﺜﺮ ١٠۵و qﻫﻢ ﺣﺪاﮐﺜﺮ ١٠۵اﺳﺖ ﺗﻌﺪاد ﻋﻤﻠﯿﺎت ﺑﺮای ﯾ Test Caseﻣﺸ ﻞ ١٠١٠ﺧﻮاﻫﺪ ﺑﻮد و ﻫﻤﺎﻧﻄﻮر ﮐﺎﻣﭙﯿﻮﺗﺮ )ﮐﻪ ﺳﺮور ﺳﺎﯾﺖ ﻫﻢ از آن ﻣﺴﺘﺜﻨ ﻧﯿﺴﺖ( در ﯾ ﺛﺎﻧﯿﻪ ﺣﺪود ۶ × ١٠٧ﻋﻤﻠﯿﺎت اﻧﺠﺎم ﻣ دﻫﺪ؛ ﭘﺲ ﮐﻪ ﮔﻔﺘﯿﻢ ﯾ اﺟﺮای اﯾﻦ ﺑﺮﻧﺎﻣﻪ روی اﯾﻦ Test Caseﺣﺪود ١۶۶ﺛﺎﻧﯿﻪ ﻃﻮل ﺧﻮاﻫﺪ ﮐﺸﯿﺪ ﮐﻪ اﯾﻦ ﺧﯿﻠ ﺑﯿﺸﺘﺮ از ﻣﺤﺪودﯾﺖ ٣ﺛﺎﻧﯿﻪ ﻗﺮار داده ﺷﺪه ﺑﺮای ﺳﻮال اﺳﺖ. ﻣﻤ ﻦ اﺳﺖ ﮔﻔﺘﻪ ﺷﻮد ﺧﻮب در اﯾﻨﺠﺎ زﻣﺎن ﺧﯿﻠ دﺳﺖ ﺑﺎﻻ ﻣﺤﺎﺳﺒﻪ ﺷﺪه و در واﻗﻌﯿﺖ اﯾﻨﻄﻮر ﻧﯿﺴﺖ .ﺑﻠﻪ دﺳﺖ ﺑﺎﻻ ﺣﺴﺎب ﺷﺪه ،اﻣﺎ ﺑﻪ واﻗﻌﯿﺖ ﻧﺰدﯾ اﺳﺖ .ﺿﻤﻦ اﯾﻨﮑﻪ ﻣﺎ اﯾﻨﺠﺎ از زﻣﺎن ﺧﻮاﻧﺪن ورودی ﺻﺮف ﻧﻈﺮ ﮐﺮدﯾﻢ) .زﻣﺎن ﺧﻮاﻧﺪن ﺣﺪود ٢ × ١٠۵ﻋﺪد ﺻﺤﯿﺢ( ﻫﻤﭽﻨﯿﻦ ﻣﻤ ﻦ اﺳﺖ ﯾ روش ﺑﺮای ﺑﻬﺘﺮ ﮐﺮدن زﻣﺎن در اﯾﻦ ﺳﻮال ،اﯾﻦ ﺑﺎﺷﺪ ﮐﻪ ﺳﻮالﻫﺎﯾﯽ ﮐﻪ ﭘﺎﺳ ﻣ دﻫﯿﻢ را ذﺧﯿﺮه ﮐﻨﯿﻢ ﺗﺎ اﮔﺮ ﺳﻮال ﺗﮑﺮاری ﭘﺮﺳﯿﺪه ﺷﺪ ﻣﺤﺎﺳﺒﺎت ﺗﮑﺮاری اﻧﺠﺎم ﻧﺪﻫﯿﻢ .اﻣﺎ ﺗﻮﺟﻪ ﮐﻨﯿﺪ اﯾﻦ ﮐﺎر ﺧﯿﻠ زﻣﺎن اﺟﺮا را ﺑﻬﺘﺮ ﻧﻤ ﮐﻨﺪ زﯾﺮا ﻣﻤ ﻦ اﺳﺖ ﺳﻮالﻫﺎ ﻃﻮری ﺑﺎﺷﻨﺪ ﮐﻪ اﺳﺎﺳﺎ ﺳﻮال ﺗﮑﺮاری وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ .ﺣﺘ ﻣﻤ ﻦ اﺳﺖ اﯾﻦ ﺑﺮرﺳ ﺑﺮای ﺗﮑﺮاری ﺑﻮدن ﯾﺎ ﻧﺒﻮدن ﯾ ﺳﻮال ﺑﺎﻋﺚ ﺷﻮد زﻣﺎن اﺟﺮا ﺑﺪﺗﺮ ﻫﻢ ﺑﺸﻮد .زﯾﺮا ﭼ ﮐﺮدن اﯾﻨﮑﻪ ﯾ ﺳﻮال ﺗﮑﺮاری اﺳﺖ ﯾﺎ ﻧﻪ ﺧﻮد ﻋﻤﻠﯿﺎت زﻣﺎنﺑﺮی اﺳﺖ. ﻟﻄﻔﺎ ﺗﻮﺟﻪ ﮐﻨﯿﺪ در ﺳﻮالﻫﺎ ﺳﻌ ﻣ ﺷﻮد Test Caseﻫﺎ ﺑﻪ ﮔﻮﻧﻪای ﻃﺮاﺣ ﺷﻮﻧﺪ ﮐﻪ ﻓﻘﻂ ﺑﺮﻧﺎﻣﻪ ﺑﺎ اﻟ ﻮرﯾﺘﻢ درﺳﺖ ﻧﻤﺮهی ﮐﺎﻣﻞ ﺑ ﯿﺮد و اﻟ ﻮرﯾﺘﻢﻫﺎ ﺑﺎ ﭘﯿﭽﯿﺪﮔ ﺑﺎﻻ ﻧﻤﺮهی ﺧﻮﺑﯽ ﻧﮕﯿﺮﻧﺪ. ۶ ﭼﺮا ﺳﺮور ﺑﻪ ﻣﻦ ﻧﻤﺮهی ﺻﻔﺮ ﻣ دﻫﺪ در ﺣﺎﻟ ﮐﻪ ﮐﺪ ﻣﻦ ﮐﺎﻣﻼ درﺳﺖ اﺳﺖ؟ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﯾﻨﮑﻪ Test Caseﻫﺎی ﻣﻮﺟﻮد روی ﺳﺮور اﮐﺜﺮا ﺑﺰرگ ﻫﺴﺘﻨﺪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ ﺗﺎ ﺣﺪ ﺑﺴﯿﺎر ﺧﻮﺑﯽ درﺳﺖ ﺑﺎﺷﺪ ﺗﺎ ﻧﻤﺮهای ﺑ ﯿﺮﯾﺪ .اﮔﺮ ﺑﺮ ﺧﻼف اﻧﺘﻈﺎرﺗﺎن ﺳﺮور ﻧﻤﺮهی ﺻﻔﺮ ﺑﻪ ﺷﻤﺎ ﻣ دﻫﺪ در ﺣﺎﻟ ﮐﻪ ﺑﻪ ﺑﺮﻧﺎﻣﻪﺗﺎن ﻣﻄﻤﺌﻨﯿﺪ ﺑﻪ ﻧﮑﺎت زﯾﺮ دﻗﺖ ﻓﺮﻣﺎﯾﯿﺪ: • ﺳﻮال را ﯾ ﺒﺎر دﯾ ﺮ ﺑﺎ دﻗﺖ ﺑﺨﻮاﻧﯿﺪ ﺷﺎﯾﺪ ﺟﺎﯾﯽ را درﺳﺖ ﻣﺘﻮﺟﻪ ﻧﺸﺪهاﯾﺪ. • ﯾ ﺑﺎر ﺗﻤﺎم ﻗﺴﻤﺖﻫﺎی ﮐﺪﺗﺎن را ﺑﺨﻮاﻧﯿﺪ .ﺣﺘ ﻗﺴﻤﺖ ورودی و ﺧﺮوﺟ ،دﻗﺖ ﮐﻨﯿﺪ ﺷﺎﯾﺪ اﺳﺘﺎﻧﺪارد ورودی و ﺧﺮوﺟ ﺳﻮال را رﻋﺎﯾﺖ ﻧﮑﺮدهاﯾﺪ. • ﺑﻪ ﺑﺨﺶ ﻣﺤﺪودﯾﺖﻫﺎ دﻗﺖ ﮐﻨﯿﺪ .ﺷﺎﯾﺪ اﻧﺪازهی آراﯾﻪای را ﮐﻮﭼ ﮔﺮﻓﺘﻪاﯾﺪ. • ﻣﻤ ﻦ اﺳﺖ ﺑﻌﻀ ﻣﺘﻐﯿﯿﺮﻫﺎ در ٣٢bitﺟﺎ ﻧﮕﯿﺮﻧﺪ ،ﺷﺎﯾﺪ ﺑﺮای ﺑﻌﻀ ﻣﺘﻐﯿﯿﺮﻫﺎ ﺑﻪ ۶۴bitﻓﻀﺎ ﺑﺮای ﻣﺘﻐﯿﯿﺮﻫﺎ ﻧﯿﺎز ﺑﺎﺷﺪ. ٣ ٧ ﮐﺪم را ﺑﺎرﻫﺎ و ﺑﺎرﻫﺎ ﺗﺴﺖ ﮐﺮدم اﻣﺎ ﺳﺮور ﻧﻤﺮهی ﺑﯿﺸﺘﺮ از ۴٠ﺑﻪ ﻣﻦ ﻧﻤ دﻫﺪ .ﭼﺮا؟ ﺑﻌﻀ از ﺳﻮالﻫﺎ ﭼﻨﺪ Test Caseﮐﻮﭼ ﺗﺮ دارﻧﺪ ﺗﺎ اﻟ ﻮرﯾﺘﻢﻫﺎﯾﯽ ﺑﺎ ﭘﯿﭽﯿﺪﮔ ﮐﻤ ﺑﺎﻻﺗﺮ ﺑﺘﻮاﻧﻨﺪ ﻧﻤﺮهای ﺑ ﯿﺮﻧﺪ .ﻣﻤ ﻦ اﺳﺖ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﻓﻘﻂ ﺑﻪ آن Test Caseﻫﺎ ﭘﺎﺳ درﺳﺖ ﻣ دﻫﺪ .اﺣﺘﻤﺎﻻ ﯾﺎ زﻣﺎناﺟﺮای اﻟ ﻮرﯾﺘﻢﺗﺎن ﺑﺎﻻﺳﺖ ﯾﺎ ﺣﺎﻓﻈﻪی ﻣﺼﺮﻓ ،ﺷﺎﯾﺪ ﻫﻢ آراﯾﻪﻫﺎﯾﺘﺎن را ﮐﻤ ﮐﻮﭼ ﺗﻌﺮﯾﻒ ﮐﺮدهاﯾﺪ .ﻣﻤ ﻦ اﺳﺖ Test Caseﻫﺎی ﺑﺰرگ ﺑﻪ ﻣﺘﻐﯿﺮﻫﺎی ﺑﺰرگ ) ﺑﯿﺸﺘﺮ از ( ٣٢bitﻧﯿﺎز داﺷﺘﻪ ﺑﺎﺷﻨﺪ. ۴
© Copyright 2025 Paperzz