PDA

View Full Version : مبتدی: چگونه طراحی الگوریتم یاد بگیرم ؟



xcalibo
جمعه 27 تیر 1393, 02:15 صبح
سلام خدمت دوستان عزیز.
راستیتش من در طراحی الگوریتم و تحلیل الگوریتم خیلی ضعیف هستم. تو دانشگاه هم همینجوری ساختمان داده ها . الگوریتم و هوش مصنوعی رو پاس کردیم.
الان هم در کد نویسی خیلی دچار مشکل میشم. دیروز تو نوشتن برنامه چاپ اعداد فیبوناچی هنگ کرده بودم که بعد مجبور شدم به کتاب رجوع کنم.
میخواستم کمکم کنید. کتاب یا مرجع یا یه چیز آموزشی هست که بتونم ازش کمک یا روشی که بشه راحتر الگوریتم رو تحلیل و به کد تبدیل کنم ؟
ممنون

abbas.oveissi
شنبه 28 تیر 1393, 03:40 صبح
سلام،کلا یکی از سخت ترین مسائل کامپیوتر این هست به شما یک مساله جدید بدهند بعد شما حلش کنید.طراحی الگوریتم در دانشگاه نه تنها خیلی سخت نیست بلکه میشه گفت آسون هست،دلیلش هم اینه به شما میگن ضرب ماتریس ها را چگونه پرانتز گذاری کنید تا بهینه بشه؟بعد راه حل رو هم میدن میگن این یعنی Dynamic Programming ،توی امتحان هم همین رو میخوان.ولی سخت ترین مسائل،مسائل Dynamic Programming هست که برای اینکه عادت به حل همچین مساله هایی بکنید حداقل چند ماهی نیاز به تمرین دارید.
برای پیشرفت در این قضیه سه تا کار باید بکنید،
اول - ساختمان های داده رو بشناسید مثلا در سی پلاس پلاس Set,Map,Array,Vector,Stack,Queue یا ... و بعد اطلاعات پایه ای در مورد IF و For و اینجور چیزها داشته باشید.حتی بدونید تابع بازگشتی چیست و چگونه کار میکند.
دوم - باید الگوریتم ها را بدانید و منطقشون رو درک کنید مثل انواع مرتب سازی ها،پیمایش های DFS و BFS یا ... که میتونید از CLRS استفاده کنید.این لینکش : http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844
سوم - حالا این دو مرحله تقریبا میشه 20 درصد کار،ولی سخت ترین این مرحله هست که باید تمرین های مختلف پیدا کنید و حل کنید.برای اینکار دنبال سوال های تمرینی مسابقات ACM بگردید.زمانی که ده تا سوال از بخش گراف ها که به پیمایش ربط دارند حل کنید،شک نکنید هر سوالی که در این رابطه ببینید ناخودآگاه میتوانید حدس بزنید نیاز به DFS هست یا BFS ! از این جهت میگم ACM که در نگاه اول شاید سوال هایی که از بخش گراف میبنید بی ربط به گراف باشه،اما زمانی که مهارت کسب کنید خودتون میتونید تشخیص بدید از چه الگوریتمی برای حل باید استفاده کنید.این نکته در دنیای واقعی به شما کمک میکند تا بتوانید مسائل دنیای واقعی را با الگوریتم های مختلف که تشخیص میدهید حل کنید.

m.alinejad
شنبه 28 تیر 1393, 21:09 عصر
کتاب Introduction to Algorithms که در بالا معرفی شده رو می تونید از لینک زیر دانلود کنید.
http://ebook-dl.com/item/introduction_to_algorithms_clrs

xcalibo
دوشنبه 30 تیر 1393, 00:00 صبح
سلام،کلا یکی از سخت ترین مسائل کامپیوتر این هست به شما یک مساله جدید بدهند بعد شما حلش کنید.طراحی الگوریتم در دانشگاه نه تنها خیلی سخت نیست بلکه میشه گفت آسون هست،دلیلش هم اینه به شما میگن ضرب ماتریس ها را چگونه پرانتز گذاری کنید تا بهینه بشه؟بعد راه حل رو هم میدن میگن این یعنی Dynamic Programming ،توی امتحان هم همین رو میخوان.ولی سخت ترین مسائل،مسائل Dynamic Programming هست که برای اینکه عادت به حل همچین مساله هایی بکنید حداقل چند ماهی نیاز به تمرین دارید.
برای پیشرفت در این قضیه سه تا کار باید بکنید،
اول - ساختمان های داده رو بشناسید مثلا در سی پلاس پلاس Set,Map,Array,Vector,Stack,Queue یا ... و بعد اطلاعات پایه ای در مورد IF و For و اینجور چیزها داشته باشید.حتی بدونید تابع بازگشتی چیست و چگونه کار میکند.
دوم - باید الگوریتم ها را بدانید و منطقشون رو درک کنید مثل انواع مرتب سازی ها،پیمایش های DFS و BFS یا ... که میتونید از CLRS استفاده کنید.این لینکش : http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844
سوم - حالا این دو مرحله تقریبا میشه 20 درصد کار،ولی سخت ترین این مرحله هست که باید تمرین های مختلف پیدا کنید و حل کنید.برای اینکار دنبال سوال های تمرینی مسابقات ACM بگردید.زمانی که ده تا سوال از بخش گراف ها که به پیمایش ربط دارند حل کنید،شک نکنید هر سوالی که در این رابطه ببینید ناخودآگاه میتوانید حدس بزنید نیاز به DFS هست یا BFS ! از این جهت میگم ACM که در نگاه اول شاید سوال هایی که از بخش گراف میبنید بی ربط به گراف باشه،اما زمانی که مهارت کسب کنید خودتون میتونید تشخیص بدید از چه الگوریتمی برای حل باید استفاده کنید.این نکته در دنیای واقعی به شما کمک میکند تا بتوانید مسائل دنیای واقعی را با الگوریتم های مختلف که تشخیص میدهید حل کنید.

ممنون آقای اویسی. همین روند رو ادامه میدم تا ببینم میتونم یه تحلیلگر خوبی بشم. :قلب:

xcalibo
دوشنبه 30 تیر 1393, 00:01 صبح
کتاب Introduction to Algorithms که در بالا معرفی شده رو می تونید از لینک زیر دانلود کنید.
http://ebook-dl.com/item/introduction_to_algorithms_clrs

ممنون دوست عزیز.

xcalibo
دوشنبه 30 تیر 1393, 00:40 صبح
فقط کتابی برای ساختمان داده ها در java میشناسید معرفی کنید.
چون من جاوا کار میکنم.

abbas.oveissi
دوشنبه 30 تیر 1393, 02:43 صبح
فقط کتابی برای ساختمان داده ها در java میشناسید معرفی کنید.
چون من جاوا کار میکنم.
من چون خودم جاوا کار حرفه ای نبودم و فقط در حد اندروید بلدم،کتاب هاشو هم نمیشناسم که معرفی کنم.ولی میتونید توی همین فروم در بخش جاوا جستجو کنید یا یک تاپیک ایجاد کنید تا دوستان بهتون کمک کنند.البته برای تحلیلگر نرم افزاری فقط دونستم اینجور الگوریتم ها کافی نیست ،چون مخصوصا توی ایران خیلی از این الگوریتم ها اصلا در برنامه ها استفاده نمیشوند.ولی حداقل در حد متوسط هم توی این بخش کار کنی در فهم خودتون از برنامه نویسی خیلی کمک میکنه.