0Pricing
Go Academy · درس

البحث في البيانات المرتّبة

استخدم البحث الثنائي

البحث في البيانات المرتّبة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

أهمية البحث في البيانات المرتبة

بعد ترتيب الشريحة، يمكنكم العثور على العناصر بسرعة أكبر بكثير باستخدام البحث الثنائي بدلًا من فحص كل عنصر.

توفر حزمة sort في Go دوال مساعدة للبحث تعمل في زمن لوغاريتمي.

البحث الخطي مقابل البحث الثنائي

يفحص البحث الخطي كل عنصر واحدًا تلو الآخر (O(n)). أما البحث الثنائي فيقسّم نطاق البحث إلى النصف في كل خطوة (O(log n))، لكنه يتطلب أن تكون البيانات مرتبة أولًا.

sort.SearchInts

تعثر sort.SearchInts على الفهرس الذي توجد فيه قيمة ما، أو الذي ستُدرج فيه للحفاظ على ترتيب الشريحة. ويجب أن تكون الشريحة مرتبة تصاعديًا مسبقًا.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 3, 5, 7, 9}
	i := sort.SearchInts(nums, 5)
	fmt.Println("index:", i)
}

تأكيد التطابق

تُعيد SearchInts فهرسًا حتى إذا كانت القيمة غير موجودة، وهو موضع الإدراج. أكّدوا التطابق دائمًا بالتحقق من i < len(s) && s[i] == target.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 3, 5, 7}
	target := 4
	i := sort.SearchInts(nums, target)
	found := i < len(nums) && nums[i] == target
	fmt.Println("index:", i, "found:", found)
}

موضع الإدراج

عندما تكون القيمة مفقودة، يكون الفهرس المُعاد هو الموضع الذي ستُدرجونها فيه بالضبط للحفاظ على الترتيب. في هذا المثال، ستُدرج القيمة 4 في الفهرس 2.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{1, 3, 5, 7}
	i := sort.SearchInts(nums, 4)
	fmt.Println("insert 4 at index:", i)
}

البحث في السلاسل النصية

تجري sort.SearchStrings العملية نفسها لشريحة مرتبة من السلاسل النصية.

package main

import (
	"fmt"
	"sort"
)

func main() {
	words := []string{"apple", "cherry", "mango"}
	i := sort.SearchStrings(words, "cherry")
	fmt.Println("index:", i)
}

الدالة العامة sort.Search

تُعد sort.Search النواة المرنة. فأنتم تمررون إليها طولًا ودالة f تكون نتيجتها false ثم true؛ وتُعيد أصغر فهرس تكون عنده f مساوية لـ true.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{2, 4, 6, 8, 10}
	i := sort.Search(len(nums), func(i int) bool {
		return nums[i] >= 6
	})
	fmt.Println("first >= 6 at index:", i)
}

العثور على أول عنصر أكبر من قيمة

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

package main

import (
	"fmt"
	"sort"
)

func main() {
	scores := []int{10, 20, 30, 40}
	i := sort.Search(len(scores), func(i int) bool {
		return scores[i] > 25
	})
	fmt.Println("first > 25:", scores[i])
}

يجب إجراء الفرز أولًا

يفترض البحث الثنائي وجود ترتيب. فإذا لم تكن الشريحة مرتبة، تكون النتائج بلا معنى. افرزوا دائمًا قبل البحث.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{9, 1, 5, 3}
	sort.Ints(nums)
	i := sort.SearchInts(nums, 5)
	fmt.Println(nums, "-> index of 5:", i)
}

تحسن في الأداء

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

اختيار دالة البحث المساعدة

ملخص:

  • sort.SearchInts / SearchStrings / SearchFloat64s - الشرائح ذات الأنواع المحددة
  • sort.Search - شرط مخصص على أي بيانات قابلة للفهرسة

اختبار سريع

استدعيتم sort.SearchInts(s, 4) على شريحة مرتبة لا تحتوي على 4. ماذا تُعيد الدالة؟

مراجعة

البحث في البيانات المرتبة باستخدام البحث الثنائي:

  • يجب ترتيب البيانات أولًا
  • تُعيد الدوال المساعدة فهرسًا أو موضع الإدراج
  • أكّدوا التطابق باستخدام اختبار مساواة
  • تتعامل sort.Search مع الشروط المخصصة

الأسئلة الشائعة

هل درس «البحث في البيانات المرتّبة» مجاني؟

نعم — نص درس «البحث في البيانات المرتّبة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «البحث في البيانات المرتّبة»؟

استخدم البحث الثنائي تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «البحث في البيانات المرتّبة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ترتيب الشرائح
  2. ترتيبات فرز مخصّصة
  3. البحث في البيانات المرتّبة
  4. الفرز المستقر
← العودة إلى Go Academy