AIUnlimited
🌳

أسس الذكاء الاصطناعي

🌱
AI Seeds

Start from zero

🌿
AI Sprouts

Build foundations

🌳
AI Branches

Apply in practice

🏕️
AI Canopy

Go deep

🌲
AI Forest

Master AI

🔨

إتقان الذكاء الاصطناعي

✏️
AI Sketch

Start from zero

🪨
AI Chisel

Build foundations

⚒️
AI Craft

Apply in practice

💎
AI Polish

Go deep

🏆
AI Masterpiece

Master AI

📘

تطبيق الذكاء الاصطناعي

📖
فهم النماذج مفتوحة المصدر

أسس وموارد للنماذج مفتوحة المصدر

🎯
من المشكلة إلى مهمة النموذج

تحويل مشاكل الأعمال إلى مهام نموذجية

⚡
تشغيل نموذجك الأول

شاهد نتائجك الأولى في 30 دقيقة

🔧
التحسين الدقيق والتقييم

حسّن النماذج وقيّم الأداء

🚀
أنظمة التطبيقات

بناء تطبيقات ذكاء اصطناعي واقعية

🎨
الذكاء الاصطناعي التوليدي

استكشف نماذج AIGC مفتوحة المصدر

🤖
الوكيل

تعلم أطر عمل الوكيل وأدوات MCP

📐
أسس تكميلية

أساسيات LLM والتقييم

🎓

أكاديمية كلاود

🤖
Claude 101

Learn AI basics with Claude

💻
Claude Code 101

Code with Claude as your pair programmer

🤝
Introduction to Claude Cowork

Collaborate with Claude on complex projects

⚙️
Claude Platform 101

Build apps with the Claude API

المختبر

تم تحميل 7 تجارب
🧬ملعب الشبكة العصبية🤖ذكاء اصطناعي أم إنسان؟🥋دوجو التوجيهات🏁سباق الخوارزميات🧠مسابقة معلومات الذكاء الاصطناعي🏗️لوحة تصميم النظام
🎯مقابلة تجريبيةدخول المختبر→
🚀

التطوير المهني

🚀
منصة انطلاق المقابلات

ابدأ رحلتك

🌟
إتقان المقابلات السلوكية

أتقن المهارات الشخصية

💻
المقابلات التقنية

تفوّق في جولة البرمجة

🤖
مقابلات الذكاء الاصطناعي وتعلم الآلة

إتقان مقابلات تعلم الآلة

🏆
العرض وما بعده

احصل على أفضل عرض

ابدأ الآن
AIUnlimited

رخصة MIT

沪ICP备18025655号-11

تعلّم

  • أساسيات الذكاء الاصطناعي
  • تطبيق الذكاء الاصطناعي
  • أكاديمية كلاود
  • المختبر
  • التطوير المهني

المجتمع

  • عن المنصة
  • الأسئلة الشائعة

الدعم

  • footer.terms
  • footer.privacy
  • footer.contact
البرامج الأكاديمية للذكاء الاصطناعي والهندسة›✏️ AI Sketch›الدروس›مسائل المصفوفة والشبكة
🗺️
AI Sketch • متوسط⏱️ 19 دقيقة للقراءة

مسائل المصفوفة والشبكة

المصفوفات ثنائية الأبعاد كشبكات

المصفوفة هي مجرد مصفوفة ثنائية الأبعاد، ولكن في المقابلات غالبًا ما تمثل شبكة - خريطة أو لوحة أو متاهة. كل خلية grid[r][c] هي عقدة، وجيرانها عبارة عن خلايا مجاورة.

grid = [
  [1, 1, 0],
  [1, 0, 0],
  [0, 0, 1]
]

الصف r، العمود c، الأبعاد m × n. بسيطة - ولكن الأنماط المبنية في الأعلى قوية.

المصفوفات الاتجاهية

بدلًا من كتابة أربع عبارات if منفصلة، ​​استخدم مصفوفة اتجاه:

# 4-directional (up, down, left, right)
dirs = [(-1,0), (1,0), (0,-1), (0,1)]

# 8-directional (includes diagonals)
dirs = [(-1,0),(1,0),(0,-1),(0,1),
        (-1,-1),(-1,1),(1,-1),(1,1)]

for dr, dc in dirs:
    nr, nc = r + dr, c + dc
    if 0 <= nr < m and 0 <= nc < n:
        # process neighbour

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

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

BFS على الشبكة - أقصر مسار في المتاهة

يعثر BFS على أقصر مسار في شبكة غير مرجحة. ابدأ من المصدر، واستكشف جميع الجيران على مسافة 1، ثم المسافة 2، وهكذا.

from collections import deque

def shortest_path(grid, start, end):
    m, n = len(grid), len(grid[0])
    q = deque([(start[0], start[1], 0)])
    visited = {(start[0], start[1])}
    dirs = [(-1,0),(1,0),(0,-1),(0,1)]
    while q:
        r, c, dist = q.popleft()
        if (r, c) == end:
            return dist
        for dr, dc in dirs:
            nr, nc = r+dr, c+dc
            if 0<=nr<m and 0<=nc<n and (nr,nc) not in visited and grid[nr][nc]==0:
                visited.add((nr, nc))
                q.append((nr, nc, dist+1))
    return -1
توسيع BFS مستوى تلو الآخر عبر متاهة الشبكة
يستكشف BFS الخلايا مستوى تلو الآخر، مما يضمن أقصر مسار.

DFS على الشبكة - تعبئة الفيضان وعدد الجزر

تعبئة الفيضان (مثل أداة دلو الطلاء): من خلية البداية، قم بتغيير جميع الخلايا المتصلة من نفس اللون. يعمل كل من DFS أو BFS.

عدد الجزر: مسح الشبكة؛ عندما تجد ، قم بتشغيل DFS/BFS لوضع علامة على الجزيرة بأكملها كزيارة، ثم قم بزيادة العدد.

الدرس 10 من 100٪ مكتمل
←الخوارزميات الجشعة

مناقشة

تسجيل الدخول للانضمام إلى النقاش

1
def num_islands(grid):
    count = 0
    for r in range(len(grid)):
        for c in range(len(grid[0])):
            if grid[r][c] == '1':
                dfs(grid, r, c)  # mark island
                count += 1
    return count
🧠فحص سريع

في ”عدد الجزر”، لماذا نضع علامة على الخلايا التي تمت زيارتها أثناء DFS؟

البرتقال المتعفن - BFS متعدد المصادر

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

Minute 0:  [2, 1, 1]    2 = rotten, 1 = fresh
           [1, 1, 0]
           [0, 1, 1]

Minute 4:  [2, 2, 2]    All reachable oranges rotten
           [2, 2, 0]
           [0, 2, 2]

الفكرة الرئيسية: BFS متعدد المصادر يبدأ من عقد متعددة في وقت واحد، وليس من عقدة واحدة.

🧠فحص سريع

ما الذي يجعل ”البرتقال المتعفن” مختلفًا عن BFS القياسي؟

اجتياز المصفوفة الحلزونية

قم بالسير على المصفوفة بترتيب حلزوني: يمين ← أسفل ← يسار ← أعلى، مع تقليص الحدود بعد كل تمريرة.

def spiral(matrix):
    res = []
    top, bot = 0, len(matrix) - 1
    left, right = 0, len(matrix[0]) - 1
    while top <= bot and left <= right:
        for c in range(left, right + 1):
            res.append(matrix[top][c])
        top += 1
        for r in range(top, bot + 1):
            res.append(matrix[r][right])
        right -= 1
        if top <= bot:
            for c in range(right, left - 1, -1):
                res.append(matrix[bot][c])
            bot -= 1
        if left <= right:
            for r in range(bot, top - 1, -1):
                res.append(matrix[r][left])
            left += 1
    return res

دوران المصفوفة (90 درجة)

قم بتدوير مصفوفة N×N في اتجاه عقارب الساعة في مكانها: قم بالتبديل (بدّل [r][c] بـ [c][r])، ثم اعكس كل صف.

Original → Transpose → Reverse rows
1 2 3     1 4 7       7 4 1
4 5 6  →  2 5 8   →   8 5 2
7 8 9     3 6 9       9 6 3
🤔
Think about it:للتدوير عكس اتجاه عقارب الساعة، هل يمكنك عكس الصفوف أولاً ثم تبديلها، أو تبديل الأعمدة ثم عكسها؟ جربه على الورق.

البحث في مصفوفة ثنائية الأبعاد مرتبة

نوعان شائعان:

  • تم فرز الصفوف والأعمدة بشكل مستقل - ابدأ من الزاوية العلوية اليمنى. إذا كان الهدف أصغر، تحرك إلى اليسار؛ إذا كان أكبر، انتقل إلى أسفل. يا (م + ن).
  • مرتبة بالكامل (يبدأ كل صف حيث ينتهي الصف السابق) - تعامل كمصفوفة مفروزة مسطحة وبحث ثنائي. يا (سجل (م × ن)).

البرمجة الديناميكية على الشبكات

المسارات الفريدة: قم بحساب المسارات من أعلى اليسار إلى أسفل اليمين مع التحرك لليمين أو للأسفل فقط. dp[r][c] = dp[r-1][c] + dp[r][c-1].

الحد الأدنى لمجموع المسار: نفس الفكرة ولكن اختر الحد الأدنى للمسار الوارد.

غالبًا ما تكون هذه هي المقدمة اللطيفة للبرمجة الديناميكية ثنائية الأبعاد.

🧠فحص سريع

في مشكلة المسارات الفريدة، ما هو dp[0][c] لأي عمود c؟

ورقة الغش لأنماط الشبكة

| نمط | تقنية | المشكلة الرئيسية | |---------|----------|-------------| | أقصر طريق (غير مرجح) | بي إف إس | المتاهة أقصر طريق | | المكونات المتصلة | دي إف إس / بي إف إس | عدد الجزر | | انتشار متعدد المصادر | متعدد المصادر BFS | البرتقال المتعفن | | أمر الاجتياز | مؤشرات الحدود | مصفوفة حلزونية | | تحويل في المكان | تبديل + عكس | تدوير الصورة | | عد المسارات | موانئ دبي | مسارات فريدة | | البحث في الشبكة المصنفة | الدرج / بحث ثنائي | بحث في مصفوفة ثنائية الأبعاد |

🤔
Think about it:العديد من مشاكل الشبكة هي في الواقع مشاكل رسم بياني مقنعة. متى تفضل DFS على BFS على الشبكة، والعكس صحيح؟

📚 مزيد من القراءة

  • NeetCode - البرمجة الديناميكية ثنائية الأبعاد - مشكلات DP للشبكة مع التفسيرات المرئية
  • دليل المقابلة التقنية - Matrix - الأنماط والتقنيات الشائعة
  • علامة LeetCode Matrix - المئات من المسائل التدريبية