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

مرتبه زمانی - haamidit - 05 آذر ۱۳۹۱ ۰۵:۵۹ ب.ظ

باسلام
چرا حلقه داخلی ربطی به حلقه خارجی نداره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
for(int i=0;i<n-i;++i

( for(int i=0;i<n-i;++i
}
/*process a*/
}


مرتبه زمانی - javadem - 05 آذر ۱۳۹۱ ۰۶:۲۵ ب.ظ

اینبرنامه مشکل داره.
اولا چون اگر حلقه داخلی باشه نباید با متغیر i تعریف میشد چون این متغیر مربوط به حلقه بالاییه!
ثانیا اگر هم که حلقه بالایی تموم میشه قبل از این که حلقه دوم شروع بشه باید یه سمیکالن داشته باشه!
حالا اگر همه اینها رفع بشه! یعنی حلقه بالایی سمیکالن نداشته باشه اما حلقه داخلی با یه متغیر دیگه تعریف بشه (مثلا j) اونوقت اگه بازم حد بالای حلقه داخلی بازم همینی که هست باشه حتما حلقه داخلی به حلقه بالاییش وابسته است!
یعنی:
(for(int i=0;i<n-i;++i
(for(int j=0;j<n-i;++j
}
/*process a*/
{
حالا اگر for بالایی با یه سمیکالن آخرش همراه بشه و همه چیز همونی باشه که شما گفتید حلقه ها جدا از هم میشن!
یعنی این:
;(for(int i=0;i<n-i;++i
(for(int i=0;i<n-i;++i
}
/*process a*/
{
و حالت آخر اگر حلقه بالایی با یک متغیر دیگه باشه (مثلا j) و حلقه پایینی بی تغییر بمونه اونوقت بازم حلقه ها جدا از هم میشن!
یعنی:
(for(int j=0;j<n-j;++j
(for(int i=0;i<n-i;++i
}
/*process a*/
{
البته حالت های دیگه ای هم هست که فکر کنم این ۳تا واسه درک مطلب کافی باشن!

RE: مرتبه زمانی - aatwo - 05 آذر ۱۳۹۱ ۰۶:۵۳ ب.ظ

(۰۵ آذر ۱۳۹۱ ۰۵:۵۹ ب.ظ)haamidit نوشته شده توسط:  باسلام
چرا حلقه داخلی ربطی به حلقه خارجی نداره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
for(int i=0;i<n-i;++i

( for(int i=0;i<n-i;++i
}
/*process a*/
}

ربطی نداره چون در حلقه دوم i بازهم مقدار دهی شده

RE: مرتبه زمانی - nasi1391 - 05 آذر ۱۳۹۱ ۰۷:۳۱ ب.ظ

(۰۵ آذر ۱۳۹۱ ۰۶:۵۳ ب.ظ)aatwo نوشته شده توسط:  
(05 آذر ۱۳۹۱ ۰۵:۵۹ ب.ظ)haamidit نوشته شده توسط:  باسلام
چرا حلقه داخلی ربطی به حلقه خارجی نداره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
for(int i=0;i<n-i;++i

( for(int i=0;i<n-i;++i
}
/*process a*/
}

ربطی نداره چون در حلقه دوم i بازهم مقدار دهی شده

سلام
ببخشید همهتوت اشتباه گفتین ! به این دلیله که تو حلقه دوم دوباره i تعریف شده و کامپایلر این i رو از اون i مجزا میدونه.

RE: مرتبه زمانی - nasi1391 - 05 آذر ۱۳۹۱ ۱۰:۲۷ ب.ظ

(۰۵ آذر ۱۳۹۱ ۰۷:۴۸ ب.ظ)javadem نوشته شده توسط:  با سلام دوباره به آقا نادر(البته اگه درست حدس زده باشم)کامپایلرت چیه که توی یه حلقه تودر تو اجازه تعریف دوباره i رو میده؟
بعد حالا گیرم که اجازه هم بده، اونوقت در زمان استفاده از کجا میفهمه که کدوم به کدومه؟

با سلام دوباره به آقا جواد (البته اگر درست حدس زده باشم) کامپایلر من هست borland ولی چه ربطی به کامپایلر من داره ؟
من کلی حرف زدم ! تو هر کامپایلر استانداری که این برنامه رو بنویسی متغییر حلقه اول رو از متغییر حلقه دوم مجزا میدونه.
چرا ؟ چون دوباره تعریفش کردیم. مثلا توی حلقه دوم برو و int رو بردار و بعد برنامه رو اجرا کن و میبینی که متغییر حلقه اول رو در حلقه دوم آدم حساب میکنه و تعداد اجرا ها می شود : [tex]\frac{n 1}{2}[/tex]

RE: مرتبه زمانی - aatwo - 05 آذر ۱۳۹۱ ۱۰:۵۰ ب.ظ

(۰۵ آذر ۱۳۹۱ ۰۷:۳۱ ب.ظ)nasi1391 نوشته شده توسط:  
(05 آذر ۱۳۹۱ ۰۶:۵۳ ب.ظ)aatwo نوشته شده توسط:  
(05 آذر ۱۳۹۱ ۰۵:۵۹ ب.ظ)haamidit نوشته شده توسط:  باسلام
چرا حلقه داخلی ربطی به حلقه خارجی نداره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
for(int i=0;i<n-i;++i

( for(int i=0;i<n-i;++i
}
/*process a*/
}

ربطی نداره چون در حلقه دوم i بازهم مقدار دهی شده

سلام
ببخشید همهتوت اشتباه گفتین ! به این دلیله که تو حلقه دوم دوباره i تعریف شده و کامپایلر این i رو از اون i مجزا میدونه.
بحث نوع کامپایلر نیست دوسته عزیز اگه منظورتون از تعریف دوباره i همون مقدار دهی دوباره هست خوب منم همون رو گفتمExclamation دقت فرمایید

Re: مرتبه زمانی - Amir V - 06 آذر ۱۳۹۱ ۰۱:۰۴ ق.ظ

دوستان یه مثال از یه الگوریتم بگید که نیاز به تغییر متغیر داشته باشه.

Sent from my Google Galaxy Nexus using Tapatalk 2.4