دستاورد ها در زبان پایتون چیست ؟

1

دستاورد ها در زبان پایتون چیست ؟

کیانا ابراهیمی سوال پاسخ داده شده اکتبر 15, 2020
گذاشتن نظر
0

دستاورد ها در زبان پایتون چیست ؟

اگر با تابع fibonacci از بخش 5-7 کار کرده باشید، احتمالاً متوجه شدهایـد کـه هـر چـه آرگومان مقرر بزرگتر باشد زمان بیشتري صرف اجراي تابع میشود. بهعلاوه زمان اجـرا خیلـی سـریع افـزایش مــییابــد. بــر روي یک ـی از ماشـینهــاي مــا، (20(fibonacci فــوراً اجـرا مــیشــود، (30(fibonacci حدود 1 ثانیـه زمـان مـیبـرد و (40(fibonacci تقریبـاً تـا ابـد بـه طـول میانجامد. یک گراف فراخوانی، مجموعه قابهاي تابع را با خطوطی کـه هـر قـاب را بـه قـابهـاي توابـع فراخوانــده شــده وصـل مــیکننـد نمـایش مــیدهـد. در بــالاي گــراف fibonacci بــا a4=na، fibonacci با 3 = n و 2 = n را صدا مـیزنـد. بـه همـین ترتیـب fibonacci بـا a3=na، fibonacci با 2 = n و 1 = n را فرامیخواند و … . تعداد دفعات فراخوانی (0(fibonacci و (1(fibonacci را بشمارید. این یک راه حـل ناکارآمد مسأله است و همینطور که آرگومان تابع بزرگتر میگردد، وضع بدتر و وخیمتر میشود. یک راه حل مناسب براي این مسأله حفظ مقادیر از پیش محاسبه شده بهوسـیلۀ مرتـب کـردن آنها در یک دیکشنري است. به مقداري که قبلاً محاسبه شده و براي استفاده در محاسبات بعدي به کار میرود دستاورد میگویند. در اینجا اجرایی از fibonacci را با استفاده از دستاوردها میبینیم:

previous = {0:1, 1:1}
def fibonacci(n):
if previous.has_key(n):
return previous[n]
else:
newValue = fibonacci(n-1) + fibonacci(n-2)
previous[n] = newValue
return newValue

دیکشنري previous اعداد فیبوناچی را که تاکنون بهدست آوردهایم، ثبت میکند. تنها با دو جفت، عملیات را شروع میکنیم: 0 به 1 و 1 هم به 1 نگاشت میکند. هر گاه که fibonacci فراخوانی شود، دیکشنري را چک میکند تا تعیـین کنـد آیـا حـاوي نتیجه هست یا نه. اگر نتیجه در دیکشنري موجود بود تابع میتواند بدون هیچگونه فراخوانی بازگشـتی سریعاً بازگردد، در غیر این صورت باید مقدار جدید را محاسبه نماید. این مقدار جدید قبـل از بازگشـت تابع به دیکشنري اضافه میشود. با استفاده از این نسخۀ fibonacci ماشینهاي ما (40(fibonacci را در یک چشم به هم زدن محاسبه میکنند. اما هنگامی که سعی میکنـیم (50(fibonacci را محاسـبه کنـیم بـه اشکالی متفاوت بر میخوریم:

>> fibonacci(50)
OverflowError: integer addition

پاسخی که تا یک دقیقۀ دیگر خواهید دید 074,011,365,20 میباشد. مشکل آنجـا اسـت که این عدد براي جا شدن در متغیرهاي صحیح پایتون (integer) خیلی بـزرگ اسـت و سـرریز میشود. خوشبختانه این مشکل راه حل سادهاي دارد.

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

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

کیانا ابراهیمی سوال پاسخ داده شده اکتبر 15, 2020
گذاشتن نظر
پاسخ خود را بنویسید .
  • فعال
  • بازدیدها1491 times
  • پاسخ ها1 پاسخ
ورود به متاورس | متاورس ایرانی
ورود به متاورس ایران یا همان متاورس ملی

علامت ذره بین Tutorials سمت راست به رنگ قرمز به شما کمک خواهد کرد .

جدید ترین سوالات پرسیده شده

منقضی شدن سم بتانال 1 پاسخ | 0 آرا
ایا ایدز گزفتم؟ 0 پاسخ ها | 0 آرا
انتخاب ورزش رزمی 0 پاسخ ها | 1 رای
وزارت تعاون کار و رفاه اجتماعی نماد اعتماد الکترونیک اسناد و املاک کشور مرکز آموزش ویدیویی انجمن حم فروشگاه ملی تولید کنندگان مدیریت بر مدیران حم سامانه حیوانات رسانه ملی اخبار متا دانشگاه متاورس استخدام | دانش فروشگاه حم تبلیغات ملی بازار NFT متاورس رنگ نقشه ملی سه بعدی متا املاک و مستغلات