أهم هياكل البيانات والخوارزميات في Java التي تحتاج إلى معرفتها



ستساعدك هذه المدونة الخاصة بهياكل البيانات والخوارزميات في Java على فهم جميع هياكل البيانات الرئيسية والخوارزميات في Java.

إذا اضطررت إلى اختيار الموضوع الوحيد الأكثر أهمية في تطوير البرامج ، فسيكون هياكل البيانات والخوارزميات. يمكنك التفكير في الأمر على أنه الأداة الأساسية المتاحة لكل مبرمج كمبيوتر. أثناء البرمجة نستخدم هياكل البيانات لتخزين وتنظيم البيانات ، و الخوارزميات لمعالجة البيانات في تلك الهياكل. تحتوي هذه المقالة على مراجعة مفصلة لجميع هياكل البيانات والخوارزميات الشائعة في للسماح للقراء بأن يكونوا مجهزين تجهيزًا جيدًا.

المدرجة أدناه هي الموضوعات التي تمت مناقشتها في هذه المقالة:





هياكل البيانات في جافا

بنية البيانات هي طريقة لتخزين البيانات وتنظيمها في الكمبيوتر بحيث يمكن استخدامها بكفاءة. يوفر وسيلة لإدارة كميات كبيرة من البيانات بكفاءة. وهياكل البيانات الفعالة هي المفتاح لتصميم خوارزميات فعالة.

فيفي مقالة 'هياكل البيانات والخوارزميات في Java' هذه ، سنغطي هياكل البيانات الأساسية مثل:



دعونا نتحقق من كل منهم.

جافا تتحول إلى مضاعفة كثافة العمليات

هياكل البيانات الخطية في جافا

هياكل البيانات الخطية في هم العناصر التي تكون عناصرها متسلسلة ومرتبة بطريقة بحيث: يوجد عنصر واحد فقط العنصر الأول وله واحد فقط العنصر التالي ، هناك واحد فقط العنصر الأخير وله واحد فقط العنصر السابق ، بينما تحتوي جميع العناصر الأخرى على امتداد التالى و أ السابق جزء.

المصفوفات

ان مجموعة مصفوفة هي بنية بيانات خطيةتمثل مجموعة من العناصر المتشابهة ، يتم الوصول إليها عن طريق الفهرس. يجب توفير حجم المصفوفة قبل تخزين البيانات. المدرجة أدناه هي خصائص المصفوفة:



  • كل عنصر في المصفوفة من نفس نوع البيانات وله نفس الحجم
  • يتم تخزين عناصر المصفوفة في مواقع ذاكرة متجاورة حيث يبدأ العنصر الأول في أصغر موقع للذاكرة
  • يمكن الوصول إلى عناصر المصفوفة بشكل عشوائي
  • بنية بيانات الصفيف ليست ديناميكية بالكامل

المصفوفات - Edureka

فمثلا ، قد نرغب في لعبة فيديو لتتبع أعلى عشر نقاط لتلك اللعبة. بدلا من استخدام عشرة مختلفة المتغيرات لهذه المهمة ، يمكننا استخدام اسم واحد للمجموعة بأكملها واستخدام أرقام الفهرس للإشارة إلى الدرجات العالية في تلك المجموعة.

قائمة مرتبطة

إلى هي بنية بيانات خطية مع مجموعة من العقد المتعددة ، حيث eيخزن عنصر ach بياناته الخاصة ومؤشرًا إلى موقع العنصر التالي. يشير الرابط الأخير في قائمة مرتبطة إلى قيمة خالية ، مما يشير إلى نهاية السلسلة. عنصر في قائمة مرتبطة يسمى العقدة . العقدة الأولى تسمى رئيس .العقدة الأخيرة تسمىال ذيل .

أنواع القوائم المرتبطة

قائمة مرتبطة بشكل فردي (أحادية الاتجاه)

قائمة مرتبطة مزدوجة (ثنائية الاتجاه)

قائمة مرتبطة دائرية

إليك مثال بسيط: تخيل قائمة مرتبطة مثل سلسلة من مشابك الورق المرتبطة ببعضها البعض. يمكنك بسهولة إضافة مشبك ورق آخر إلى الأعلى أو الأسفل. حتى أنه من السهل إدخال واحدة في المنتصف. كل ما عليك فعله هو فصل السلسلة الموجودة في المنتصف ، وإضافة مشبك الورق الجديد ، ثم إعادة توصيل النصف الآخر. القائمة المرتبطة متشابهة.

الأكوام

كومة، بنية بيانات مجردة ، عبارة عن مجموعة من شاء التي يتم إدخالها وإزالتها وفقًا لـ أخيرًا يصرف أولاً (LIFO) المبدأ. يمكن إدراج الكائنات في مكدس في أي وقت ، ولكن يمكن إزالة أحدث كائن تم إدراجه (أي 'الأخير') في أي وقت.المدرجة أدناه هي خصائص المكدس:

  • إنها قائمة الطلبات التييمكن إجراء الإدراج والحذف فقط في نهاية واحدة تسمى أعلى
  • بنية البيانات العودية مع مؤشر إلى عنصرها العلوي
  • يتبع أخيرًا يصرف أولاً (LIFO) المبدأ
  • يدعم طريقتين أساسيتين
    • push (e): أدخل العنصر e في أعلى المكدس
    • pop (): قم بإزالة العنصر العلوي وإعادته إلى المكدس

تتضمن الأمثلة العملية للمكدس عند عكس الكلمةوللتحقق من صحة أقواستسلسل،تنفيذ وظيفة العودة في المتصفحات وغيرها الكثير.

قوائم الانتظار

هي أيضًا نوع آخر من بنية البيانات المجردة. على عكس المكدس ، فإن قائمة الانتظار هي مجموعة من الكائنات التي يتم إدراجها وإزالتها وفقًا لملف الوارد أولاً يصرف أولاً (FIFO) المبدأ. أي أنه يمكن إدراج العناصر في أي وقت ، ولكن العنصر الذي كان في قائمة الانتظار الأطول فقط يمكن إزالته في أي وقت.المدرجة أدناه هي خصائص قائمة الانتظار:

  • غالبًا ما يشار إليها باسم أول من يخرج أولا قائمة
  • يدعم طريقتين أساسيتين
    • enqueue (e): أدخل العنصر e ، في خلفي من قائمة الانتظار
    • dequeue (): قم بإزالة العنصر وإعادته من ملف أمامي من قائمة الانتظار

يتم استخدام قوائم الانتظار في ملفالنقل غير المتزامن للبيانات بين عمليتين وجدولة وحدة المعالجة المركزية وجدولة القرص وغيرها من المواقف التي يتم فيها مشاركة الموارد بين عدة مستخدمين ويتم تقديمها على أساس خادم يأتي أولاً. بعد ذلك في مقالة 'هياكل البيانات والخوارزميات في جافا' ، لدينا هياكل بيانات هرمية.

هياكل البيانات الهرمية في جافا

شجرة ثنائية

Binary Tree هو ملفهياكل بيانات الشجرة الهرمية التي كل عقدة لها طفلان على الأكثر ، والتي يشار إليها باسم ترك الطفل و ال الطفل المناسب . تحتوي كل شجرة ثنائية على مجموعات العقد التالية:

  • عقدة الجذر: هي العقدة العليا وغالبًا ما يشار إليها بالعقدة الرئيسيةلأنه يمكن الوصول إلى جميع العقد الأخرى من الجذر
  • الشجرة الفرعية اليسرى ، وهي أيضًا شجرة ثنائية
  • الشجرة الفرعية اليمنى ، وهي أيضًا شجرة ثنائية

المدرجة أدناه هي خصائص الشجرة الثنائية:

  • يمكن اجتياز الشجرة الثنائية بطريقتين:
    • العمق أول اجتياز : بالترتيب (يسار - جذر - يمين) ، طلب مسبق (جذر - يسار - يمين) وترتيب لاحق (يسار - يمين - جذر)
    • اتساع أول اجتياز : اجتياز ترتيب المستوى
  • التعقيد الزمني لاجتياز الشجرة: O (n)
  • الحد الأقصى لعدد العقد في المستوى 'l' = 2ل -1.

تشمل تطبيقات الأشجار الثنائية ما يلي:

  • تستخدم في العديد من تطبيقات البحث حيث يتم إدخال / مغادرة البيانات باستمرار
  • كسير عمل لتكوين الصور الرقمية للتأثيرات المرئية
  • يستخدم تقريبًا في كل جهاز توجيه ذي نطاق ترددي عالٍ لتخزين جداول أجهزة التوجيه
  • تستخدم أيضًا في الشبكات اللاسلكية وتخصيص الذاكرة
  • تستخدم في خوارزميات الضغط وغيرها الكثير

كومة ثنائية

Binary Heap هو ملفشجرة ثنائية، والذي يستجيب لخاصية الكومة. بعبارات بسيطةهو تباين في شجرة ثنائية بالخصائص التالية:

  • الكومة هي شجرة ثنائية كاملة: يقال إن الشجرة كاملة إذا كانت جميع مستوياتها ، باستثناء ربما الأعمق منها ، كاملة. تيملكيته لـ Binary Heap تجعله مناسبًا للتخزين في ملف .
  • يتبع خاصية الكومة: الكومة الثنائية هي إما ملف مين كومة أو أ ماكس كومة .
    • الحد الأدنى من الكومة الثنائية: Fأو كل عقدة في كومة ، قيمة العقدة هي أصغر من أو يساوي قيم الأطفال
    • ماكس كومة ثنائية: Fأو كل عقدة في كومة ، فإن قيمة العقدة هي أكبر من أو يساوي قيم الأطفال

تشمل التطبيقات الشائعة للكوامة الثنائيةتنفيذ قوائم انتظار ذات أولوية فعالة ، والعثور بكفاءة على أصغر (أو أكبر) عناصر في المصفوفة وغيرها الكثير.

جداول تجزئة

تخيل أن لديك ملف موضوع وتريد تعيين مفتاح لها لتسهيل البحث. لتخزين زوج المفتاح / القيمة هذا ، يمكنك استخدام مصفوفة بسيطة مثل بنية البيانات حيث يمكن استخدام المفاتيح (الأعداد الصحيحة) مباشرةً كمؤشر لتخزين قيم البيانات. ومع ذلك ، في الحالات التي تكون فيها المفاتيح كبيرة جدًا ولا يمكن استخدامها مباشرة كمؤشر ، يتم استخدام تقنية تسمى التجزئة.

في التجزئة ، يتم تحويل المفاتيح الكبيرة إلى مفاتيح صغيرة باستخدام وظائف التجزئة . ثم يتم تخزين القيم في بنية بيانات تسمىإلى جدول التجزئة. جدول التجزئة هو هيكل بيانات يقوم بتنفيذ قاموس ADT ، وهو هيكل يمكنه تعيين مفاتيح فريدة للقيم.

بشكل عام ، يحتوي جدول التجزئة على مكونين رئيسيين:

  1. صفيف دلو: مصفوفة دلو لجدول التجزئة هي مصفوفة A بالحجم N ، حيث يُنظر إلى كل خلية من A على أنها 'حاوية' ، أي مجموعة من أزواج القيمة الرئيسية. يحدد العدد الصحيح N قدرة المصفوفة.
  2. دالة تجزئة: إنها أي وظيفة تقوم بتعيين كل مفتاح k في خريطتنا إلى عدد صحيح في النطاق [0 ، N & ناقص 1] ، حيث N هي سعة مصفوفة الجرافة لهذا الجدول.

عندما نضع الكائنات في علامة التجزئة ، فمن الممكن أن تحتوي الكائنات المختلفة على نفس رمز التجزئة. وهذا ما يسمى ب تصادم . للتعامل مع التصادم ، هناك تقنيات مثل التسلسل والعنونة المفتوحة.

إذن ، هذه بعض هياكل البيانات الأساسية والأكثر استخدامًا في Java. الآن بعد أن أصبحت على دراية بكل منها ، يمكنك البدء في تنفيذها في ملف . بهذا نكون قد أكملنا الجزء الأول من مقالة 'هياكل البيانات والخوارزميات في جافا'. في الجزء التالي ، سوف نتعرف علىالخوارزميات الأساسية وكيفية استخدامها في تطبيقات عملية مثل الفرز والبحث ، فرق تسد ، الخوارزميات الجشعة ، البرمجة الديناميكية.

الخوارزميات في جافا

تُستخدم الخوارزميات تاريخيًا كأداة لحل الحسابات الرياضية المعقدة ، وهي مرتبطة ارتباطًا وثيقًا بعلوم الكمبيوتر ، ومع هياكل البيانات على وجه الخصوص. الخوارزمية هي سلسلة من التعليمات التي تصف طريقة لحل مشكلة معينة في فترة زمنية محدودة. يتم تمثيلهم بطريقتين:

  • مخططات انسيابية - إنهاالتمثيل المرئي لتدفق التحكم في الخوارزمية
  • كود مزيف - ذلكهو تمثيل نصي لخوارزمية تقترب من شفرة المصدر النهائية

ملحوظة: يتم قياس أداء الخوارزمية بناءً على تعقيد الوقت وتعقيد المساحة. في الغالب ، يعتمد تعقيد أي خوارزمية على المشكلة وعلى الخوارزمية نفسها.

دعنا نستكشف فئتين رئيسيتين من الخوارزميات في جافا ، وهما:

فرز الخوارزميات في جافا

خوارزميات الفرز هي خوارزميات تضع عناصر القائمة في ترتيب معين. الأوامر الأكثر استخدامًا هي الترتيب العددي والترتيب المعجمي. في مقالة 'هياكل البيانات والخوارزميات' هذه ، دعنا نستكشف بعض خوارزميات الفرز.

فرز الفقاعات في جافا

فرز الفقاعات ، والذي يشار إليه غالبًا باسم فرز الغرق ، هو أبسط خوارزمية الفرز. يتنقل بشكل متكرر من خلال القائمة المراد تصنيفها ، ويقارن كل زوج من العناصر المتجاورة ويتبادلها إذا كانت بالترتيب الخطأ.حصل فرز الفقاعات على اسمه لأنه يقوم بتصفية العناصر إلى أعلى المصفوفة ، مثل الفقاعات التي تطفو على الماء.

هناالكود الزائف الذي يمثل خوارزمية الفرز الفقاعي (سياق الفرز التصاعدي).

a [] هي مصفوفة من الحجم N تبدأ BubbleSort (a []) تعلن عن عدد صحيح i ، j لـ i = 0 إلى N - 1 لـ j = 0 إلى N - i - 1 إذا كانت [j]> a [j + 1 ] ثم قم بتبديل a [j] ، a [j + 1] نهاية إذا كانت النهاية لإرجاع BubbleSort

يقوم هذا الرمز بترتيب مصفوفة أحادية البعد من عناصر البيانات N بترتيب تصاعدي. حلقة خارجية تجعل N-1 يمر فوق المصفوفة. يستخدم كل مسار حلقة داخلية لتبادل عناصر البيانات بحيث 'فقاعات' عنصر البيانات الأصغر التالي في بداية المصفوفة. لكن المشكلة هي أن الخوارزمية تحتاج إلى مسار واحد كامل دون أي مبادلة لتعرف أن القائمة مرتبة.

كيفية استخدام طريقة القطع في جافا

التعقيد الأسوأ والمتوسط ​​للحالة: يا (ن * ن). تحدث أسوأ حالة عندما يتم فرز المصفوفة عكسيًا.

أفضل تعقيد وقت الحالة: على). تحدث أفضل حالة عندما يتم فرز المصفوفة بالفعل.

فرز التحديد في Java

فرز التحديد هو مزيج من البحث والفرز. تقوم الخوارزمية بفرز المصفوفة عن طريق إيجاد الحد الأدنى للعنصر بشكل متكرر (مع مراعاة الترتيب التصاعدي) من الجزء غير المصنف ووضعه في موضع مناسب في المصفوفة.

إليك كود كاذب يمثل خوارزمية فرز التحديد (سياق فرز تصاعدي).

a [] هي مصفوفة من الحجم N تبدأ SelectionSort (a []) لـ i = 0 إلى n - 1 / * حدد العنصر الحالي كحد أدنى * / min = i / * ابحث عن الحد الأدنى للعنصر * / لـ j = i + 1 إلى n إذا كانت القائمة [j]

كما يمكنك أن تفهم من الكود ، فإن عدد المرات التي يمر فيها الفرز عبر المصفوفة أقل بواحد من عدد العناصر في المصفوفة. تعثر الحلقة الداخلية على القيمة الأصغر التالية وتضع الحلقة الخارجية هذه القيمة في موقعها الصحيح. لا يقوم فرز التحديد أبدًا بأكثر من مقايضات O (n) ويمكن أن يكون مفيدًا عندما تكون الكتابة في الذاكرة عملية مكلفة.

تعقيد الوقت: على2) حيث توجد حلقتان متداخلتان.

مساحة إضافية: أو (1).

إدراج فرز في Java

فرز الإدراج عبارة عن خوارزمية فرز بسيطة تتكرر عبر القائمة من خلال استهلاك عنصر إدخال واحد في كل مرة وإنشاء الصفيف النهائي الذي تم فرزها. إنه بسيط للغاية وأكثر فاعلية على مجموعات البيانات الأصغر. إنها تقنية فرز مستقرة وموضعية.

إليك كود كاذب يمثل خوارزمية تصنيف الإدراج (سياق فرز تصاعدي).

a [] هي مجموعة من الحجم N تبدأ InsertionSort (a []) من أجل i = 1 إلى N key = a [i] j = i - 1 بينما (j> = 0 و [j]> key0 a [j + 1] = x [j] j = j - 1 نهاية بينما [j + 1] = نهاية المفتاح لنهاية InsertionSort

كما يمكنك أن تفهم من الكود ، فإن خوارزمية فرز الإدراجيزيل عنصرًا واحدًا من بيانات الإدخال ، ويجد الموقع الذي ينتمي إليه ضمن القائمة التي تم فرزها ويدرجه هناك. يتكرر حتى لا تبقى عناصر الإدخال غير مرتبة.

أفضل حالة: أفضل حالة هي عندما يكون الإدخال عبارة عن مصفوفة تم فرزها بالفعل. في هذه الحالة ، يكون لفرز الإدراج وقت تشغيل خطي (على سبيل المثال ، & Theta (n)).

الحالة الأسوأ: أبسط مدخلات أسوأ حالة هي مصفوفة مرتبة بترتيب عكسي.

QuickSort في Java

خوارزمية Quicksort هي خوارزمية فرز سريعة ومتكررة وغير مستقرة تعمل وفقًا لمبدأ فرق تسد. يختار عنصرًا كمحور ويقسم المصفوفة المحددة حول هذا المحور المختار.

خطوات تنفيذ الفرز السريع:

  1. اختر 'نقطة محورية' مناسبة.
  2. قسّم القوائم إلى قائمتينبناءً على هذا العنصر المحوري. يتم وضع كل عنصر أصغر من العنصر المحوري في القائمة اليسرى وكل عنصر أكبر يتم وضعه في القائمة اليمنى. إذا كان العنصر مساويًا للعنصر المحوري ، فيمكنه الانتقال إلى أي قائمة. هذا يسمى عملية التقسيم.
  3. فرز كل من القوائم الأصغر بشكل متكرر.

فيما يلي رمز زائف يمثل خوارزمية الترتيب السريع.

QuickSort (A كمصفوفة ، منخفضة مثل int ، عالية مثل int) {if (low

في الكود الكاذب أعلاه ، تقسيم() وظيفة تؤدي عملية التقسيم و كويكسورت () وظيفة تستدعي بشكل متكرر وظيفة التقسيم لكل قائمة أصغر تم إنشاؤها. تعقيد الترتيب السريع في الحالة المتوسطة هو & ثيتا (ن سجل (ن)) وفي أسوأ الحالات هو & ثيتا (ن 2).

دمج الفرز في جافا

Mergesort هي خوارزمية فرز سريعة ومتكررة ومستقرة تعمل أيضًا من خلال مبدأ فرق تسد. على غرار الترتيب السريع ، دمج الفرز يقسم قائمة العناصر إلى قائمتين. يتم فرز هذه القوائم بشكل مستقل ثم دمجها. أثناء تجميع القوائم ، يتم إدراج العناصر (أو دمجها) في المكان الصحيح في القائمة.

إليك كود كاذب يمثل خوارزمية دمج الفرز.

إجراء MergeSort (a كمصفوفة) إذا (n == 1) يُرجع var l1 كمصفوفة = a [0] ... a [n / 2] var l2 كمصفوفة = a [n / 2 + 1] ... a [n] l1 = mergesort (l1) l2 = mergesort (l2) يُرجع الدمج (l1، l2) إجراء نهاية الدمج (a as array، b as array) var c as array while (a and b have element) إذا ( a [0]> b [0]) أضف b [0] إلى نهاية c قم بإزالة b [0] من b آخر أضف [0] إلى نهاية c قم بإزالة [0] من النهاية إذا كانت النهاية أثناء (يحتوي a على عناصر) أضف [0] إلى نهاية c قم بإزالة [0] من نهاية بينما (يحتوي b على عناصر) أضف b [0] إلى نهاية c قم بإزالة b [0] من نهاية b أثناء الإرجاع ج نهاية الإجراء

ترتيب دمج () وظيفة يقسم القائمة إلى قسمين ، المكالمات ترتيب دمج () في هذه القوائم بشكل منفصل ثم يجمعها عن طريق إرسالها كمعلمات لدمج الدالة ().تحتوي الخوارزمية على تعقيد O (n log (n)) ولديها مجموعة واسعة من التطبيقات.

فرز الكومة في جافا

Heapsort هي خوارزمية فرز قائمة على المقارنةبنية بيانات الكومة الثنائية. يمكنك التفكير في الأمر كإصدار محسن لفرز التحديد ، حيثيقسم مدخلاته إلى منطقة مرتبة ومنطقة غير مرتبة ، ويقلص بشكل متكرر المنطقة غير المصنفة عن طريق استخراج العنصر الأكبر ونقله إلى المنطقة المصنفة.

خطوات تنفيذ Quicksort (بترتيب تصاعدي):

  1. بناء كومة قصوى باستخدام مصفوفة الفرز
  2. في هذه النقطةt ، يتم تخزين العنصر الأكبر في جذر الكومة. استبدله بالعنصر الأخير من الكومة وتقليل حجم الكومة بمقدار 1. أخيرًا ، كومة جذر الشجرة
  3. كرر الخطوات المذكورة أعلاه حتى يصبح حجم الكومة أكبر من 1

إليك كود زائف يمثل خوارزمية فرز الكومة.

Heapsort (a as array) for (i = n / 2-1) to i> = 0 heapify (a، n، i) for i = n-1 to 0 swap (a [0]، a [i]) heapify (a ، i ، 0) نهاية لـ heapify (a كمصفوفة ، n كـ int ، i as int) أكبر = i // تهيئة أكبر كجذر int l eft = 2 * i + 1 // left = 2 * i + 1 int right = 2 * i + 2 // right = 2 * i + 2 if (يسار [أكبر]) أكبر = يسار إذا (يمين [أكبر]) أكبر = يمين إذا (أكبر! = i) مبادلة ( a [i]، A [الأكبر]) كومة (a، n، أكبر) النهاية heapify

بصرف النظر عن هذه ، هناك خوارزميات فرز أخرى غير معروفة جيدًا مثل Introsort و Counting Sort وما إلى ذلك. بالانتقال إلى المجموعة التالية من الخوارزميات في مقالة 'هياكل البيانات والخوارزميات' هذه ، دعنا نستكشف خوارزميات البحث.

البحث في الخوارزميات في جافا

يعد البحث أحد الإجراءات الأكثر شيوعًا والتي يتم تنفيذها بشكل متكرر في تطبيقات الأعمال العادية. خوارزميات البحث هي خوارزميات للعثور على عنصر بخصائص محددة بين مجموعة من العناصر. دعنا نستكشف اثنين من أكثر خوارزميات البحث شيوعًا.

خوارزمية البحث الخطي في جافا

البحث الخطي أو البحث المتسلسل هو أبسط خوارزمية البحث. يتضمن البحث المتسلسل عن عنصر في بنية البيانات المحددة حتى يتم العثور على العنصر أو الوصول إلى نهاية الهيكل. إذا تم العثور على العنصر ، فسيتم إرجاع موقع العنصر وإلا فإن الخوارزمية ترجع NULL.

إليك الشفرة الزائفة التي تمثل البحث الخطي في جافا:

الإجراء linear_search (a [] ، value) لـ i = 0 إلى n-1 إذا كانت [i] = قيمة ، ثم اطبع 'Found' وإرجاع i end إذا كانت طباعة 'Not found' تنتهي في نهاية البحث الخطي

إنهاخوارزمية القوة الغاشمة.في حين أنه بالتأكيد الأبسط ، إلا أنه بالتأكيد ليس الأكثر شيوعًا ، نظرًا لعدم كفاءته. التعقيد الزمني للبحث الخطي هو على) .

خوارزمية البحث الثنائي في جافا

البحث الثنائي ، المعروف أيضًا باسم البحث اللوغاريتمي ، هو خوارزمية بحث تعثر على موضع القيمة المستهدفة داخل مصفوفة تم فرزها بالفعل. يقسم مجموعة المدخلات إلى نصفين متساويين وتتم مقارنة العنصر بالعنصر الأوسط في القائمة. إذا تم العثور على العنصر ، ينتهي البحث هناك. عدا ذلك ، نواصل البحث عن العنصر عن طريق تقسيم واختيار القسم المناسب من المصفوفة ، بناءً على ما إذا كان العنصر الهدف أصغر أو أكبر من العنصر الأوسط.

إليك الشفرة الزائفة التي تمثل البحث الثنائي في جافا:

إجراء binary_search مصفوفة تم فرزها بحجم n للمصفوفة x القيمة ليتم البحث عنها LowerBound = 1 upperBound = n بينما لم يتم العثور على x إذا كانت upperBound

ينتهي البحث عندما يتخطى الجزء العلوي من النطاق (المؤشر الخاص بنا) LowerBound (العنصر الأخير) ، مما يعني أننا بحثنا في المصفوفة بأكملها وأن العنصر غير موجود.إنها خوارزميات البحث الأكثر استخدامًا بشكل أساسي بسبب وقت البحث السريع. التعقيد الزمني للبحث الثنائي هو على) وهو تحسن ملحوظ في على) التعقيد الزمني للبحث الخطي.

يقودنا هذا إلى نهاية مقالة 'هياكل البيانات والخوارزميات في جافا'. لقد قمت بتغطية أحد أهم الموضوعات الأساسية في Java.آمل أن تكون واضحًا مع كل ما تم مشاركته معك في هذه المقالة.

تأكد من ممارسة أكبر قدر ممكن وإعادة تجربتك.

تفحص ال من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم. نحن هنا لمساعدتك في كل خطوة في رحلتك ، لكي تصبح بجانب أسئلة مقابلة جافا هذه ، توصلنا إلى منهج مصمم للطلاب والمهنيين الذين يريدون أن يصبحوا مطور جافا.

لديك سؤال لنا؟ يرجى ذكرها في قسم التعليقات في 'هياكل البيانات والخوارزميات في جافا' مقال وسنعاود الاتصال بك في أقرب وقت ممكن.