هياكل البيانات والخوارزمية في Python: كل ما تحتاج إلى معرفته
نشرت: 2020-05-06تعد هياكل البيانات والخوارزميات في بايثون من أكثر المفاهيم الأساسية في علوم الكمبيوتر. إنها أدوات لا غنى عنها لأي مبرمج. تتعامل هياكل البيانات في Python مع تنظيم البيانات وتخزينها في الذاكرة أثناء قيام البرنامج بمعالجتها. من ناحية أخرى ، تشير خوارزميات Python إلى مجموعة مفصلة من التعليمات التي تساعد في معالجة البيانات لغرض معين.
بالتناوب ، يمكن القول أن هياكل البيانات المختلفة تستخدم منطقيًا بواسطة الخوارزميات لحل مشكلة معينة في تحليل البيانات. سواء كانت مشكلة في العالم الحقيقي أو سؤالًا نموذجيًا متعلقًا بالترميز ، فإن فهم هياكل البيانات والخوارزميات في Python أمر بالغ الأهمية إذا كنت تريد التوصل إلى حل دقيق. في هذه المقالة ، ستجد مناقشة مفصلة لخوارزميات Python وهياكل البيانات المختلفة. إذا كنت مهتمًا بمعرفة المزيد عن Python ، فراجع دورات علوم البيانات لدينا.
تعرف على المزيد: هياكل البيانات الستة الأكثر استخدامًا في R.
جدول المحتويات
ما هي هياكل البيانات في بايثون؟
هياكل البيانات هي وسيلة لتنظيم وتخزين البيانات ؛ يشرحون العلاقة بين البيانات والعمليات المنطقية المختلفة التي يمكن إجراؤها على البيانات. هناك العديد من الطرق التي يمكن من خلالها تصنيف هياكل البيانات. إحدى الطرق هي تصنيفها إلى أنواع بيانات بدائية وغير بدائية.
بينما تتضمن أنواع البيانات الأولية الأعداد الصحيحة ، والعائمة ، والسلاسل النصية ، والمنطقية ، فإن أنواع البيانات غير الأولية هي Array ، و List ، و Tuples ، و Dictionary ، و Sets ، و Files. بعض أنواع البيانات غير البدائية ، مثل List و Tuples والقواميس والمجموعات مضمنة في Python. هناك فئة أخرى من هياكل البيانات في بايثون يتم تحديدها من قبل المستخدم ؛ وهذا يعني أن المستخدمين يحددونها. تتضمن هذه العناصر Stack و Queue و Linked List و Tree و Graph و HashMap.
هياكل البيانات البدائية
هذه هي هياكل البيانات الأساسية في Python التي تحتوي على قيم بيانات نقية وبسيطة وتعمل بمثابة اللبنات الأساسية لمعالجة البيانات. دعونا نتحدث عن الأنواع الأربعة البدائية من المتغيرات في بايثون:
- الأعداد الصحيحة - يُستخدم نوع البيانات هذا لتمثيل البيانات الرقمية ، أي الأعداد الصحيحة الموجبة أو السالبة بدون فاصلة عشرية. قل ، -1 ، 3 ، أو 6.
- Float - يشير Float إلى "رقم حقيقي للفاصلة العائمة". يتم استخدامه لتمثيل الأرقام المنطقية ، وعادة ما تحتوي على علامة عشرية مثل 2.0 أو 5.77. نظرًا لأن Python هي لغة برمجة مكتوبة ديناميكيًا ، فإن نوع البيانات التي يخزنها الكائن قابل للتغيير ، وليست هناك حاجة إلى تحديد نوع المتغير الخاص بك بشكل صريح.
- سلسلة - يشير نوع البيانات هذا إلى مجموعة من الحروف الأبجدية أو الكلمات أو الأحرف الأبجدية الرقمية. يتم إنشاؤه من خلال تضمين سلسلة من الأحرف داخل زوج من علامات الاقتباس المزدوجة أو المفردة. لسلسلة سلسلتين أو أكثر ، يمكن تطبيق العملية "+" عليها. يعد التكرار والربط والرسملة والاسترداد بعضًا من عمليات String الأخرى في Python. مثال: "أزرق" ، "أحمر" ، إلخ.
- منطقي - هذا النوع من البيانات مفيد في المقارنة والتعبيرات الشرطية ويمكن أن يأخذ القيم TRUE أو FALSE.
معرفة المزيد: إطارات البيانات في بايثون
بنى بيانات غير بدائية مدمجة
على عكس هياكل البيانات البدائية ، لا تخزن أنواع البيانات غير البدائية القيم فحسب ، بل مجموعة من القيم بتنسيقات مختلفة. دعونا نلقي نظرة على هياكل البيانات غير البدائية في بايثون:
- القوائم - هذه هي بنية البيانات الأكثر تنوعًا في Python وتتم كتابتها كقائمة من العناصر المفصولة بفواصل داخل أقواس مربعة. يمكن أن تتكون القائمة من عناصر غير متجانسة ومتجانسة. بعض الطرق المطبقة على القائمة هي index () ، و append () ، و extend () ، و insert () ، و remove () ، و pop () ، وما إلى ذلك. القوائم قابلة للتغيير ؛ وهذا يعني أنه يمكن تغيير محتواها والحفاظ على الهوية سليمة.
مصدر
- المجموعات - تتشابه المجموعات مع القوائم ولكنها غير قابلة للتغيير. أيضًا ، على عكس القوائم ، يتم الإعلان عن المجموعات داخل أقواس بدلاً من الأقواس المربعة. تشير ميزة الثبات إلى أنه بمجرد تحديد عنصر في Tuple ، لا يمكن حذفه أو إعادة تعيينه أو تحريره. يضمن عدم التلاعب بالقيم المعلنة لهيكل البيانات أو تجاوزها.
مصدر
- القواميس - تتكون القواميس من أزواج ذات قيمة أساسية. يحدد "المفتاح" عنصرًا ، وتخزن "القيمة" قيمة العنصر. تفصل النقطتان المفتاح عن قيمته. العناصر مفصولة بفواصل ، مع وضع كل شيء داخل أقواس متعرجة. بينما المفاتيح غير قابلة للتغيير (أرقام أو سلاسل أو مجموعات) ، يمكن أن تكون القيم من أي نوع.
مصدر
- المجموعات - المجموعات هي مجموعة غير مرتبة من العناصر الفريدة. مثل القوائم ، تكون المجموعات قابلة للتغيير وتتم كتابتها بين قوسين مربعين ، ولكن لا يمكن أن تكون قيمتان متماثلتين. تتضمن بعض طرق المجموعة count () ، index () ، أي () ، all () ، إلخ.
مصدر
- القوائم مقابل المصفوفات - لا يوجد مفهوم مضمّن للمصفوفات في Python. يمكن استيراد المصفوفات باستخدام حزمة NumPy قبل تهيئتها. لمعرفة المزيد عن NumPy ، يمكن للمرء التحقق من برنامج python NumPy التعليمي . تتشابه القوائم والمصفوفات في الغالب باستثناء اختلاف واحد - بينما المصفوفات عبارة عن مجموعات من العناصر المتجانسة فقط ، تشتمل القوائم على عناصر متجانسة وغير متجانسة.
الخروج: أنواع الشجرة الثنائية
هياكل البيانات المعرفة من قبل المستخدم في بايثون
التالي في مناقشتنا حول هياكل البيانات والخوارزميات في Python هو نظرة عامة موجزة على هياكل البيانات المختلفة التي يحددها المستخدم:
- الأكوام - الحزم عبارة عن هياكل بيانات خطية في بايثون. يعتمد تخزين العناصر في مجموعات Stacks على مبادئ First-In / Last-Out (FILO) أو Last-In / First-Out (LIFO). في Stacks ، تترافق إضافة عنصر جديد في أحد الأطراف مع إزالة عنصر من نفس الطرف. يتم استخدام عمليات "الدفع" و "فرقعة" لعمليات الإدراج والحذف ، على التوالي. الوظائف الأخرى المتعلقة بالمكدس هي فارغة () ، وحجم () وأعلى (). يمكن تنفيذ الحزم باستخدام الوحدات النمطية وهياكل البيانات من مكتبة Python - list ، و collections.deque ، و queue.LifoQueue.
- قائمة الانتظار - على غرار المكدس ، تعد قوائم الانتظار هياكل بيانات خطية. ومع ذلك ، يتم تخزين العناصر بناءً على مبدأ الوارد الأول / الأول الذي يخرج (FIFO). في قائمة الانتظار ، تتم إزالة العنصر الذي تمت إضافته مؤخرًا على الأقل أولاً. تشمل العمليات المتعلقة بقائمة الانتظار Enqueue (إضافة عناصر) و Dequeue (حذف العناصر) و Front و Rear. مثل Stacks ، يمكن تنفيذ قوائم الانتظار باستخدام الوحدات النمطية وهياكل البيانات من مكتبة Python - list ، و collections.deque ، و queue.
- الشجرة - الأشجار هي هياكل بيانات غير خطية في بايثون وتتكون من عقد متصلة بواسطة حواف. خصائص الشجرة هي عقدة واحدة يتم تعيينها كعقدة الجذر ، بخلاف الجذر ، ولكل عقدة أخرى عقدة أصل مرتبطة ، ويمكن أن تحتوي كل عقدة على عدد تعسفي من العقد الفرعية. بنية بيانات الشجرة الثنائية هي تلك التي لا تحتوي عناصرها على أكثر من فرعين.
- قائمة مرتبطة - تسمى سلسلة من عناصر البيانات المرتبطة ببعضها البعض عبر الروابط على أنها قائمة مرتبطة في Python. وهي أيضًا بنية بيانات خطية. يرتبط كل عنصر بيانات في "قائمة مرتبطة" بآخر باستخدام المؤشر. نظرًا لأن مكتبة Python لا تحتوي على قوائم مرتبطة ، يتم تنفيذها باستخدام مفهوم العقد. تتمتع القوائم المرتبطة بميزة على المصفوفات في وجود حجم ديناميكي ، مع سهولة إدراج / حذف العناصر.
- الرسم البياني - يمثل الرسم البياني في Python مجموعة من الكائنات ، مع بعض أزواج الكائنات المتصلة بواسطة روابط. تمثل الرؤوس الكائنات المترابطة ، وتسمى الروابط التي تربط الرؤوس بالحواف. يمكن استخدام نوع بيانات قاموس Python لتقديم الرسوم البيانية. في جوهرها ، تمثل "مفاتيح" القاموس الرؤوس ، وتشير "القيم" إلى الروابط أو الحواف بين الرؤوس.
- HashMaps / Hash Tables - في هذا النوع من بنية البيانات ، تُنشئ دالة التجزئة العنوان أو قيمة الفهرس لعنصر البيانات. تعمل قيمة الفهرس كمفتاح لقيمة البيانات مما يسمح بوصول أسرع للبيانات. كما هو الحال في نوع بيانات القاموس ، تحتوي جداول التجزئة على أزواج من قيم المفاتيح ، ولكن دالة التجزئة تولد المفتاح.
ما هي الخوارزميات في بايثون؟
خوارزميات بايثون هي مجموعة من التعليمات التي يتم تنفيذها للحصول على حل لمشكلة معينة. نظرًا لأن الخوارزميات ليست خاصة بلغة معينة ، فيمكن تنفيذها بعدة لغات برمجة. لا توجد قواعد معيارية توجه كتابة الخوارزميات. إنها تعتمد على الموارد والمشكلة ولكنها تشترك في بعض بنيات الكود الشائعة ، مثل التحكم في التدفق (إذا كان آخر) والحلقات (افعل ، وأثناء ، من أجل). في الأقسام التالية ، سنناقش بإيجاز خوارزميات اجتياز الشجرة والفرز والبحث والرسم البياني.

خوارزميات اجتياز الشجرة
الاجتياز هو عملية زيارة جميع عُقد الشجرة ، بدءًا من عقدة الجذر. يمكن اجتياز الشجرة بثلاث طرق مختلفة:
- يتضمن الاجتياز بالترتيب زيارة الشجرة الفرعية على اليسار أولاً ، متبوعًا بالجذر ، ثم الشجرة الفرعية اليمنى.
- في اجتياز الطلب المسبق ، فإن أول ما تتم زيارته هو عقدة الجذر ، متبوعة بالشجرة الفرعية اليسرى ، وأخيراً الشجرة الفرعية اليمنى.
- في خوارزمية اجتياز الطلب اللاحق ، تتم زيارة الشجرة الفرعية اليسرى أولاً ، ثم تتم زيارة الشجرة الفرعية اليمنى ، مع زيارة العقدة الجذرية أخيرًا.
تعرف على المزيد: كيفية إنشاء شجرة قرارات مثالية
خوارزميات الفرز
تشير خوارزميات الفرز إلى طرق ترتيب البيانات بتنسيق معين. يضمن الفرز تحسين البحث عن البيانات إلى مستوى عالٍ وتقديم البيانات بتنسيق قابل للقراءة. دعونا نلقي نظرة على الأنواع الخمسة المختلفة من خوارزميات الفرز في بايثون:
- الفرز الفقاعي - تعتمد هذه الخوارزمية على المقارنة حيث يوجد تبادل متكرر للعناصر المجاورة إذا كانت بترتيب غير صحيح.
- دمج الفرز - استنادًا إلى خوارزمية فرق تسد ، يقسم دمج الفرز المصفوفة إلى نصفين ، ويصنفهما ، ثم يجمعهما.
- فرز الإدراج - يبدأ هذا الفرز بمقارنة وفرز العنصرين الأولين. بعد ذلك ، تتم مقارنة العنصر الثالث بالعنصرين اللذين تم فرزهما مسبقًا وما إلى ذلك.
- Shell Sort - هو شكل من أشكال فرز الإدراج ، ولكن هنا ، يتم فرز العناصر البعيدة. يتم فرز قائمة فرعية كبيرة لقائمة معينة ، ويتم تقليل حجم القائمة بشكل تدريجي حتى يتم فرز جميع العناصر.
- فرز التحديد - تبدأ هذه الخوارزمية بإيجاد القيمة الدنيا من قائمة العناصر وتضعها في قائمة مرتبة. ثم يتم تكرار العملية لكل عنصر من العناصر المتبقية في القائمة التي لم يتم فرزها. تتم مقارنة العنصر الجديد الذي يدخل القائمة التي تم فرزها مع العناصر الموجودة به ويتم وضعه في الموضع الصحيح. تستمر العملية حتى يتم فرز جميع العناصر.
خوارزميات البحث
تساعد خوارزميات البحث في فحص واسترجاع عنصر من هياكل البيانات المختلفة. أحد أنواع خوارزمية البحث يطبق طريقة البحث المتسلسل حيث يتم اجتياز القائمة بالتسلسل ، ويتم فحص كل عنصر (البحث الخطي). في نوع آخر ، البحث الفاصل ، يتم البحث عن العناصر في هياكل البيانات المصنفة (البحث الثنائي). دعونا نلقي نظرة على بعض الأمثلة:
- البحث الخطي - في هذه الخوارزمية ، يتم البحث في كل عنصر بالتسلسل واحدًا تلو الآخر.
- بحث ثنائي - يتم تقسيم فترة البحث بشكل متكرر إلى نصفين. إذا كان العنصر المراد البحث عنه أقل من المكون المركزي للفاصل الزمني ، يتم تضييق الفاصل الزمني إلى النصف السفلي. خلاف ذلك ، يتم تضييقه إلى النصف العلوي. تتكرر العملية حتى يتم العثور على القيمة.
خوارزميات الرسم البياني
هناك طريقتان لاجتياز الرسوم البيانية باستخدام حوافها. وهذه هي:
- اجتياز العمق الأول (DFS) - في هذه الخوارزمية ، يتم اجتياز الرسم البياني في حركة عميقة. عندما يواجه أي تكرار طريقًا مسدودًا ، يتم استخدام مكدس للانتقال إلى القمة التالية وبدء البحث. يتم تنفيذ DFS في Python باستخدام أنواع البيانات المحددة.
- اجتياز النطاق الأول (BFS) - في هذه الخوارزمية ، يتم اجتياز الرسم البياني في حركة عرضية. عندما يواجه أي تكرار طريقًا مسدودًا ، يتم استخدام قائمة انتظار للانتقال إلى الرأس التالي وبدء البحث. يتم تنفيذ BFS في Python باستخدام بنية بيانات قائمة الانتظار.
تحليل الخوارزمية
- تحليل مسبق - يمثل هذا تحليلًا نظريًا للخوارزمية قبل تنفيذها. يتم قياس كفاءة الخوارزمية من خلال افتراض أن العوامل ، مثل سرعة المعالج ، ثابتة وليس لها أي تأثير على الخوارزمية.
- تحليل لاحق - يشير هذا إلى التحليل التجريبي للخوارزمية بعد تنفيذها. يتم استخدام لغة البرمجة لتنفيذ الخوارزمية المحددة ، متبوعة بتنفيذها على جهاز الكمبيوتر. يجمع هذا التحليل الإحصائيات ، مثل الوقت والمساحة اللازمين لتشغيل الخوارزمية.
خاتمة
سواء كنت متمرسًا في البرمجة أو جديدًا فيها ، لا يمكنك تجاهل هياكل البيانات والخوارزميات في Python . تعتبر هذه المفاهيم حاسمة عند إجراء عمليات على البيانات ، وتحتاج إلى تحسين معالجة البيانات. بينما تساعد هياكل البيانات في تنظيم المعلومات ، توفر الخوارزميات إرشادات لحل مشكلة تحليل البيانات. يوفران معًا طريقة لعلماء الكمبيوتر لمعالجة المعلومات المقدمة كبيانات إدخال.
إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع برنامج IIIT-B & upGrad التنفيذي PG في علوم البيانات الذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1 - في 1 مع موجهين في الصناعة ، أكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.
كم يوما يستغرق تعلم هياكل البيانات والخوارزميات؟
عندما يتعلق الأمر بعلوم الكمبيوتر ، فإن هياكل البيانات والخوارزميات تعتبر أصعب الموضوعات على الإطلاق. لكن من المهم حقًا التعلم لكل مبرمج. إذا كنت تقضي ما يقرب من 3-4 ساعات يوميًا ، فستحتاج على الأقل من 6 إلى 8 أسابيع لتعلم هياكل البيانات والخوارزميات.
لا يوجد جدول زمني صارم هنا لأنه سيعتمد تمامًا على وتيرتك وقدراتك التعليمية. إذا كنت جيدًا في فهم الأساسيات ، فستجد أنه من السهل جدًا التوافق مع المفاهيم المتعمقة لهياكل البيانات والخوارزميات.
ما هي أنواع الخوارزمية المختلفة؟
الخوارزمية هي إجراء تدريجي يجب اتباعه لحل أي مشكلة. تحتاج المشكلات المختلفة إلى خوارزميات مختلفة لحل المشكلة. يختار كل مبرمج خوارزمية لحل مشكلة معينة بناءً على متطلبات وسرعة الخوارزمية.
ومع ذلك ، هناك بعض الخوارزميات العليا التي يفكر فيها المبرمجون عادةً لحل المشكلات المختلفة. بعض الخوارزميات المعروفة هي خوارزمية القوة الغاشمة ، وخوارزمية الجشع ، والخوارزمية العشوائية ، وخوارزمية البرمجة الديناميكية ، والخوارزمية التكرارية ، وخوارزمية Divide & Conquer ، وخوارزمية Backtracking.
ما هو الاستخدام الرئيسي لبايثون؟
Python هي لغة برمجة للأغراض العامة يتم استخدامها لأداء أنشطة مختلفة. أفضل شيء في Python هو أنها غير مرتبطة بأي تطبيق معين ، ويمكنك استخدامها وفقًا لمتطلباتك. نظرًا لتوفر المكتبات والتنوع والبنية سهلة الفهم ، تعتبر واحدة من أكثر لغات البرمجة استخدامًا بين المطورين.
يتم استخدام Python بشكل رئيسي لتطوير مواقع الويب والبرامج. بخلاف ذلك ، يتم استخدامه أيضًا لأتمتة المهام وتصور البيانات وتحليل البيانات. من السهل تعلم Python ، ولهذا السبب حتى غير المبرمجين يتبنون هذه اللغة لتنظيم الشؤون المالية وأداء المهام اليومية الأخرى.