مقدمه‌ای بر کار با گراف در پایتون / NetworkX

گراف‌ها ساختاری برای مدلسازی روابط در جهان ریاضیات هستند و از آن‌ها برای حل مسائل مختلف استفاده می‌شود. هر گراف می‌تواند شامل گره‌هایی باشد و هر دو گره مرتبط به یکدیگر با استفاده از یال‌ها متصل می‌شوند. برای این که با گراف‌ها بیشتر آشنا شوید می‌توانید اسامی کتاب‌های گراف را در فروشگاه آمازون مشاهده کنید. همچنین برای دانلود رایگان کتاب‌ها در libgen دنبالشان بگردید و دانلودشان کنید! 🙂

گراف در زبان‌های برنامه‌نویسی

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

1- ماتریس مجاورت: می‌توان با استفاده از ماتریس مجاورت گراف مدنظر آن را نمایش داد که شامل تعداد گره‌ها و هم یال‌ها است. ماتریس مجاورت باعث سهولت در بهره‌گیری از جبرخطی در گراف‌ها می‌شود.

شکل 1 – ماتریس مجاورت گراف

2- مجموعه گره‌ها و یال‌ها: در این نوع از نمایش در ابتدا گره‌ها ذخیره می‌گردند و سپس یال‌ها به صورت دو عضوی‌هایی از گره‌ها به نمایش در می‌آیند. برای گراف شکل 2 خواهیم داشت:

شکل 2 – گراف فرضی

V={1, 2, 3, 4, 5, 6}, E={(1, 4), (4,5), (4,2), (2, 6), (6, 3)}

علاوه بر دو روشی که برای کار با گراف‌ها در زبان‌های برنامه‌نویسی در بالا نشان داده شدند، می‌توان روش‌های دیگری نیز بکار گرفت. حال برخی اوقات حجم داده‌ها زیاد است و نوشتن توابع مدنظر بسیار زمان بر! به همین دلیل توسعه‌دهندگان زبان‌های برنامه‌نویسی کتابخانه‌های مختلفی برای بهره‌گیری از گراف‌ها توسعه داده‌اند. یکی از این کتابخانه‌های بسیار کاربردی در زبان پایتون NetworkX است.

آشنایی با NetworkX، مدعی الگراف پایتون!

خلق یک گراف

برای اولین قدم باید کتابخانه مدنظر را در پایتون import کنیم و سپس گراف دلخواه رو بسازیم. اسم این گراف را G می‌گذاریم و هیچ گره و یالی برای آن در نظر نمی‌گیریم.

import networkx as nx
G = nx.Graph()

گره‌ها در این گراف می‌توانند شامل هر چیزی که قابل هش گرفتن هستند، باشند. (می‌دانیم که Null نه!) برای مثال گره‌های ما می‌توانند شامل عکس، فایل XML، رشته متنی و … باشند.

گره‌‌بازی!

حال می‌خواهیم اولین گره گراف G را به آن بیفزاییم. برای همین منظور از دستور زیر استفاده می‌کنیم.

G.add_node(1)

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

G.add_nodes_from([2, 3])

این نوشته ادامه دارد…

درباره ی ابوالفضل یوسفی

ابوالفضل یوسفی
فارغ‌التحصیل کارشناسی مهندسی برق دانشگاه تهران؛ دانشجوی کارشناسی ارشد مهندسی مخابرات امن دانشگاه صنعتی شریف

مطلب پیشنهادی

شروع کار با Qt برای C++: مقدمه‌ای جامع

معرفی Qt در چشم‌انداز همیشه در حال تحول توسعه برنامه‌های کاربردی C++، نیاز به فریمورک‌های …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دو × 3 =