تالار گفتمان مانشت
تحلیل زمانی دو حلقه تو در تو - نسخه‌ی قابل چاپ

تحلیل زمانی دو حلقه تو در تو - H-Arshad - 10 آبان ۱۳۹۵ ۰۲:۰۴ ق.ظ

سلام امکان داره توضیح بفرمائید این چجوری حساب شده Huh

RE: تحلیل زمانی دو حلقه تو در تو - Behnam‌ - ۱۰ آبان ۱۳۹۵ ۰۲:۳۲ ق.ظ

(۱۰ آبان ۱۳۹۵ ۰۲:۰۴ ق.ظ)H-Arshad نوشته شده توسط:  سلام امکان داره توضیح بفرمائید این چجوری حساب شده Huh
توضیحاتی که داده بدیهی هست.
هدف این هست که تعداد مقداردهی رو بدست بیاره. حلقه‌ی بیرونی، n بار اجرا می‌شه که در هر بار اجراش متغیر i مقداردهی میشه، بعدش در حلقه‌ی داخلی هم متغیر j و sum مقداردهی می‌شن. مقداردهی i به این صورت هست که مقدار جدیدش رو میگیره، ولی j و sum هر بار که حلقه‌ی بیرونی اجرا میشه، مقادیر ثابت میگیرن، j میشه ۱ و sum میشه a0. پس در بار اول، i که صفر بوده، مقدار ۱ رو میگیره، j=1 و sum=a0، بار دوم که حلقه‌ی بیرون اجرا بشه، i مقدار ۲ میگیره و j=1 و sum=a0. بار آخر (که i=n-1 و حلقه‌ی داخلی اجرا خواهد شد)، i مقدارش n میشه (در نتیجه سری بعدی که مقایسه رو انجام داد، دیگه حلقه ادامه پیدا نمیکنه) و دوباره j=1 و sum=a0. پس اجرای حلقه‌ی بیرونی، منجر به n بار مقداردهی‌ میشه که هر بار ۳ متغیر مقدار میگیرند میشه، یعنی ۳n تا مقداردهی. اون i=0 هم که خودش ۱ تا مقداردهی هست.
و اما حلقه‌ی داخلی؛ مقداردهی‌های j=1 و sum=a0 رو که در بالا به حساب آوردیم. میمونه یک [tex]j++[/tex] و اون sum = sum + aj که ۲ مقداردهی هست. ولی این حلقه چند بار اجرا میشه؟ وقتی i=0 هست که اجرا نمیشه. برای i=1 یک بار اجرا میشه، برای i=2 دو بار و ... برای i=n-1 هم n-1 بار اجرا میشه (هر بار از ۱ تا i). پس به ازای iهای ۱ تا n-1، به ترتیب ۱ تا n-1 بار اجرا میشه و هر بار دو مقداردهی میکنه که تعداد کلشون میشه [tex]\sum_{i=1}^{n-1}2i[/tex]. این وسط ۳n تا به خاطر حلقه‌ی بیرونی و یکی هم برای i=0 داریم.