مشکل در ساختمان داده - نسخهی قابل چاپ صفحهها: ۱ ۲ |
مشکل در ساختمان داده - jafar.sh - 16 اسفند ۱۳۹۰ ۱۰:۰۶ ب.ظ
با سلام بر دوستان اگر دوستانی که درس ساختمان داده را در دانشگاه و یا حتی جاهای دیگه یاد گرفتند لطفا راهنمایی کنند؟؟؟؟ سئوا من در مورد پیچیده گی زمانی و مرتبه ی اجرا هست؟؟؟؟ (مخصوصا مرتبه اجرایی) به این حقه تو در تو لطفا نگاه کنید!!! مرتبه اجرایی این حلقه ۱۳ میشه؟؟ حال میخواستم بدونم چرا؟؟؟ من روند حلقه های تو در تو را نمیدانم???? یعنی عملیاتش چطوری هست؟؟؟؟؟؟؟!! لطفا هر کی بلده توضح بدهد!! سپاس |
RE: مشکل در ساختمان داده - لهمشد - ۱۶ اسفند ۱۳۹۰ ۱۰:۲۵ ب.ظ
(۱۶ اسفند ۱۳۹۰ ۱۰:۰۶ ب.ظ)jafar.sh نوشته شده توسط: با سلام بر دوستانچرا ۱۳ ؟ ببین کلا روند اجرا حلقه های تو در تو تو شرایط مختلف متفاوته خب مثلا بسته به زبان های مختلف syntx های مختلف می تونند داشته باشن این رو میگم ولی برا اینکه متوجه بشی یکی از این کتاب های کنکور کاردانی به کارشناسی واسه درس برنامه نویسی رو بخر اون رو بخونی متوجه میشی . اما جواب با فرض x=0 داریم به ازای i=1 حلقه j 2 بار اجرا میشه مقدارش میشه ۲ و بعد شرط حلقه غلط میشه حالا دوباره تو مرحله دوم اجراi=2 میره به حلقه j و دوبار اجرا میشه و مقدار x که ۲ بود ۲تا دیگه اضافه میشه و درنهایت میشه ۴ . کلا یه قانون برا این فرم از حلقه ها وجود داره : اگه حلقه برحسب n نوشته شده باشه (یعنی مقدار نهایی حلقه ی شما بجای ۲ , n باشه ترتیب به اینصورت هستش که به ازای هر بار اجرای حلقه خارجی n بار حلقه داخلی اجرا میشه . |
RE: مشکل در ساختمان داده - jafar.sh - 16 اسفند ۱۳۹۰ ۱۱:۰۴ ب.ظ
متشکر: منظور من این هست که چطور باید مرتبه اجراش زا فهمید!؟؟؟ من که زیاد متوجه نشدم چی گفتید!!! به ما یک روش دیگه گفتند که به صورت یک جدول هست!!! عکس را میزارم ببینید روش اش را !! راستی روش کار حلقه های تو در تو (for)چطوری هست!!؟؟؟ من توی کتاب جعفرنژاد را دیدم ولی مثال خوبی نزده بود!!! سپاس |
RE: مشکل در ساختمان داده - Aurora - 16 اسفند ۱۳۹۰ ۱۱:۳۰ ب.ظ
شرط رسیدن به پایان حلقه اول i<=2 و برای حلقه دوم همj<=2 است. به ازای هربار اجرای حلقه اول حلقه دوم باید اجرا شود. یعنی وقتی در حلقه اول i=1 است شرط i<=2 چک میشه چون شرط برقرار است وارد حلقه دوم شده و حلقه دوم هم اجرا شده (شرط حلقه دوم هم چک میشه j<=2 و در اینجا هم شرط برقرار است) و سپس دستور x=x+1 اجرا میشه. دوباره بر میگرده وارد حلقه دوم و شرط چک میشه j<=2 حالا که j=2 شده بازهم شرط برقرار است و بازهم دستورx=x+1 اجرا میشه. دوباره وارد حلقه دو میشه اینبار هم شرط چک میشه و چون j=3 هست شرط برقرار نیست و دستور x=x+1 اجرا نشده و حالا برمی گردیم به حلقه اول. اینبار شرط حلقه اول را برای i=2 چک می کنیم شرط برقراره و وارد حلق دوم میشیم و مراحلی که با رنگ دیگه مشخص کردم تکرار میشه. و همین طور ادامه میدیم. که اگه حساب کنید همان ۱۳ میشه. یعنی اینجا n=2 است. تو کنکور اینطوری سوال نمیدند که چند بار اجرا میشه . از شما مرتبه اجرایی میخوان که تو این سوال همون طور که تو شکلی که خودتون گذاشتید از مرتبه n^2 است (به ازای i<n , j<n ) |
RE: مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۱۲:۱۷ ق.ظ
نقل قول: اینبار شرط حلقه اول را برای i=2 چک می کنیم شرط برقراره و وارد حلق دوم میشیم و مراحلی که با رنگ دیگه مشخص کردم تکرار میشه. و همین طور ادامه میدیم. که اگه حساب کنید همان ۱۳ میشه. یعنی اینجا n=2 است. متشکر از شما ۴۰%حرف هاتون را فهمیدم :من چون پایه برنامه نویسی ضعیف هستن : مشکل دارم: کار حلقه های تو در تو را نمبدونم!!! ولی یک جاش را نفهمیدم لطفا راهنمایی کنید!! روند یا کار حلقه های تو در تو چطوری هست !!!!؟؟؟؟ یعنی تا چند دور حلقه ها تکرار میشند؟؟؟ |
RE: مشکل در ساختمان داده - Aurora - 17 اسفند ۱۳۹۰ ۰۹:۴۴ ق.ظ
باید بیاد حلقه رو خط به خط دنبال کنید. حلقه زیر رو در نظر بگیر [tex]for(i=1, i<=2, i )[/tex] در این حلقه شرط پایانی i<=2 است یعنی وقتی این شرط نقض بشه دیگه حلق تکرار نمیشه.پس برای i=1 و i=2 و i=3 حلقه بررسی میشه و در هر مرحله هم یک واحد به i اضافه میشه .پس این حلقه ۳ بار بررسی شد. در بار سوم که i=3 بررسی میشه چون شرط برقرار نیست وارد دستورات داخلی حلقه نشده و حلقه اجرا نمیشه. پس برای i=1,2 که شرط برقراره وارد دستورات داخلی میشه ولی برای i=3 وارد دستورات داخلی نمیشه و فقط عمل چک کردن انجام میشه. تا اینجا شد۳بار حالا فرض کنید که دوتا حلقه داریم [tex]for(i=1, i<=2, i )[/tex] [tex]for(j=1, j<=2, j )[/tex] گفتیم که حلقه بالا به ازای i=1,2 وارد دستورات داخلی میشه. وقتی i=1 است وارد حلقه۲ شده و حلقه ۲ هم به ازای j=1,2 وارد دستورات داخلی میشه . ولی خودش ۳بار شرط رو چک میکنه. پس وقتی i=1 است حلقه دوم ۳ بار چک میکنه و وقتی i=2 است بازهم ۳بار عمل چک کردن انجام میشه . حالا همون طور که در بالا گفتم به ازای i=3 دیگه دستورات داخل اجرا نشده. پس در اینجا هم دیگه حلقه دوم تکرار نمیشود. پس حلقه دوم ۶بار چک کردن رو انجام داد. خوب حالا فرض کنید که حلقه دوم یک دستور داخلی داره. [tex]for(i=1, i<=2, i )[/tex] [tex]for(j=1, j<=2, j )[/tex] [tex]x=x 1[/tex] دستور داخلی وقتی اجرا میشه که شرط حلقه دوم و حلقه اول درست باشه. یعنی به ازای i=1,2 و j=1,2 . وقتی که i=1 است شرط درسته وارد حلق دوم میشه. در حلقه دوم هم j=1 است درسته وارد دستور داخلی میشه. پس یکبار اجرا شد حالا j=2 میشه شرط برقراره دستور داخلی اجرا میشه پس شد ۲بار حالا j=3 میشه شرط درست نیست پس برمیگرده حلقه اول . حالا i=2 میشه شرط برقراره وارد حلق ۲ میشه. j=1 میشه شرط برقراره وارد دستور داخلی میشه. دستورداخلی یکبار دیگه اجرا میشه پس شد ۳بار. حالا j=2 میشه. باز شرط برقرار پس دستور داخلی بازهم اجرا شد پس شد. ۴بار پس داریم. ۴+۳+۶=۱۳ |
مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۱۰:۰۲ ق.ظ
یک دنیا ممنونم از شما دوست عزیز: انشا الله دانشگاه ارشد سراسری قبول بشید: واقعا خیلی قشنگ توضیح دادید: حق شما هست که استاد دانشگاه بشید والا ۸۰% را فهمیدم :فقط این حلقه های تو در تو را یکم هنگ میزنم: روند کارشان : سعی میکنم روش بیشتر کار کنم!!!! تا بفهمم : اگه نشد دوباره از شما راهنمایی طلب می کنم سپاس فراوان موفق باشد |
RE: مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۱۰:۱۶ ق.ظ
راستی یک سئوال دیگه هم داشتم لطفا راهنماییی کنید؟؟؟؟ جواب این مسئله چی میشه!!! مرتبه اجرایی چی میشه؟؟ مثل مثال قبلی!! لطفا اگه بلدید یک توضیح مختصر بدید!!؟؟؟؟ سپاس موفق باشید |
مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۱۲:۵۰ ب.ظ
بله : سئوالش همین هست!! جوابش چی میشه!!! ایا بی نهایت یار اجرا میشه؟؟؟ ایا فرمول خاصی براش میشه نوشت!؟؟؟ سپاس |
RE: مشکل در ساختمان داده - Aurora - 17 اسفند ۱۳۹۰ ۰۱:۱۷ ب.ظ
خوب اگه سوالتون درست باشه اینطوری حل میکنیم اول شرط رو چک میکنه یعنی بررسی میکنه که آیا i>1 است یانه. اگه درست بود که وارد حلقه میشه و دستور x=x+1 یکبار اجرا میشه. دوباره شرط بررسی میشه و چون i تغییری نکرده دوباره x=x+1 اجرا میشه. همین طور بار دیگه شرط بررسی میشه خوب i که تغییری نکرده پسx=x+1 دوباره اجرا میشه پس تا بینهایت همین طوری اجرا میشه چون هیچ وقت i به شرط توقف نمیرسه i اصلا تغییر نمیکنه. i همیشه ثابت خواهد ماند و همیشه i>1 خواهد بود. |
مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۰۱:۵۳ ب.ظ
متشکر از راهنمایی تان راستی اونجا پس n چه کاره هست؟؟؟ چون نوشته i=n !!! ایا نمیشه عددی را همینجوری به i یا n نسبت داد؟؟؟؟ یا روشی براش تعیین کرد؟؟ سپاس |
RE: مشکل در ساختمان داده - Aurora - 17 اسفند ۱۳۹۰ ۰۲:۳۱ ب.ظ
بله N خوب میتونه هر عددی باشه. مثلا اگه N =1 یا N=0 باشه هیچ وقت شرط حلقه درست نیست و هیچ بار اجرا نمیشه. ولی اینجا که مقدارش مشخص نیست من N رو یک عدد بزرگ در نظر گرفتم. |
مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۰۳:۲۷ ب.ظ
باز هم تشکر از شما دوست عزیز به نظر شما باید چه تغییراتی انجام داد تا حلقه بینهایت انجام نشه؟؟؟ لطفا اگه میتونید یک مثال در همین مورد بزنید که حلقه تکرا نشه و شرط مشخص داشته باشه؟؟!! سپاس |
RE: مشکل در ساختمان داده - Aurora - 17 اسفند ۱۳۹۰ ۰۴:۱۰ ب.ظ
اینجور سوالها حالت های مختلفی دارند. من دوتا مثال ساده می زنم. بهتره که شما هم از روی یک کتاب این مباحثو بخونید و تمرین حل کنید قلق کار رو متوجه می شید. j=n while j>1 do j=j-1 در مثال بالا j با مقدار n مقداردهی میشه. در داخل حلقه هربار از j یک واحد کم میشه تا j به مقدار کوچکتر یا مساوی ۱ برسه. پس به اندازه ی n بار حلقه اجرا میشه. یعنی اگر مثلا n= 5 قرار بدید، با هر اجرای حلقه یک واحد از j کم میشه. تا اینکه j به ۱ برسه. j=5 شرط درسته حلقه اجرا می شود j=4 شرط درسته حلقه اجرا می شود j=3 شرط درسته حلقه اجرا می شود j=2 شرط درسته حلقه اجرا می شود j=1 شرط درست نیست حلقه اجرا نمی شود j=n while j>1 do j=j/2 در این مثال هر بار j نصف میشه . خوب مسلما دیگه n بار اجرا نمیشه و کمتر از n بار خواهد بود. در اینجا اگه یک مثال بزنیم مثلا n=8 قرار بدیم در هر مرحله با نصف شدن j داریم j=8 شرط درسته حلقه اجرا می شود j=4 شرط درسته حلقه اجرا می شود j=2 شرط درسته حلقه اجرا می شود j=1 شرط درست نیست حلقه اجرا نمی شود. پس کلا ۳ بار اجرا شد. یعنی مرتبه log n است. |
مشکل در ساختمان داده - jafar.sh - 17 اسفند ۱۳۹۰ ۰۴:۱۹ ب.ظ
بسیار ممنون از شما به نظر شما بهترین کتاب برای ساختمان داده چی هست؟؟؟؟ که ساده و روان و با جزئیات کامل توضیح داده باشه؟؟؟؟ راستی من تازه تمرین اولی که حل کرده بودید را دیدم چرا حلقه ها را جدا جدا کرده بودید!!!! ادم یکم گیج میشه!!! اگه حلقه ها را باهم کلی حل می کردید خیلی خوب میشد!!! اون اولین جوابی که به من داده بودید که رنگ ابی نوشته بودید : دقیقا نصف مسئله را قشنگ توضیح داده بودید و فهمیده بودم: لطفا نصف دیگه اش را توضیح بدید؟؟؟؟ لطفا به اون سبک بگویید!! موفق باشید سپاس |