• بازدید : 43 views
  • بدون نظر
این فایل قابل ویرایش می باشد وبه صورت زیر تهیه شده وشامل موارد زیر است:

الگوریتم های مختلف ممکن است یک عمل را با دستورات مختلف در مدت زمان، جا، وبا تلاش کمتر یا بیشتری نسبت به بقیه انجام دهد. برای مثال با داشتن دو دستور تهیه ی سالاد سیب زمینی، یکی ممکن است قبل از جوشاندن اول سیب زمینی را پوست بکند در حالی که دیگری این دو مرحله را برعکس انجام دهد، و هر دو این مراحل را برای تمام سیب زمینی ها تکرار می کنند تا وقتی که سالاد سیب زمینی آماده طبخ شود. >!—مثال ضعیف… چه کسی سیب زمینی ها را جدا جدا می جوشاند؟ و معمولاً تهیه ی سالاد نیازی به پخت و پز ندارد
در بعضی کشورها، مثل امریکا، اگر تعبیه فیزیکی الگوریتم ها ممکن باشد ممکن است آن ها به شدت انحصاری شود (برای مثال، یک الگوریتم ضرب ممکن است در واحد محاسبه ی یک ریز پردازنده تعبیه شود ).
الگوریتم های رسمی شده(formalized algorithms )
الگوریتم ها به خاطر روش پردازش اطلاعات توسط کامپیوتر اساسی و حیاتی هستند، چون یک برنامه کامپیوتری اساساً یک الگوریتم است که به کامپیوتر می گوید برای انجام یک عمل خاص مثل محاسبه حقوق کارمندان و یا چاپ ورقه گزارش دانش آموزان،چه مراحل خاصی را (با چه نظم خاصی) اجرا کند،.به این صورت، یک الگوریتم را می توان هر دنباله از دستوراتی که قابل اجرا توسط یک Turing complete باشد به حساب آورد.
به طور نمونه ای هنگامی که الگوریتم کار پرازش اطلاعات را انجام می دهد، داده از طریق یک وسیله یا منبع ورودی گرفته، به یک وسیله خروجی یاsink نوشته و / یا برای استفاده در زمانی دیگر ذخیره می شود. داده ذخیره شده به عنوان بخشی از حالت درونی««internal state نهاد مجری الگوریتم تلقی می گردد.
برای اعمال محاسباتی از این قبیل، الگوریتم باید به دقت تعریف شود :یعنی طوری مشخص شود که برای حالت مختلف محتمل معتبر باشد. یعنی تمام مراحل شرطی باید به طور سیستماتیک بررسی شود ; حالت به حالت.ضابطه مربوط به هر حالت باید واضح (و محاسبه پذیر) باشد.
چون الگوریتم ها لیست دقیقی از گام های دقیق است، نظم محاسبه تقریباً همیشه برای کار کرد الگوریتم اساسی می باشد. همواره فرض می شود دستور ها روشن هستند، و گفته می شود از” بالا آغاز” و”تا پایین کشیده می شوند”، اندیشه ای که به طور رسمی تر توسط جریان کنترل توصیف می شود.
تا اینجا ی بحث، رسمی سازی قواعد و قوانین برنامه نویسی امری (imperative programming) را به خود گرفت. این عام ترین مفهوم است، و تلاش دارد با وسایل “مکانیکی” مجزا کاری را توصیف کند؛ عملیات تخصیص، تعیین مقدار یک متغیر، برای این مفهوم از الگوریتم رسمی شده یکتا می باشد .در زیر مثالی از این تخصیص آمده است.
برای مفاهیم فرعی(alternative) تشکیل دهنده یک الگوریتم برنامه نویسی تابعی و برنامه نویسیی منطقی را ببینید.
اجرای الگوریتم
الگوریتم ها نه تنها توسط برنامه های کامپیوتری بلکه اغلب توسط دستگاه های دیگر، از جمله شبکه بیولوژیکی عصبی (برای مثال چگونگی انجام محاسبات توسط مغز انسان و یا اینکه یک حشره چگونه غذا را رد یابی می کند)، یا ]]مدارهای الکتریکی[ و در دستگاه های مکانیکی به کار گرفته می شود.
تحلیل و مطالعه الگوریتم ها یک شاخه از علم کامپیوتر است و اغلب به طور انتزاهی (بدون استفاده از هیچ زبان برنامه نویسی خاص، یا دیگرابزار) انجام می شود. از این نظر، به دیگر disciplineهای ریاضی شبیه است که در آن ها تحلیل بر disciplineهای زمینه یک الگوریتم، تمرکز دارد و نه بر هر اجرای خاصی از الگوریتم. یک راه شامل کردن (و بعضی مواقع رمزگذاری) الگوریتم ها نوشتن شبه دستور العمل یا برنامه است.
بعضی برنامه نویسان تعریف “الگوریتم” را به رویه هایی که سر انجام پایان می پذیرند محدود می کنند. بعضی دیگر با این بهانه که برای انجام این اعمال دایمی به نهادی نیاز است، رویه های پایان نا پذیر را شامل می کنند. در حالت دوم پیروزی نتیجه را نمی توان توقف با یک خروجی معنادارتوصیف نمود.در عوض موفقیت باید برای سری های خروجی نا محدود تعریف شوند. برای مثال، الگوریتمی که مشخص می کند در یک سری دودویی نامحدود تصادفی تعداد صفرها بیشتر است یا یک ها، برای کارا بودن باید تا ابد در حال اجرا باشد. خروجی یک الگوریتم در صورت اجرای صحیح مفید خواهد بود: چون تا هنگامی که سری را برسی می کند اگر تعداد ۰ های شمارش شده از ۱ ها بیشتر شود.الگوریتم پاسخی مثبت می دهد، و بر عکس. برای این الگوریتم موفقیت را می توان به این صورت تعریف کرد که اگر تعداد ۰ ها در این سری واقعاً از تعداد ۱ ها بیشتر باشد، که یک پاسخ مثبت و در تمام حالات دیگر ترکیبی از جواب مثبت و منفی بدهد.
مثال:
فرض کنید آرایه ای از اعداد مرتب نشده تصادفی دارید وهدف ما پیدا کردن بزرگترین عدد است.با یک نگاه به مسئله متوجه می شوید که باید تمام اعداد آرایه را برسی کنید. با کمی فکر کردن متوجه می شوید که هر عدد را فقط یک بار باید بررسی کنید.با این جزییات در اینجا یک الگوریتم ساده برای آن آرایه شده است:
    فرض کنید که اولین عضو آرایه بزرگترین عدد است.
    عدد بعدی را با این عدد مقایسه کنید.
    فقط در حالتی که آن عدد بزرگتر است،آنرا بزرگترین عدد فرض کنید.
    مرحله ۲ و ۳ را تا پایان آرایه تکرار کنید.
 
در اینجا یک رمز گذاری رسمی تر یک الگوریتم در یک شبه برنامه که شبیه بیشتر زبان های برنامه نویسی است آمده است:
یک آرایه با نام “List” داریم.
largest = List1
counter = 2
while counter <= length(List):
if Listcounter > largest:
largest = Listcounter
counter = counter + 1
print largest
شرح نماد گذاری
    نماد ” = ” که در اینجا مورد استفاده قرار گرفت تخصیص را نشان می دهد. یعنی مقدار سمت راست رابطه به متغیر سمت راست تخصیص داده می شود.
    “Listcounter” نشان دهنده عنصرcounter ام آرایه می باشد. برای مثال، اگر مقدار counter”” برابر ۵ باشد، “Listcounter” به پنجمین عنصر آرایه اشاره می کند.
    “<=” علامت “کوچکتر از، یا مساوی با” است.
 
توجه کنید در این الگوریتم فرض می شود آرایه دست کم دارای یک عضو است. این الگوریتم برای یک آرایه خالی کار نمی کند. بیشتر الگوریتم ها برای ورودی شان شرط هایی را قرار می دهند که به آن پیش شرط «pre-conditional )گفته می شود.
بیشتر مردمی که با الگوریتم ها کار می کنند دوست دارند بدانند یک الگوریتم به چه میزان از یک منبع خاص (مثل زمان یا حافظه) نیاز دارد. برای به دست آوردن مقادیر کمی، روش هایی برای تحلیل الگوریتم ها آرایه شده است.برای مثال، اگر طول آرایه را با حرف O به همراه nنشان دهیم الگوریتم بالا به زمانی برابر با O(“n”) نیاز دارد.

عتیقه زیرخاکی گنج