ساختار داده ها و الگوریتم ها در پایتون دو مورد از اساسی ترین مفاهیم در علوم کامپیوتر هستند. این دو ابزارهای ضروری برای هر برنامه نویسی هستند. ساختارهای داده در پایتون با سازماندهی و ذخیره سازی داده ها در حافظه زمانی که یک برنامه در حال پردازش آن است، سروکار دارد. از سوی دیگر، الگوریتم های پایتون به مجموعه دقیق دستورالعمل هایی اشاره دارد که به پردازش داده ها برای یک هدف خاص کمک می کند.

 

متناوبا، می توان گفت که ساختارهای داده های مختلف به طور منطقی توسط الگوریتم ها برای حل یک مشکل خاص در تجزیه و تحلیل داده ها استفاده می شود. چه یک مشکل در دنیای واقعی باشد و چه یک سوال معمولی مرتبط با کدنویسی، اگر می‌خواهید راه‌حل دقیقی پیدا کنید، درک ساختار داده‌ها و الگوریتم‌ها در پایتون بسیار مهم است. در این مقاله، بحث مفصلی در مورد الگوریتم های مختلف پایتون و ساختار داده ها خواهید دید.

 

دوره پیشنهادی: دوره آموزش پایتون

 

 #  ساختار داده در پایتون چیست؟

ساختارهای داده راهی برای سازماندهی و ذخیره سازی داده ها هستند. آنها رابطه بین داده ها و عملیات منطقی مختلفی را که می توان روی داده ها انجام داد توضیح می دهند. روش های زیادی وجود دارد که از طریق آنها می توان ساختارهای داده را طبقه بندی کرد. یک راه این است که آنها را به انواع داده های اصلی و فرعی دسته بندی کنیم.

 

ساختارهای داده اصلی شامل اعداد صحیح، شناور، رشته ها و بولی هستند، انواع ساختارهای داده فرعی عبارتند از Array، List، Tuples، Dictionary، Sets و Files. برخی از این انواع داده های فرعی، مانند List، Tuples، Dictionaries و Sets، در پایتون ساخته شده اند. دسته دیگری از ساختارهای داده در پایتون وجود دارد که توسط کاربر تعریف شده است. یعنی کاربران آنها را تعریف می کنند. اینها عبارتند از: Stack، Queue، Linked List، Tree، Graph و HashMap.

 

 

 +  ساختارهای داده اصلی

اینها ساختارهای داده پایه در پایتون هستند که حاوی مقادیر داده خالص و ساده هستند و به عنوان بلوک های ساختمانی برای دستکاری داده ها عمل می کنند. اجازه دهید در مورد چهار نوع متغیر اصلی در پایتون صحبت کنیم:

 

  • اعداد صحیح(integer): این نوع داده برای نمایش داده های عددی، یعنی اعداد صحیح یا منفی بدون نقطه اعشار استفاده می شود. مثلا، -1، 3، یا 6.

 

  • اعداد اعشاری(float): Float به معنای «عدد اعشاری» است. این عدد برای نمایش اعداد گویا استفاده می‌شود که معمولاً حاوی یک نقطه اعشار مانند 2.0 یا 5.77 هستند.

 

  • رشته(string): این نوع داده مجموعه ای از حروف الفبا، کلمات یا عدد را نشان می دهد. با گنجاندن یک سری کاراکتر در یک جفت نقل قول دوتایی یا تکی ایجاد می شود.

 

  • درست یا غلط(boolean): این نوع داده در مقایسه و عبارات شرطی مفید است و می تواند مقادیر TRUE یا FALSE را بگیرد.

 

 

 +  ساختارهای داده فرعی داخلی پایتون

برخلاف ساختارهای داده اصلی، انواع داده های فرعی نه تنها مقادیر را ذخیره می کنند، بلکه مجموعه ای از مقادیر را در قالب های مختلف ذخیره می کنند. اجازه دهید نگاهی به ساختارهای داده فرعی در پایتون بیندازیم:

 

  • لیست(list): این چندمنظوره‌ترین ساختار داده در پایتون است و به‌صورت فهرستی از عناصر جدا شده با کاما در داخل براکت نوشته می‌شود. یک لیست می تواند از عناصر ناهمگن و همگن تشکیل شده باشد.

 

  • تاپل(tuple): تاپل ها شبیه لیست ها هستند اما تغییر ناپذیر هستند. همچنین برخلاف لیست ها، تاپل ها به جای براکت در داخل پرانتز مشخص می شوند. ویژگی تغییرناپذیری نشان می‌دهد که وقتی یک عنصر در یک Tuple تعریف شد، نمی‌توان آن را حذف، تخصیص مجدد یا ویرایش کرد. این تضمین می کند که مقادیر اعلام شده ساختار داده دستکاری یا نادیده گرفته نمی شوند.

 

  • دیکشنری(dictionary): دیکشنری ها از جفت های کلید-مقدار تشکیل شده اند. "کلید" یک آیتم را مشخص می کند و "مقدار" ارزش آن مورد را ذخیره می کند. دو نقطه کلید را از مقدار آن جدا می کند. آیتم ها با کاما از هم جدا می شوند و کل آیتم ها در داخل آکولاد قرار می گیرند.

 

  • مجموعه(set): set دنباله ای نامرتب از عناصر منحصر به فرد است. مانند لیست ها، مجموعه ها قابل تغییر هستند و در داخل براکت نوشته می شوند، اما هیچ دو مقدار نمی توانند یکسان باشند.

 

 

 +  ساختارهای داده فرعی خارجی پایتون

در ادامه بحث ما در مورد ساختارهای داده و الگوریتم‌ها در پایتون، مروری کوتاه بر ساختارهای داده‌های مختلف خارجی(user defined) پایتون داشته باشیم:

 

  • پشته(stack): پشته ها ساختارهای داده خطی در پایتون هستند. ذخیره آیتم ها در Stacks بر اساس اصول First-In/Last-Out (FILO) یا Last-In/First-Out (LIFO) است. در Stacks، افزودن یک عنصر جدید در یک انتها با حذف یک عنصر از همان انتها همراه است.

 

  • صف(queue): مانند Stacks، صف ها ساختارهای داده خطی هستند. با این حال، آیتم ها بر اساس اصل First-In/ First-Out (FIFO) ذخیره می شوند. در یک صف، موردی که اخیراً حداقل اضافه شده است ابتدا حذف می شود.

 

  • درخت(tree): درختان ساختارهای داده غیرخطی در پایتون هستند و از گره هایی تشکیل شده اند که توسط edge ها به هم متصل شده اند. ویژگی های یک درخت این است که یک گره به عنوان گره ریشه تعیین می شود، به غیر از ریشه، هر گره دیگری یک گره والد مرتبط دارد، و هر گره می تواند تعداد دلخواه گره فرزند داشته باشد.

 

  • لیست پیوندی(linked list): مجموعه‌ای از عناصر داده‌ای که از طریق پیوندها(link) به یکدیگر متصل شده‌اند، در پایتون لیست پیوندی نامیده می‌شوند. همچنین یک ساختار داده خطی است. هر عنصر داده در یک لیست پیوندی با استفاده از اشاره گر به دیگری متصل می شود.

 

 

 #  الگوریتم در پایتون چیست؟

الگوریتم‌های پایتون مجموعه‌ای از دستورالعمل‌ها هستند که برای دستیابی به راه‌حل برای یک مسئله معین اجرا می‌شوند. از آنجایی که الگوریتم ها مختص زبان نیستند، می توان آنها را در چندین زبان برنامه نویسی پیاده سازی کرد. هیچ قانون استانداردی برای نوشتن الگوریتم ها وجود ندارد. آنها وابسته به منبع و مشکل هستند، اما برخی از ساختارهای کد مشترک، مانند کنترل جریان (if-else) و حلقه ها (do، while، for) را به اشتراک می گذارند. در بخش‌های بعدی به طور مختصر به الگوریتم‌های پیمایش درخت، مرتب‌سازی، جستجو و نمودار می‌پردازیم.

 

 

 +  الگوریتم های پیمایش درختی

پیمایش(traverse) فرآیند بازدید از تمام گره های یک درخت است که از گره ریشه شروع می شود. یک درخت را می توان به سه روش مختلف طی کرد:

 

  • پیمایش ترتیبی(In-order) شامل بازدید از زیر درخت در سمت چپ، و سپس زیردرخت سمت راست است.
  • در پیمایش پیش‌ سفارشی(pre-order)، اولین موردی که بازدید می‌شود، گره ریشه و به دنبال آن زیردرخت سمت چپ و در نهایت، زیردرخت سمت راست است.
  • در الگوریتم پیمایش پس سفارشی(post-order)، ابتدا از زیر درخت سمت چپ بازدید می شود، سپس از زیر درخت سمت راست بازدید می شود و گره ریشه آخرین بازدید می شود.

 

 

 +  الگوریتم های مرتب سازی

الگوریتم‌های مرتب‌سازی روش‌هایی را برای چیدمان داده‌ها در یک قالب خاص نشان می‌دهند. مرتب سازی تضمین می کند که جستجوی داده ها در سطح بالایی بهینه شده و داده ها در قالب قابل خواندن ارائه می شوند. بیایید به سه نوع مختلف الگوریتم مرتب سازی در پایتون نگاه کنیم:

 

  • مرتب سازی حباب(bubble sort): این الگوریتم مبتنی بر مقایسه است که در آن در صورت نادرست بودن ترتیب عناصر مجاور، به طور مکرر تعویض می شود.
  • مرتب سازی ترکیب(merge sort): مرتب سازی Merge آرایه را به دو نیمه تقسیم می کند، آنها را مرتب می کند و سپس آنها را با هم ترکیب می کند.
  • مرتب سازی درج(insertion sort): این الگوریتم با مقایسه و مرتب سازی دو عنصر اول شروع می شود. سپس، عنصر سوم با دو عنصر طبقه بندی شده قبلی و غیره مقایسه می شود.

 

 

 +  الگوریتم های جستجو

الگوریتم های جستجو به بررسی و بازیابی یک عنصر از ساختارهای مختلف داده کمک می کنند. یکی از انواع الگوریتم جستجو از روش جستجوی متوالی استفاده می کند که در آن لیست به صورت متوالی پیمایش می شود و هر عنصر بررسی می شود (جستجوی خطی). در نوع دیگر، جستجوی بازه ای، عناصر در ساختارهای داده مرتب شده (جستجوی باینری) جستجو می شوند. اجازه دهید به چند نمونه نگاه کنیم:

 

جستجوی خطی(linear search): در این الگوریتم هر آیتم به صورت متوالی یکی یکی جستجو می شود.

جستجوی دودویی(binary search): در این الگوریتم فاصله جستجو بارها و بارها به نصف تقسیم می شود. اگر عنصری که باید جستجو شود کمتر از جزء مرکزی بازه باشد، فاصله به نیمه پایین‌تر کاهش می‌یابد. در غیر این صورت به نیمه بالایی باریک می شود. این فرآیند تا زمانی که مقدار مورد نظر پیدا شود تکرار می شود

 

 

 #  نتیجه گیری

چه در برنامه نویسی کهنه کار باشید و چه تازه کار، نمی توانید ساختارهای داده و الگوریتم های پایتون را نادیده بگیرید. این مفاهیم هنگام انجام عملیات بر روی داده ها بسیار مهم هستند و باید پردازش داده ها را بهینه کنید. در حالی که ساختارهای داده به سازماندهی اطلاعات کمک می کنند، الگوریتم ها دستورالعمل هایی را برای حل مشکل تجزیه و تحلیل داده ها ارائه می دهند. آنها با هم راهی برای دانشمندان کامپیوتر برای پردازش اطلاعات داده شده به عنوان داده های ورودی فراهم می کنند.

 



0

intro

5:18

رایگان

1

complexity

9:4

رایگان

2

constant complexity

5:13

رایگان

3

log complexity

5:17

رایگان

4

linear complexity

3:49

رایگان

5

polynomial complexity

3:5

رایگان

6

exponential complexity

3:58

رایگان

7

limit

10:25

رایگان

8

top one

8:57

رایگان

9

caesar cipher

19:43

رایگان

10

search insert

9:41

رایگان

11

is isomorphic

10:23

رایگان

12

a1z26 cipher

6:35

رایگان

13

bead sort

8:56

رایگان

14

zig zag iterator

6:37

رایگان

15

move zeros

2:52

رایگان

16

remove min

4:56

رایگان

17

OneTimePad cipher

9:32

رایگان

18

two sum

5:7

رایگان

19

rotate

6:10

رایگان

20

search range

9:7

رایگان

21

linear search

4:34

رایگان

22

binary search

6:45

رایگان

23

first occurrence

4:6

رایگان

24

last occurrence

5:28

رایگان

25

done

1:42

رایگان

دوره های پیشنهادی

دوره آموزش FastAPI
دوره آموزش FastAPI
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش Descriptors در پایتون
دوره آموزش Descriptors در پایتون
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش لینوکس(linux)
دوره آموزش لینوکس(linux)
تکمیل ضبط
امیرحسین بیگدلو



ارسال نظر


علی

1 سال قبل پاسخ به نظر

سلام .
ممنون بابت زحماتون.
این دوره ی الگوریتم برای مبحث هوش مصنوعی ،یادگیری ماشین، کفایت میکنه؟ خوبه ایا؟

ارسال نظر



امیرحسین بیگدلو

1 سال قبل

سلام
این الگوریتم‌ها برای شروع پایتون هست و هیچ ربطی به هوش مصنوعی نداره.

باب

2 سال قبل پاسخ به نظر

عالی بود

ارسال نظر



fds

2 سال قبل پاسخ به نظر

سلام
دوره الگوریتم نویسی در پایتون عالی بود. لطفا الگوریتم‌های بیشتری اضافه کنید.

ارسال نظر



نقی

2 سال قبل پاسخ به نظر

سلام امیر آقا باباب عالی هستی تشکر.

ارسال نظر



پوریا شفیعی

3 سال قبل پاسخ به نظر

تشکر فوق العاده بود

ارسال نظر



مهدی

3 سال قبل پاسخ به نظر

داده کاوی نمیزاری ؟

ارسال نظر



امیرحسین بیگدلو

3 سال قبل

تو فکرشم

پویا

3 سال قبل پاسخ به نظر

عالی هستی.
ادامه بده سمت مباحث پایتونی هوش مصنوعی هم اگرتونستی برو...

ارسال نظر



پویا

3 سال قبل

دمت گرم عالیی هستی

مونگارد