collections.deque – پشته های سریع و قوی
<a href=”https://collections.deque/”>collections.deque</a> – پشته های سریع و قوی
کلاس deque یک صف دو طرفه را اجرا می کند که پشتیبانی می کند
افزودن و حذف عناصر از هر دو طرف در زمان O(1) (استهلاک نشده). زیرا deques از افزودن و حذف عناصر پشتیبانی می کند
از هر دو طرف به یک اندازه خوب، آنها می توانند هم به عنوان صف و هم به عنوان خدمت کنند
پشته ها.31
اشیاء deque پایتون به صورت لیست هایی با پیوند دوگانه پیاده سازی می شوند که
به آنها عملکرد عالی و ثابت برای درج و
حذف عناصر، اما عملکرد ضعیف O(n) برای دسترسی تصادفی
عناصر در وسط یک پشته.32
به طور کلی، collections.deque یک انتخاب عالی است اگر به دنبال آن هستید
پشته ساختار داده در کتابخانه استاندارد پایتون که دارای ویژگی های عملکرد یک پیاده سازی لیست پیوندی است.
from collections import deque
s = deque()
s.append(‘eat’)
s.append(‘sleep’)
s.append(‘code’)
s
deque([‘eat’, ‘sleep’, ‘code’])
s.pop()
‘code’
s.pop()
‘sleep’
s.pop()
‘eat’
s.pop()
IndexError: “pop from an empty deque”
queue.LifoQueue – قفل کردن معناشناسی برای موازی
محاسبه
این پیادهسازی پشته در کتابخانه استاندارد پایتون همگامسازی شده است و معنایی قفل را برای پشتیبانی از چندین همزمان ارائه میکند.
تولیدکنندگان و مصرف کنندگان.33
علاوه بر LifoQueue، ماژول صف شامل چندین کلاس دیگر است
که صفهای چند تولیدکننده/چند مصرفکننده را پیادهسازی میکنند که برای محاسبات موازی کامل استفاده میشوند.
بسته به مورد استفاده شما، معنای قفل ممکن است مفید باشد،
یا ممکن است هزینه های غیر ضروری را متحمل شوند. در این صورت شما خواهید بود
بهتر است از یک لیست یا دک به عنوان یک پشته همه منظوره استفاده کنید.
from queue import LifoQueue
s = LifoQueue()
s.put(‘eat’)
s.put(‘sleep’)
s.put(‘code’)
s
s.get()
‘code’
s.get()
‘sleep’
s.get()
‘eat’
s.get_nowait()
queue.Empty
s.get()Blocks / waits forever…
مقایسه پیاده سازی های پشته در پایتون
همانطور که مشاهده کردید، پایتون با چندین پیاده سازی برای یک پشته ارسال می شود
ساختار داده ها. همه آنها دارای ویژگی های کمی متفاوت هستند، به عنوان
همچنین مبادلات عملکرد و استفاده.
اگر به دنبال پشتیبانی پردازش موازی نیستید (یا نمی خواهید
دستگیره قفل و باز کردن قفل به صورت دستی)، انتخاب شما به این بستگی دارد
نوع لیست داخلی یا collections.deque. تفاوت در این است
ساختار داده مورد استفاده در پشت صحنه و سهولت استفاده کلی:
• لیست توسط یک آرایه پویا پشتیبانی می شود که آن را برای سریع عالی می کند
دسترسی تصادفی، اما نیاز به تغییر اندازه گاه به گاه در هنگام عناصر دارد
اضافه یا حذف می شوند. این فهرست، سن ذخیره پشتیبان خود را بیش از حد تخصیص می دهد، به طوری که هر فشار یا پاپ نیاز به تغییر اندازه ندارد، و شما دریافت می کنید
پیچیدگی زمانی O(1) مستهلک شده برای این عملیات. ولی
شما باید مراقب باشید که فقط موارد را درج و حذف کنید “از
سمت راست» با استفاده از append() و pop(). در غیر این صورت، سرعت عملکرد به O(n) کاهش می یابد.
collections.deque توسط یک لیست دارای پیوند دوگانه پشتیبانی میشود که ضمیمهها و حذفها را در هر دو انتها بهینه میکند و عملکرد O(1) را برای این عملیات ارائه میدهد. نه تنها عملکرد آن پایدارتر است، بلکه استفاده از کلاس deque نیز آسانتر است، زیرا نیازی نیست نگران اضافه کردن یا حذف موارد باشید.
از “پایان اشتباه”
به طور خلاصه، من معتقدم که collections.deque یک انتخاب عالی است
برای پیاده سازی یک پشته (صف LIFO) در پایتون.
قوانین ارسال دیدگاه در سایت