بازديدكننده محترم، چنانچه لينك، وبسايت، وبلاگ، مطلب يا فايلی متناسب و مرتبط با مطالب اين وبلاگ می شناسيد و يا در راستای بهتر شدن وبلاگ پيشنهاد و دیدگاهی داريد، می توانيد از طريق بخش نظرات يا پست الكترونيكی، ارسال نمایید.

لطفا در ارسال پیشنهادها و دیدگاه ها، موارد زیر را مدنظر داشته باشید:

 * تا حد امکان، دیدگاه ها، پیشنهادها و انتقادهای خود را به صورت عمومی و با متن کاملا رسمی، ارسال نمائید و در صورت لزوم به ارسال نظر خصوصی، صرفا از طریق ایمیل - پست الکترونیکی - اقدام بفرمائید. نظراتی که جنبه شخصی داشته باشد، نمایش داده نخواهد شد.

* به مباحث، موارد و نکاتی پرداخته شود که به موضوع و مطالب وبلاگ، مرتبط بوده و بیشتر جنبه علمی و کاربردی داشته باشد تا با مطرح شدن آنها، منجر به اثر بخشی و هم افزایی بیشتر شود.

* حتما متن پیشنهادها، دیدگاه ها و پرسش های مرتبط با مطالب وبلاگ را به صورت فارسي تايپ نمائید. مواردی که به صورت فينگليش تایپ شود، بررسی و نمایش داده نخواهند شد.

* پیش از نوشتن کامنت، پیشنهاد، دیدگاه و یا پرسش، کامنت ها و پاسخ های قبلی را در بخش نظرات، ملاحظه بفرمائید تا کامنت یا پرسش شما، احیانا تکراری نباشد.

* چنانچه لینک دانلود فایلی یا لینک وبسایت و وبلاگی، نامعتبر شده بود، می توانید از طریق ایمیل یا بخش نظرات اطلاع دهید تا نسبت به اصلاح آن، اقدام شود.

 سپاس از بازدید و همکاری شما



:: موضوعات مرتبط: ارسال ديدگاه ها و پیشنهادها
:: برچسب‌ها: دیدگاه ها, پیشنهادها, نظرات
ن : K. Mirzaie
ت :

از آغاز سال 95، برای وبلاگ برد الکترونیکی، "کانال تلگرام" ایجاد شده است. در این کانال، معمولا مطالب مرتبط با موضوعات وبلاگ به صورت خلاصه، اعلام و معرفی می شود، به گونه ای که جزئیات و مطالب بیشتر، در معرفی لینک ها و یا ارجاع به وبلاگ خواهد بود.

دانشجویانی که خواستار پیوستن به کانال تلگرام وبلاگ eBoard هستند، می توانند ایمیلی با عنوان "درخواست لینک کانال وبلاگ" و با متنی مشابه با مضمون متن زیر، به ایمیل مشخص شده در انتهای همین صفحه، ارسال نمایند تا پس از بررسی درخواست آنها و در صورت تایید، لینک کانال را دریافت کنند.


سلام

اینجانب ............ دانشجوی درس ......... از دانشگاه ....... در مقطع ...........، خواستار پیوستن به کانال تلگرام وبلاگ eBoard هستم.

تاریخ



:: برچسب‌ها: کانال تلگرام
ن : K. Mirzaie
ت :

Parallel Processing

Fall 1396

Instructor: Kamal Mirzaie

Description - Lectures - Grading - Languages and Tools - References - Useful Links

Description

Parallel Processing may refer to Parallel Computing. Parallel computing is a type of computation in which many calculations are carried out simultaneously, operating on the principle that large problems can often be divided into smaller ones, which are then solved at the same time. There are several different forms of parallel computing: bit-level, instruction-level, data, and task parallelism. Parallelism has been employed for many years, mainly in high-performance computing, but interest in it has grown lately due to the physical constraints preventing frequency scaling. As power consumption (and consequently heat generation) by computers has become a concern in recent years, parallel computing has become the dominant paradigm in computer architecture, mainly in the form of multi-core processors. - From Wikipedia, the free encyclopedia
 

This is a Master's course in Computer Engineering(Software, Hardware and Artificial Intelligence). So, This course is recommended for students in Computer Engineering or Computer Science who are interested in scientific computing and would like to obtain a first `hands-on experience' in parallel programming. In this course, students will learn how to design a parallel algorithm for a problem from the area of scientific computing and how to write a parallel program that solves the problem.

Grading

Your performance will be assessed by assignments, project, class participation and final exam. Their weights are:

  •     Final Exam: 70%
  •     Project Report: 30%
Assignments have to be typed, if you want them corrected. All of students must work on assignments individually. The assignments play a crucial part in understanding the course material and must be turned in by class time on the due date for full credit. Participation means coming to class, asking questions, taking part in discussions and so on.

Languages and Tools

MPI:
MPI.NET and C#:
MATLAB and MPI:
Hadoop:
Java and Parallel Computing:
Python and Parallel Processing:

References

Recommended Textbooks


[1] B. Parhami, "Introduction to Parallel Processing: Algorithms and Architectures" , Kluwer Academic Publishers, 2002.
[2] A. Grama, A. Gupta, G. Karypis and V. Kumar , "Introduction to Parallel Computing" , Second Edition, Addison Wesley, 2003. (PDF files)
[3] H. Casanova, A. Legrand, and Y. Robert "Parallel Algorithms" , CRC Press, 2009.

Other Textbooks

[4] R. Neapolitan , "Foundations Of Algorithms" , 5th Edition, Jones & Bartlett Learning, 2014.
[5] T. Cormen, C. Leiserson, R. Rivest and C. Stein , (CLRS) "Introduction to Algorithms" , Third Edition, MIT press, 2009.
[6] M. J. Quinn, "Designing efficient algorithms for parallel computers" , McGraw-Hill, 1987.
[7] S. G. Akl, "The Design and Analysis of Parallel Algorithms" , Prentice Hall, 1989.
[8] J. JaJa , "Introduction to parallel algorithms" , Addison Wesley, 1992.
[9] F. Gebali, "Algorithms and Parallel Computing" , A John Wiley & Sons, Inc., 2011.
[10] P. Pacheco, “An Introduction to Parallel Programming” , Morgan Kaufmann, 2011.

If you have any comments and suggestions about the class and my teaching course, or you know any links about this course, you can send me a mail. I would really appreciate your feedback. Also, If you happen to find an incorrect or non-functional link, please inform me.

Description - Lectures - Grading - Languages and Tools - References - Useful Links

Last Updated: 96/07/07


:: موضوعات مرتبط: پردازش موازی
:: برچسب‌ها: پردازش موازی, محاسبات موازی, موازی
ن : K. Mirzaie
ت :

پردازش موازی


مراجع فارسی


نویسنده: هانری کازانووا، آرنولوگران، ایو روبر، مترجم: عین ا... جعفرنژاد قمی، الگوریتم های موازی ناشر: علوم رایانه؛ چاپ اول، تابستان 88


نویسنده: وی راجارامان، سی سیوارام مولتی، مترجم: قدرت الله سپیدنام، معماری و برنامه نویسی كامپیوترهای موازی ناشر: علوم رایانه؛ 1384



پيوست های جزوه پردازش موازی

مفاهیم پایه

برنامه نویسی موازی

وبلاگ های فارسی

كتاب های مرتبط با الگوریتم های موازی
  • ترجمه فصل هایی از کتاب موازی GGKK

نمونه سوال های امتحانی پردازش موازی
 
چنانچه پیشنهاد يا انتقادی در مورد ویراست هشتم نوشتار و يا مطالب فارسی مرتبط با درس پردازش موازی دارید، می توانید از طریق ایمیل یا بخش نظرات اطلاع دهيد.

آخرین به روز رسانی: 96/07/07
 


:: موضوعات مرتبط: پردازش موازی
:: برچسب‌ها: موازی, پردازش موازی
ن : K. Mirzaie
ت :

گزارش های و مطالب برگزیده برای پردازش موازی

گزارش های برگزیده درس موازی

عنوان

دانشجو

سال

دريافت

یافتن مؤلفه های همبند در یک گراف با MPI.NET

مهدی زارع

96

دانلود

موازی سازی الگوریتم استراسن با MPI.Net

منصور آسیابان پور

96

دانلود

بررسی الگوریتم‌های ضرب ماتریس در CUDA

محمد داود موحدی نیا

96

دانلود

برنامه نویسی و معماری کودا - CUDA Programming

محمدجواد دهقانی

95

دانلود

برنامه نویسی کودا - CUDA Programming

لیدا زارعیان

95

دانلود

موازی‌سازی الگوريتم درون‌يابي لاگرانژ با MPI.NET

اعظم کارگر

94

دانلود

مقایسه دو معماری .NET Remoting و MPI.NET درمحاسبه عدد پی

مالک انوری

94

دانلود

حل مسئله n وزیر با الگوریتم آنالینگ شبیه‌سازی شده موازی

محمد جواد زارع

94

دانلود

کشف رمز MD5 به روش ترکیبی با رویکرد نگاشت کاهش در MPI.NET

محسن رنجبر

93

دانلود

یافتن درخت پوشای کمینه با استفاده از الگوریتم های پریم و کروسکال موازی

شورجه - اصفهانیان - راهنورد

93

دانلود

آشنایی با اجرای موازی الگوریتم ها در پلتفرم JPPF

امیرحسین ده مولائی

93

دانلود

اجرای یک برنامه موازی در حوزه پردازش تصویر با امکانات پردازش موازی متلب

میلاد رمضانی

93

دانلود

آشنایی با روند موازی‌سازی در متلب

علی ابراهیمی

93

دانلود

مبانی برنامه نویسی موازی GPU همراه با چند مثال

مینا قراچه

93

دانلود

برنامه نویسی پردازنده های گرافیکی

مجید آزادی

92

دانلود

الگوریتم موازی کلونی زنبور عسل مصنوعی برای مسئله n وزیر

محمد زارع

92

دانلود

موازی سازی محاسبه دترمينان ماتريس به روش گاوس

الهام زاده - حجتی

92

دانلود

موازی‌سازی برخی الگوریتم‌های تشخیص لبه در متلب

بهزدایان- خواجه

92

دانلود

نصب و راه اندازی ابزار برنامه نویسی هادوپ

حمیدرضا زارع

92

دانلود

رمزنگاری موازی تصاوير RGB با MPI.NET

نجاتی - نصیری

92

دانلود

موازی سازی الگوریتم دایجسترا همراه با یک مثال ساده دیگر در MPI.NET

علی اسلامی

92

دانلود

پردازش موازی داده‌ها با استفاده از مدل نگاشت - کاهش

احمدرضا پاکرایی

91

دانلود


مطالب و کتب آموزشی برای درس موازی

عنوان

نویسنده

سال

دريافت

آموزش JPPF

--

--

دانلود

آموزش MPI.Net

نيك محمد بلوچ زهی

--

دانلود

آشنایی با اصول و کاربردهای پردازش موازی

خراسانی - دانشگاه صنعتی شریف

--

دانلود

هادوپ

شهلا صفری

1392

دانلود

محاسبات موازی

ماهنامه شبکه

1389

دانلود

برنامه نویسی موازی

ماهنامه شبکه

1389

دانلود

بررسی الگوریتم ژنتیک در حل TSP و NP-Hard

بابازاده

1391

دانلود

الگوریتم های فرا اکتشافی جستجو: الگوریتم های ژنتیک

مصطفی عباسی کیا

1388

دانلود

آموزش محاسبات موازی با MPI

--

2001

دانلود

Parallel Computing Toolbox: User's Guide(MATLAB)

MathWorks

2013

دانلود

Introduction to Parallel Computing

Blaise Barney

2013

دانلود

Introduction to Parallel Computing -eBook

GGKK

2003

دانلود


پایان نامه های مرتبط با پردازش موازی

عنوان

نویسنده

سال

دريافت

Using Map-Reduce for Large Scale Analysis of Graph-Based Data

Nan Gong

2011

دانلود

Parallelizing Support Vector Machines for Scalable Image Annotation

Nasullah Khalid Alham

2011

دانلود

K-means Clustering Using Hadoop

Grace Nila Ramamoorthy

2011

دانلود

Parallel Sparse Linear Equation Solver Using CUDA

Andrew J. Martin

2011

دانلود

A Parallel Genetic Algorithm for Placement and Routing

Jacob A. Berlier

2011

دانلود

Learning Based Admission Control and Task Assignment in MapReduce

Jaideep Datta Dhok

2010

دانلود

GPU-based acceleration of selected clustering techniques

Grzegorz Karch

2010

دانلود

Comparison of Parallel Programming Paradigms

Stephen Bartlett

2009

دانلود

A Parallel Algorithm for Fast Edge Detection on the Graphics Processing Unit

Alexander Lee Jackson

2009

دانلود

GPU-Based Markov Decision Process Solver

Ársæll Þór Jóhannsson

2009

دانلود

Data Clustering Using MapReduce

Makho Ngazimbi

2009

دانلود

Parallel Computing in Local Area Networks

Fernando G. Tinetti

2003

دانلود

Parallel Algorithms and Permutation

Lap K. Mui

1995

دانلود


اگر پیشنهاد، دیدگاه یا انتقادی در مورد گزارش های برگزیده، مطالب آموزشی و پایان نامه های مرتبط با درس پردازش موازی دارید، می توانید از طریق ایمیل یا بخش نظرات اطلاع دهيد.

آخرین به روز رسانی: 96/09/09
 


:: موضوعات مرتبط: پردازش موازی
:: برچسب‌ها: پردازش موازی
ن : K. Mirzaie
ت :

Advanced Programming

Spring 1396

Instructor: Kamal Mirzaie

| Description | Lectures | Grading | References | Films | Useful Links |

Description

...

Grading

Your performance will be assessed by assignments, quizzes, class participation and final exam. Their weights are:
  •    Final Exam: 75%
  •    Project Report: 25%

Assignments have to be typed, if you want them corrected. All of students must work on assignments individually. The assignments play a crucial part in understanding the course material and must be turned in by class time on the due date for full credit. Participation means coming to class, asking questions, taking part in discussions and so on.

References

Recommended Textbooks


[1] R. Neapolitan , "Foundations Of Algorithms" , 5th Edition, Jones & Bartlett Learning, 2014.
[2] T. Cormen, C. Leiserson, R. Rivest and C. Stein , (CLRS) "Introduction to Algorithms" , Third Edition, MIT press, 2009.


Films

Useful Links

Courses:
Peoples:

If you have any comments and suggestions about the class and my teaching course, or you know any links about this course, you can send me a mail. I would really appreciate your feedback. Also, If you happen to find an incorrect or non-functional link, please inform me.

Description - Lectures - Grading - References - Films - Useful Links


Last Update: 96/02/24


:: موضوعات مرتبط: برنامه سازی پیشرفته (کارشناسی)
:: برچسب‌ها: برنامه نویسی پیشرفته
ن : K. Mirzaie
ت :

Algorithm Design

Spring 1397

Instructor: Kamal Mirzaie

| Description | Lectures | Grading | References | Films | Useful Links |

Description

“To make a computer do anything, you have to write a computer program. To write a computer program, you have to tell the computer, step by step, exactly what you want it to do. The computer then ‘executes’ the program, following each step mechanically, to accomplish the end goal. When you are telling the computer what to do, you also get to choose how it’s going to do it. That’s where computer algorithms come in. The algorithm is the basic technique used to get the job done.”

Algorithm design is a specific method to create a mathematical process in solving problems. Applied algorithm design is Algorithm Engineering. Algorithm design is identified and incorporated into many solution theories of operation research, such as dynamic programming and divide-and-conquer. Techniques for designing and implementing algorithm designs are algorithm design patterns, such as template method pattern and decorator pattern, and uses of data structures, and name and sort lists. Some current day uses of algorithm design can be found in internet retrieval processes of web crawling, packet routing and caching. - From Wikipedia, the free encyclopedia

The study of algorithms is one of the central areas of Computer Science. Algorithmic ideas arise frequently in the several sub-areas within computer science as well as beyond; a small sample of these areas include computer systems and networks, data mining, computer vision, social networks, economics and biology. This course encompasses most aspects of the study of algorithms, though some areas are covered in more detail than others. Algorithm types we will consider include:

  •   Brute Force Algorithms
  •   Simple Recursive Algorithms
  •   Divide and Conquer Algorithms
  •   Simple Iterative Algorithms
  •   Dynamic Programming Algorithms
  •   Greedy Algorithms
  •   Backtracking Algorithms
  •   Branch and Bound Algorithms
  •   Advanced Topics in Algorithm Design

Lectures


Lecture #
Title Status
00
  Preface
Completed
01
  Introduction
Completed
02
  Algorithm Analysis
Completed
03
  Divide and Conquer
Completed
04
  Recurrence Equations
Completed
05
  Dynamic Progamming
Completed
06
  Dynamic Progamming(cont)
Completed
07
  Greedy Approach
Completed
08
  Backtracking
Completed
09
  Branch and Bound
Completed
10
  Advanced Topics
Completed
--
  References
Completed

Grading

Your performance will be assessed by assignments, quizzes, class participation and final exam. Their weights are:
  •    Final Exam: 80%
  •    Project Report: 20%

Assignments have to be typed, if you want them corrected. All of students must work on assignments individually. The assignments play a crucial part in understanding the course material and must be turned in by class time on the due date for full credit. Participation means coming to class, asking questions, taking part in discussions and so on.

References

Recommended Textbooks


[1] R. Neapolitan , "Foundations Of Algorithms" , 5th Edition, Jones & Bartlett Learning, 2015.
[2] T. Cormen, C. Leiserson, R. Rivest and C. Stein , (CLRS) "Introduction to Algorithms" , Third Edition, MIT press, 2009.


Other References:

[3] Kleinberg and Eva Tardos, "Algorithm Design" , 2006.
[4] G. Brassard and P. Bratley, "Fundamental of Algorithms" , First Edition, Prentice Hall, 1996.
[5] H. S. Wilf, "Algorithms and Complexity" , Internet Edition, Summer, 1994.
[6] Peter Gacs and L. Lovasz, "Complexity of Algorithms" , Lecture Notes, Spring 1999.
[7] Lothaire, "Applied Combinatorics on Words" , 2004.

Films


If you have any comments and suggestions about the class and my teaching course, or you know any links about this course, you can send me a mail. I would really appreciate your feedback. Also, If you happen to find an incorrect or non-functional link, please inform me.

Description - Lectures - Grading - References - Films - Useful Links

Last Update: 96/12/01


:: موضوعات مرتبط: طراحي الگوريتم ها (کارشناسی)
:: برچسب‌ها: الگوریتم, طراحی الگوریتم ها, آنالیز الگوریتم ها
ن : K. Mirzaie
ت :

هوش مصنوعی و سیستم های خبره

برای دريافت فايل ها، پس از كليك روی دانلود و وارد شدن به سايت پرشين گيگ، روی دكمه دانلود راست كليك كرده و سپس Save As را انتخاب كنيد

سری

موضوع

صفحه

اندازه

دريافت

00

پيشگفتار

-

73 KB

دانلود

01

عامل های هوشمند

1

341 KB

دانلود

02

روش های جستجو

7

211 KB

دانلود

03

مساله ارضا محدوديت

19

435 KB

دانلود

04

بازی؛ جستجوی رقابتی

23

681 KB

دانلود

05

عامل های دانش پایه

31

161 KB

دانلود

06

روش های استنتاج

43

237 KB

دانلود

07

منطق: بازنمایی دانش

51

148 KB

دانلود

08

رايانش نرم

61

654 KB

دانلود

09

روش های برنامه ريزی

71

728 KB

دانلود

10

كاربردهايی از هوش مصنوعی

75

459 KB

دانلود

--

منابع و مراجع

81

067 KB

دانلود

مراجع فارسی


نويسنده: استورات جی راسل، پيتر نورويگ، مترجم: سعيد راحتی، محمد بهداد، حميد تيموری، رويکردی نوين در هوش مصنوعی -جلد 1، چاپ نهم 1389، ناشر: دانشگاه امام رضا


نويسنده: بن کوپین، مترجم: سیدهاشم داورپناه، عبدالرضا میرزایی، هوش مصنوعی ، چاپ سوم 1389، ناشر: سخن‌گستر

نويسنده: ایلین ریچ، مترجم: مهرداد فهیمی، هوش مصنوعی، ويرايش اول، چاپ پنجم 1385، ناشر: جلوه


پيوست های جزوه هوش مصنوعی

هوش مصنوعی
عامل و عامل های هوشمند
الگوريتم های جستجو
  • آنالينگ شبيه سازی شده
  • الگوريتم های جستجو در عامل های هوشمند
  • مساله تنگ آب؛ فرض كنيد دو ظرف پنج ليتری و هفت ليتری داشته باشيم و هیچکدام از دو ظرف، درجه بندی نشده است. چگونه می توانيم ظرف هفت ليتری را دقيقا از شش ليتر آب پركنيم؟
نظریه بازی ها
بازنمايی دانش
رايانش نرم
تمرین های حل شده توسط دانشجويان
پاسخ تمرین های جزوه هوش مصنوعی
نمونه سوال های امتحانی هوش مصنوعی
نمونه سوال ها و اسلايدهای پیام نور
كاربردهای هوش مصنوعی
موارد دیگر
كتاب ها

چنانچه پیشنهاد يا انتقادی در مورد ویراست هشتم جزوه درس و يا مطالب مرتبط با درس هوش مصنوعی دارید، می توانید از طریق ایمیل یا بخش نظرات اطلاع دهيد.

آخرین به روز رسانی: 95/07/07
 


:: موضوعات مرتبط: هوش مصنوعی و خبره (کارشناسی)
:: برچسب‌ها: هوش مصنوعی, سیستم های خبره
ن : K. Mirzaie
ت :

طراحی الگوريتم ها


فصل های كتاب برای امتحان پايان ترم 

 
مراجع فارسی 


نويسنده: ریچارد نیپولیتان و کیومرث نعیمی پور، مترجم: عین الله جعفرنژادقمی، طراحی الگوریتم ها ، ويرايش چهارم، چاپ اول 1390؛ ناشر: علوم یارانه


نويسنده: توماس کورمن، چارلز لیزرسون، رونالد دیوست، کلیفورد اشتاین، مترجم: علی دهقان طرزه، یحیی تابش، مقدمه ای بر الگوریتم ها چاپ اول 1389، ناشر: نص


پيوست های جزوه طراحی الگوريتم ها

آناليز لگوريتم ها و روابط بازگشتی

الگوريتم های مرتب سازی

تمرین های حل شده توسط دانشجویان

پاسخ تمرین های جزوه طراحی الگوریتم ها

نمونه سوال های امتحانی طراحی الگوریتم ها
  • نمونه سوال آزمون تشريحی پايان ترم از آقای نادری
  • نمونه سوال امتحان تستی پايان ترم طراحی الگوريتم
  • پرسش های امتحان تشریحی طراحی الگوریتم نیمسال دوم 89-88
  • عناوين فصل های كتاب برای امتحان پايان ترم طراحی الگوريتم و نمونه سوال ميانترم

جزوه های مدرسین دیگر

اسلايدها و نمونه سوال های پیام نور

نرم افزارها و ابزراها

كتاب ها


 
چنانچه پیشنهاد يا انتقادی در مورد ویرایش دهم جزوه درس و يا مطالب مرتبط با درس طراحی الگوريتم ها دارید، می توانید از طریق ایمیل یا بخش نظرات اطلاع دهيد.

آخرین به روز رسانی: 95/07/07 
 


:: موضوعات مرتبط: طراحي الگوريتم ها (کارشناسی)
:: برچسب‌ها: الگوریتم ها, طراحی الگوریتم ها
ن : K. Mirzaie
ت :

Languages and Tools

for
Parallel Processing
MPI:
MPI.NET and C#:
MATLAB and MPI:
PVM:
Hadoop:
Java and Parallel Computing:
Parallel Programing:
Laboratories:
If you know the similar links, you can send me a mail.
Last updated: 94/07/12


:: موضوعات مرتبط: پردازش موازی
:: برچسب‌ها: پردازش موازی, برنامه نویسی موازی
ن : K. Mirzaie
ت :

به نام خدا
 
بعد از صرف وقت و انرژی برای انجام یک پروژه، تجاربی حاصل می شود که قطعا برای دیگران رهگشا بوده و کار صعب ایشان را اگر نه آسان، لااقل مسیر آن را روشن می سازد. با اینکه در کلاس توضیحات کافی  داده می شود اما آنچه اغلب در انجام پروژه طراحی الگوریتم ها مشاهده  می شود سردرگمی دانشجویان در انجام پروژه این درس است. شاید دلیل آن ناشناخته ماندن هدف از این درس است. سعی شده است در چند بند و بصورت آموزشی موارد لازم که سوالات بیشتر دانشجویان را شامل می شود به تبیین مراحل و چگونگی انجام پروژه برای این درس پرداخته شود.
1) پروژه خواسته شده شامل موارد زیر است
1. کد برنامه
2. شبه کد برنامه(pseudocode)
3. الگوریتم برنامه
4. تابع پیچیدگی و مرتبه آن :مرتبه یک قطعه کد با توجه به حلقه ها در قطعه کد اصلی برنامه بدست می آید. ممکن است برای مثال تابع پیچیدگی کل کد یک برنامه 12n^3+5n باشد اما قطعه کد اصلی برنامه دارای تابع پیچیدگی 2n^2 باشد. تابع پیچیدگی از روی کد برنامه بدین ترتیب محاسبه می گردد که اگر حلقه ها درون هم باشند گام های حلقه ها، که البته لزوما هم یکسان نیستند، در هم ضرب شده و اگر متوالی باشند گام های حلقه ها با هم جمع می شوند. برای مثال در مثال یاد شده فوق کل برنامه می تواند دارای 12 حلقه for  بوده که هرکدام دارای 3 حلقه  for تودرتو باشند و نیز دارای 5 حلقه  for متوالی باشد. و در قطعه کد اصلی احتمالا فقط 2 حلقه  for  داریم که هرکدام دارای 2 حلقه  for  تودرتو می باشند. همچنین واضح است 12n^3+5n از مرتبه n^3  و همچنین 2n^2 از مرتبه  n^2 می باشد.
5. منحنی نمودار برنامه:  بدین صورت که  یک طرف آن ورودی برنامه و طرف دیگر زمان بدست آمده برچسب خواهد خورد. البته مناسب است که نمودار دیگری با استفاده از تابع پیچیدگی رسم گردد تا در صورت درستی تابع، یکسان بودن رشد نمودار دیده شود.( یکبار بصورت شهودی بوسیله عملیات زمانگیری، یکبار بوسیله محاسبات ریاضی).
با بدست آوردن مقادیر می توان در برنامه Excel نمودار آن را به هر طریقی که مورد نظر است(تغییرات یک متغیر یا مقایسه تغییرات چند متغیر) مشاهده کرد. کافیست داده ها را در ستون ها(برای هر متغیر یک ستون) متناظر باهم نوشته و سپس از زبانه Insert و در قسمت Scatter نوع نمودار و شکل آنرا تعین نمود.
6. بررسی شود که برنامه با کدام یک از روش هایی که در کلاس بحث شده، انجام گرفته است.
2) نحوه ی زمانگیری
اصولا زمانگیری دو گونه است:
1. بوسیله تنظیم دستی زمان در برنامه
2. بوسیله ساعت سیستم
ما در اینجا به شرح روش دوم می پردازیم. این روش بدین صورت است  که ابتدا تعداد کلاک اجرای برنامه رابدست آورده و بر تعداد کلاک در هر ثانیه تقسیم می کنیم. نتیجه با دقت میلی ثانیه خواهد بود.
در این روش ضمن اضافه کردن تابع کتابخانه ای time.h به ابتدای برنامه، قبل از اجرای قطعه کد اصلی برنامه باید این خط را اضافه نمود:
clock_t start = clock();
و در پایان قطعه کد اصلی برنامه :
printf("\nTime elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
لازم به ذکر دو نکته در استفاده از این قطعه کد است:
یکم اینکه اگر قسمت اول کد از ابتدای برنامه استفاده گردد زمانگیری دقیق نبوده و یا اشتباه خواهد بود. بدین صورت که زمان اضافی شامل مکث کاربر جهت ورودی داده را نیز ثبت خواهد کرد، که این مورد نظر نیست.
دوم اینکه اگر در برنامه خواهان دوبار زمانگیری در یک برنامه باشیم، کافیست نام متغیر زمانگیری را بدین صورت برای بار دوم به بعد تغییر دهیم:
clock_t start1 = clock();
و در چاپ نیز بدین صورت با همان نام ایجاد شده:
printf("\nTime elapsed: %f\n", ((double)clock() – start1) / CLOCKS_PER_SEC);
و همینطور الی آخر برای دیگر زمانگیری ها.
 
3) تسهیل عملیات زمانگیری
چیزی که بمرور در هنگام زمانگیری با آن مواجه خواهید شد که بنظر خسته کننده می رسد، تکرار دادن ورودی های بزرگ و بزرگتر است ضمن اینکه بطور دقیق نمی دانیم ممکن است چقدر طول بکشد(البته تقریبی آن با تابع پیچیدگی ممکن است). در اینجا راهی که بنظر می رسید این است برنامه را بدین صورت بازنویسی کرد که قطعه اجرایی مورد نظر ما را چند بار در برنامه با ورودی مورد نظرمان تکرار کنیم و در هر بار به روش گفته شده برای زمانگیری های مکرر در یک برنامه، عمل زمانگیری را انجام دهیم. با این روش می توان با یکبار اجرای برنامه بدون نیاز به مراجعات پی در پی، مقصود حاصل می گردد.
اما نکته ای که لازم به توجه است این است که در برنامه هایی که چاپ بدفعات انجام می پذیرد(مثل برج های هانوی) بعد از دومین ورودی بزرگ و چاپ زمان، دیگر اولین زمانگیری قابل رویت نیست. دو راه پیشنهاد می گردد:
راه یکم
 
آنکه چاپ ها را به آخر برنامه موکول کنیم. البته باید زمان هر ورودی را منهای زمان ورودی قبلی بکنیم تا زمان آن مرحله بدست آید.
راه دوم راه متداولتری است. بدین صورت که زمان هر مرحله در متغیری بطور جداگانه ذخیره و در انتها چاپ می کنیم. در یک مثال بطور کامل با این روش آشنا خواهیم شد.
برای قطعه کد زیر می خواهیم عملیات زمانگیری را انجام دهیم:
#include
#include
 
int main()
{
   int n, x;
   printf( "How many disks? " );
   scanf( "%d", &n );
   printf("\n");
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
 
  getch();
  return 0;
}
می خواهیم به ازای مقادیر 14و 15و 16 و17 و18 و 19 برای n عملیات زمانگیری را در یک بار اجرای برنامه انجام دهیم.با تغییرات گفته شده که در کد برنامه ایجاد می کنیم برنامه بصورت زیر درخواهد آمد:
#include
#include
#include
 
int main()
{
   int n, x;
   float t,t1,t2,t3,t4,t5; //متغیرها برای هرکدام از زمانگیری ها
 
   n=14;
   clock_t start = clock();
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
   t=(((double)clock() - start) / CLOCKS_PER_SEC); // ذخیره زمان برای ورودی14
           
   n=15;
   clock_t start1 = clock();
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
   t1=((double)clock() - start1) / CLOCKS_PER_SEC; // ذخیره زمان برای ورودی15
 
   n=16;
   clock_t start2 = clock();
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
   t2=((double)clock() - start2) / CLOCKS_PER_SEC; // ذخیره زمان برای ورودی16
 
   n=17;
   clock_t start3 = clock();
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
   t3=((double)clock() - start3) / CLOCKS_PER_SEC; // ذخیره زمان برای ورودی17
 
   n=18;
   clock_t start4 = clock();
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
   t4=((double)clock() - start4) / CLOCKS_PER_SEC; // ذخیره زمان برای ورودی18
  
   n=19;
   clock_t start5 = clock();
   for (x=1; x < (1 << n); x++)
      printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
   t5=((double)clock() - start5) / CLOCKS_PER_SEC; // ذخیره زمان برای ورودی19
 
   printf("\nTime elapsed: %f\n", t); // چاپ زمان ها بترتیب
   printf("\nTime elapsed: %f\n", t1);
   printf("\nTime elapsed: %f\n", t2);
   printf("\nTime elapsed: %f\n", t3);
   printf("\nTime elapsed: %f\n", t4);
   printf("\nTime elapsed: %f\n", t5);
 
  getch();
return 0;
}
 
که نتیجه اجرای مطابق شکل زیر است


راه سوم راه بهتر و حرفه ای تر بوده ضمن آنکه بدین دلیل که معمولا زمانگیری عملی طولانی خواهد بود، ممکن است در حین انجام این عمل برنامه به هر دلیل متوقف شود و زمانگیری های انجام شده قبلی نیز از بین بروند، بهتر است از فایل در برنامه استفاده شود. بدین صورت که بعد از هربار چاپ، زمانگیری انجام شده در فایل متنی ذخیره گردد. بدین ترتیب زمانگیری تا مرحله انجام شده محفوظ خواهد بود.
4) عموما برنامه هایی که توسط خود دانشجویان نوشته می شود بدون توجه به این موضوع انجام می گیرد که در هنگام زمانگیری نیاز به دادن ورودی های بسیار بزرگ نیز وجود دارد. و این بی توجهی باعث بروز خطاهایی مانند سرریز(overflow) می شود. بهتر است از ابتدا برنامه ها را بصورت پویا و با استفاده از آرایه پویا یا پشته(تابع بازگشتی هم از پشته استفاده می کند) انجام داد.
همچنین باید این موضوع برای دانشجویان روشن شود که همه برنامه ها لزوما برای محیط آزمایشی تدریس نیستند. یعنی واقعا می شود برنامه هایی داشت با توان قبول ورودی های بسیار بسیار بزرگ که به درستی جواب می دهند.
5) مکث در هنگام چاپ
برنامه ها با ساختمان داده هایی که ابتدا محاسبات باید کامل انجام شود سپس چاپ در خروجی انجام پذیرد در هنگام دادن ورودی های بزرگ برای چاپ با مکث مواجه می شویم. گاهی این مکث بسیار طولانی می شود. اما برنامه هایی که از پشته و یا تابع بازگشتی بنحوی استفاده می کنند بدین صورت که در هر بار بازگشت چاپ داریم این مکث را ندارند. چون زمان محاسبات بین چاپ ها تقسیم شده و محسوس نیست.
6) چگونه ورودی بزرگ برای برنامه با ورودی های ترتیبی وارد کنیم؟
وقتی برنامه ای با آرایه پویا می نویسیم که توانایی گرفتن تا حتی یک میلیون عدد را داشته و محاسباتی انجام می دهد با این سوال مواجه می شویم که چطور ورودی ها را بدهیم؟
پاسخ در تابع رندوم است. به این صورت که برای هر خانه ی آرایه یک عدد رندوم تولید کرده و آنرا درون آن خانه می ریزیم. نحوه کار بدین ترتیب است
:
printf("kafe maghadir:");//برای انتخابی کردن کف و سقف مقادیر رندوم که داخل آرایه پویا می ریزیم
scanf("%d",&a);
printf("saghfe maghadir:");
scanf("%d",&b);
srand(time(0)); //برای اینکه اعداد تصادفی تولید شده در هر بار متفاوت باشد
for (i = 0;    i < n; i++ )// ایجاد اعداد رندوم به تعداد ورودی خواسته شده
      {
         int rand100 = rand()%(b-a+1)+a;
         *(z+i)=rand100; //قرار دادن هر مقدار تولید شده در یک خانه از آرایه پویا که از اشاره گر استفاده شده
   }
 
قطعه کد فوق در ابتدا بازه تولید اعداد رندوم را از کاربر گرفته و کمترین را در a و بیشترین را در b قرار می دهد. سپس با استفاده از تابع رندوم و کف و سقفی که به آن داده ایم آماده ایجاد اعداد رندوم به تعداد عناصر آرایه پویای z است. در حلقه هربار عدد رندوم در بازه داده شده تولید شده و بترتیب به عناصر آرایه پویا نسبت داده می شود.
 اعداد رندوم بصورت پیشفرض در هر بار یکسان تولید می شوند. در صورت تمایل برای ایجاد اعداد تصادفی متنوع در هر بار باید ایجاد کننده اعداد تصادفی( random seed ) تغییر کند. بنابراین از تابع srand(int seed) استفاده شده است. که میتوان مقدار seed را در هربار از کاربر پرسید تا هربار اعداد تولید شده متفاوت باشند. اما راه بهتر برای تولید اعداد تصادفی متفاوت آن است که seed را بوسیله ساعت سیستم یعنی با time(0) در هربار متمایز کنیم، بدون آنکه لازم باشد از کاربر بخواهیم.
7) طرح یک سوال:
چرا چاپ؟
چرا در زمانگیری باید چاپ داشته باشیم؟ آیا واقعا چاپ لزومی دارد؟
بسیاری از برنامه ها اصلا چاپ های متوالی ندارند و حتی برای ورودی های بسیار بزرگ هم محاسبات آن بیش از چند دقیقه بطول نخواهد انجامید.
بعنوان مثال در برنامه های برجهای هانوی درصورتی که چاپ متوالی حرکات دیسک را نداشته باشیم براحتی تا حدود 40 دیسک را در مرز دقیقه خواهیم داشت. درحالیکه با چاپ برای 27 دیسک در بهترین حالت(الگوریتم دودویی) 7 ساعت و 20 دقیقه طول می کشد. مشخص است که اکثر زمان مربوط به عمل چاپ کردن است. چاپ کردن چه ارزشی دارد؟ اصلا ارزشی در محاسبات زمانگیری الگوریتم ها دارد؟
برای آزمایش تغییر جزئی در برنامه ایجاد می کنیم. \n های پایان printf ها را برداشته و عبارت توضیحی چاپ را کوتاه می کنیم. نتیجه بسیار تامل برانگیز است. در حالت قبلی برای 22 دیسک زمان در الگوریتم بازگشتی 1، زمان 836.609  ثانیه ثبت شده است. اما در حالتی که تغییرات یاد شده اعمال گشته زمانگیری عدد 629.766 ثانیه را نشان می دهد.
بنظر می رسد بهتر است اگر برنامه قابلیت محاسبه ورودی های بسیار بالا را دارد، یا از چاپ صرفه نظر شود یا عبارت چاپ در نهایت کوتاهی انجام شود تا فقط صحت برنامه آزمایش گردد. در هر حال منحنی ورودی- زمان تغییر محسوسی نخواهد داشت. بدین ترتیب زمان کمتری صرف زمانگیری خواهد شد.
8) این پست یا ابه اصطلاح راهنما باز گذاشته می شود تا تجربیات ارزشمند دیگر دوستان در ادامه آن ثبت گردد. بارزترین نکته آنکه از زبان c بعنوان پایه استفاده شده است اما در این درس از زبان های برنامه نویسی دیگر نیز می توان استفاده کرد. امید است بمرور بدل به راهنمای جامع و کاملی گردد تا دانشجویان بطور کامل از اطلاعات مفید آن بهره کافی ببرند.
همچنین این راهتما در سایت برنامه نویس به عنوان یک تاپیک گذاشته شده است. می توانید از طریق لینک زمانگیری-اجرای-یک-برنامه به زبان سی به آن دسترسی داشته باشید.
 
بازدیدکنندگان این پست می توانند نظرات تکمیلی خود را از طریق نظرات همین پست، ارسال کنند.
 
 علی آیت اللهی نصرآبادی
 ايميل


:: موضوعات مرتبط: طراحي الگوريتم ها (کارشناسی)
ن : K. Mirzaie
ت :

Journals and Conferences

about
Parallel Processing

Journals:

IEEE Journals:

Elsevier Journals:

Springer Journals:

Taylor & Francis Journals:

Others Journals:

Conferences:

If you know other Journals and Conferences about Parallel Algorithm Design course, you can send me a mail.
Last updated: 94/07/12


:: موضوعات مرتبط: پردازش موازی
:: برچسب‌ها: مجله, کنفرانس, پردازش موازی
ن : K. Mirzaie
ت :
 
صفحه اصلی

.:: Kamal Mirzaie ::.