نظریه جالب گراف
تعریف دقیقتر گراف به این صورت است، که گراف مجموعهای از رأسها است، که توسط خانوادهای از زوجهای مرتب که همان یالها هستند به هم مربوط (وصل) شدهاند.
یالها بر دو نوع ساده و جهت دار هستند، که هر کدام در جای خود کاربردهای بسیاری دارد. مثلاً اگر صرفاً اتصال دو نقطه -مانند اتصال تهران و زنجان با کمک آزادراه- مد نظر شما باشد، کافیست آن دو شهر را با دو نقطه نمایش داده، و اتوبان مزبور را با یالی ساده نمایش دهید. اما اگر بین دو شهر جادهای یکطرفه وجود داشته باشد آنگاه لازمست تا شما با قرار دادن یالی جهت دار مسیر حرکت را در آن جاده مشخص کنید. همچنین برای اینکه فاصله بین دو شهر را در گراف نشان دهید، میتوانید از گراف وزن دار استفاده کنید و مسافت بین شهرها را با یک عدد بر روی هر یال نشان دهید.
آغاز نظریهٔ گراف به سدهٔ هجدهم بر میگردد. اولر ریاضیدان بزرگ مفهوم گراف را برای حل مسئله پلهای کونیگسبرگ ابداع کرد اما رشد و پویایی این نظریه عمدتاً مربوط به نیم سدهٔ اخیر و با رشد علم انفورماتیک بودهاست.
مهمترین کاربرد گراف مدلسازی پدیدههای گوناگون و بررسی بر روی آنهاست. با گراف میتوان به راحتی یک نقشه بسیار بزرگ یا شبکهای عظیم را در درون یک ماتریس به نام ماتریس وقوع گراف ذخیره کرد و یا الگوریتمهای مناسب مانند الگوریتم دایسترا یا الگوریتم کروسکال و ... را بر روی آن اعمال نمود.
یکی از قسمتهای پرکاربرد نظریهٔ گراف، گراف مسطح است که به بررسی گرافهایی میپردازد که میتوان آنها را به نحوی روی صفحه کشید که یالها جز در محل راسها یکدیگر را قطع نکنند. این نوع گراف در ساخت جادهها و حل مساله کلاسیک و قدیمی سه خانه و سه چاه آب به کار میرود.
نظریه گراف یکی از پرکاربردترین نظریهها در شاخههای مختلف علوم مهندسی (مانند عمران)، باستانشناسی (کشف محدوده یک تمدن) و ... است.
روابط میان راسهای یک گراف را میتوان با کمک ماتریس بیان کرد .
برای نمایش تصویری گرافها معمولاً از نقطه یا دایره برای کشیدن راسها و از کمان یا خط راست برای کشیدن یال بین راسها استفاده میشود.
اندازه گراف
اندازه گراف تعداد یالهای یک گراف است و به صورت |(E(G| بیان میشود.
درجه راسها
در نظریه گرافها، درجه یک راس به تعداد یالهای متصل به آن راس گفته میشود. به عبارت دیگر. درجه یک راس تعداد همسایگی (مجاورت)های مستقیم یک راس را بیان میکند. از آنجا که هر یال در گراف دو راس را به هم وصل میکند، مجموع درجه راسهای یک گراف با دو برابر تعداد یالهای ان گراف برابر است.
[ انواع گراف
گراف همبند گرافی است که بین همهی راسهای آن یالی وجود داشته باشد
گراف هی وود(Heawood Graph)
گراف کنزر(Kneser)
گراف کامل
در نظریه گراف ٫یک گراف کامل ٫گرافی است که هر بین هر دو راس آن دقیقاً یک یال وجود داشته باشد. یک گراف کامل از مرتبه n ٫ دارای n راس و
یال است و آن را با nk نشان میدهند.یک گراف کامل یک گراف منتظم از درجه n-۱ است.
گراف پترسن
گراف پترسن گرافی با ۱۰ راس و ۳- منتظم است که به صورت زیر رسم می گردد:
گراف دو بخشی
مفهوم شهودی
فرض کنید در یک شرکت صنعتی تعدادی شغل بدون متصدی می باشند و تعدادی متقاضی برای این مشاغل اعلام آمادگی نموده اند. حال این سوال مطرح میشود که آیا می توان به هر متقاضی شغلی متناسب او اختصاص داد؟ برای حل چنین مسئله ای که به مسئلهٔ تخصیص موسوم است، با استفاده از گراف می توان وضعیتهای خاص را پیاده سازی نمود. بدین ترتیب که گروهی که متقاضی مشاغل هستند در مجموعه ای به نام X و مجموعه مشاغل بدون متصدی را در مجموعه ای به نام Y قرار می دهیم. گراف رسم شده چنین است که به بعضی از اعضای مجموعه X یک یا چند عضو از مجموعه Y توسط یالها وصل می نماید. به عبارت دیگر گراف بوجود امدی دارای یالهای xy است که مر متقاضی x را از مجموعه X به شغلهای مناسب y از مجموعه Y متصل می نماید. به عبارت دقیقتر هیچ دو راس متعلق به مجموعه X(متفاضیان) یا هیچ دو راس متعلق به مجموعه Y(مشاغل) توسط هیچ یالی به هم متصل نمی باشند. چنین گرافی را گراف دوبخشی یا دوپارچه می گویند.
تعریف
گراف دوبخشی گرافی است که بتوان مجموعه رئوس آن را به دو مجموعه X و Y چنان افراز نمود که هر یال آن دارای یک انتها در X و یک انتها در Y باشد، به گونه ای که هیچ دوراسی در X یا در Y با هم مجاور نباشند. چنین افرازی را دوبخشی کردن گراف می نامند.
- یادآوری: منظور از افراز یک مجموعه چون A به چند مجموعه، تقسیم مجموعه A به چند مجموعه ناتهی دیگر است که باهم اشتراکی نداشته باشند و اجتماع همه آنها برابر مجموعه A باشد. و در اینجا اگر V به عنوان مجموعه رئوس باشد افراز V به دو مجموعه X و Y (ناتهی) به این صورت است که: X
Y = V و X
Y =
- مثال
به عنوان مثال گراف زیر یک گراف دو بخشی است:
گراف ساده
گراف ساده: هر گراف G زوج مرتبی مانند (V,E) است که در آن V مجموعهای متناهی و ناتهی است و E زیرمجموعهای از تمام زیرمجموعههای دو عضوی V میباشد. اعضای V را رأسهای G و اعضای E را یالهای G مینامیم. به بیان ساده تر بین دو رأس یک گراف ساده حداکثر یک یال وجود دارد.
گراف همیلتونی
گراف چرخ
هر گراف G که دارای n راس باشد کهn≥۴ و یکی از رئوس از درجهٔ n-۱ و بقیه از درجهٔ سه باشند، را یک گراف چرخ می نامیم- مانند مثالهای زیر:
گراف چرخn راسی را با nW نمایش می دهیم.
گراف چندگانه
گراف چندگانه: هرگاه بین دو رأس متمایز از یک گراف بیش از یک یال وجود داشته باشد، آن را یک گراف چند گانه میگوییم.
گراف مکعبی
یک گراف «k مکعب» (k-Cube) گرافی است که رئوس آنk تایی از «صفر» و «یک» هستند که دو رأس آن به یکدیگر متصل هستند اگر و فقط اگر دو رأسشان دقیقاً در یک مؤلفه با یکدیگر تفاوت داشته باشند. بهعبارت دیگر اگر kعددی طبیعی باشد منظور از « kمکعب» گرافی است که رأسهای آن همهٔ دنبالههای رقمی از «صفر» و «یک» هستند و دو رأس در این گراف مجاور بوده هرگاه دنبالههای متناظرشان دقیقاً در یک مؤلفه اختلاف داشته باشند (شکل ۱).
میتوان نشان داد که یک گراف «k مکعب» (k-Cube) دارای ویژگیهایی نظیر ذیل است:
- تعداد رؤوس =۲k
- تعداد یالها=k*۲(k-۱)
- گرافی «دوبخشی» (Bipartite) است.
گراف جهت دار
گراف جهت دار: هر گراف G زوج مرتبی مانند (V,E) است که در آن V مجموعهای متناهی و ناتهی است و E زیرمجموعهای از مجموعهٔ تمام زوج مرتبهای متشکل از اعضای V است.
گراف جهتدارو کاربردهای آن
گراف جهت دارو کاربردهای آنگراف جهت دار D، یک سه تایی مرتب( O(D) و A(D) و ( V(D)است که تشکیل شده از یک مجموعه ناتهی V(D) از راسها ویک مجموعه (D) A مجزای از V(D)از کمانها و یک تابع وقوع O(D)که به هر کمان D یک زوج مرتب از راسهای D- که الزاماً متمایز نیستند- را نسبت میدهد. اگر a یک کمان وu,v دو راس باشند به طوری که(u,v) =(a)O (D)، آنگاه میگوئیم که u,a را به v وصل کرده است؛ u، دم v,a سرa نامیده می شود.
گراف مسطح
گراف مسطح: گراف مسطح گرافی است که میتوان آن را در یک صفحه محاط کرد به گونهای که یالهایش یکدیگر را تنها در راسها قطع کنند.
گراف وزن دار
گراف وزن دار: در یک گراف وزن دار، به هر یال یک وزن (عدد) نسبت داده میشود. معمولاً اعداد حقیقی به عنوان وزن یالها استفاده میشوند. اما بسیاری از الگوریتمهای پر کاربرد فقط برای گرافهایی که دارای وزن صحیح یا مثبت هستند طراحی شدهاند.
خصوصیات گرافهای خاص
- اگر درجهٔ همهٔ راسها در گراف ساده با هم برابر و برابر بزرگترین درجهٔ ممکن (یعنی p-۱ ) باشد، گراف مورد نظر منتظم کامل است. در این گونه گرافها، رابطهٔ میان رأسها و یالها چنین است:
-
- که در آن
تعداد راسها، و
تعداد یالها است. -
- اگر گراف همبند باشد (یعنی از هر نقطه بتوان به یک نقطه دلخواه دیگر رسید) ولی دور نداشته باشد (یعنی هیچ نقطهای از دوراه به نقطهٔ بعدی نرسد) میگویند گراف درختی است. در اینگونه گرافها فرمول زیر صدق میکند (شرط لازم):
-
- که در آن
تعداد رأسها، و
تعداد یالها است.[۲] -
- گراف اویلری و همیلتونی:گاهی اوقات ما میخواهیم در یک گراف حرکت کنیم.به اینصورت که از راسی به راسی دیگر برویم.در اینصورت ممکن است برای ما مهم باشد که از روی یال یا راس تکراری حرکت نکنیم(مشابه مسالهٔ فروشندهٔ دوره گرد).این مساله در صرفه جویی زمان و هزینه هم مهم است.(یعنی مبحث بهینه سازی).دراینجا دو موضوع گرافهای اویلری(دور زدن در گراف بدون یال تکراری)و همیلتونی(دور زدن بدون راس تکراری) مطرح میشود.براحتی میتوان بررسی کرد که راسهای گراف اویلری باید درجهٔ زوج داشته باشند.اما اینکه شرایط کامل لازم و کافی برای همیلتونی بودن یک گراف چیست هنوز حل نشده ماندهاست.
الگوریتمهای مهم
الگوریتم کراسکال(kruskal)
کد برنامه به زبان C
void kruskal()
{
int i, m, V, E;
struct edge
{ char v1, v۲; int w; };
struct edge e[maxE];
PQ pq(maxE); EQ eq(maxE);
cin >> V >> E;
for (i = ۱; i <= E; i++)
cin >> e[i].v۱ >> e[i].v۲ >> e[i].w;
for (i = ۱; i <= E; i++)
pq.insert(i, e[i].w);
for (i = ۰; i < V-۱; )
{
if (pq.empty()) break; else m = pq.remove();
if (eq.find(index(e[m].v1),index(e[m].v2),۱))
{ cout << e[m].v۱ << e[m].v۲ << ' '; i++; };
}
}
الگوریتم پریم(prim)
کد برنامه به زبان C
int testForPrime (int n) {
int p, i;
p = ۱;
i = ۳;
int result = n;
while (i < result) {
result = n / i;
if (n == i * result) {
p = ۰;
i = n;
}
i = i + ۲;
}
return (p);
}
int main (int argc, char * const argv[]) {
int p, i, n;
i = ۳;
n = ۵;
std::cout << «Initiating prime number generation sequence...\n\n۱: ۲\n۲: ۳\n»;
while (۱) {
p = testForPrime (n);
if (p == ۱) {
std::cout << i << «: » << n << «\n»;
i++;
}
n = n + ۲;
}
return ۰;
}[/align]
الگوریتم فلوید-وارشال(الگوریتم کوتاهترین مسیر)
کد برنامه به زبان C
#include#include void floyd(int cost[۴][۴],int p[۴][۴],int a[۴][۴]); int cost[۴][۴]; int p[۴][۴]; int a[۴][۴]; int n=۴; main() { int i,j; for(i=۰;i
گرافهای کاربردی
کاربردها
از گرافها برای حل مسایل زیادی در ریاضیات و علوم کامپیوتر استفاده میشود. ساختارهای زیادی را میتوان به کمک گرافها به نمایش در آورد. برای مثال برای نمایش چگونگی رابطه وب سایتها به یکدیگر میتوان از گراف جهت دار استفاده کرد. به این صورت که هر وب سایت را به یک راس در گراف تبدیل میکنیم و در صورتیکه در این وب سایت لینکی به وب سایت دیگری بود، یک یال جهت دار از این راس به راسی که وب سایت دیگر را نمایش میدهد وصل میکنیم.
از گرافها همچنین در شبکهها، طراحی مدارهای الکتریکی، اصلاح هندسی خیابانها برای حل مشکل ترافیک، و.... استفاده میشود. مهمترین کاربرد گراف مدلسازی پدیدههای گوناگون و بررسی بر روی آنهاست. با گراف میتوان به راحتی یک نقشه بسیار بزرگ یا شبکهای عظیم را در درون یک ماتریس به نام ماتریس وقوع گراف ذخیره کرد و یا الگوریتمهای مناسب مانند الگوریتم دایسترا یا الگوریتم کروسکال و ... را بر روی آن اعمال نمود. در این جا به بررسی گرافهایی میپردازد که میتوان آنها را به نحوی روی صفحه کشید که یالها جز در محل راسها یکدیگر را قطع نکنند. این نوع گراف در ساخت جادهها و حل مساله کلاسیک و قدیمی سه خانه و سه چاه آب به کار میرود.
کاربرد گراف بازهها از گرافها برای حل مسایل زیادی در ریاضیات و علوم کامپیوتر استفاده میشود. ساختارهای زیادی را میتوان به کمک گرافها به نمایش در آورد.
درخت و ماتریس درخت در رشتههای مختلفی مانند شیمی مهندسی برق و علم محاسبه کاربرد دارد . کیرشهف در سال ۱۸۴۷ میلادی هنگام حل دستگاههای معادلات خطی مربوط به شبکههای الکتریکی درختها را کشف و نظریه درختها را بارور کرد. کیلی در سال ۱۸۵۷ میلادی درختها را در ارتباط با شمارش ایزومرهای مختلف هیدروکربنها کشف کرد وقتی مثلا میگوییم در ایزومر مختلف c4h۱۰ وجود دارد منظورمان این است که دو درخت متفاوت با ۱۴ راس وجود دارند که درجه ۴ راس از این ۱۴ راس جهار و درجه هر یک از ۱۰ راس باقیمانده یک است. اگر هزینه کشیدن مثلا راه آهن بین هر دو شهر ازp شهر مفروض مشخص باشد ارزانترین شبکه ای که این p شهر را به هم وصل میکند با مفهوم یک درخت از مرتبه p ارتباط نزدیک دارد. به جای مساله مربوط به راه آهن میتوان وضعیت مربوط به شبکههای برق رسانی و لوله کشی نفت و لوکشی گاز و ایجاد کانالهای آبرسانی را در نظر گرفت . برای تعیین یک شبکه با نازلترین هزینه از قاعده ای به نام الگوریتم صرفه جویی استفاده میشود که کاربردهای فراوان دارد. از گرافها می توان به عنوان کدهای کمکی نام برد که به DVB Playerها در بالا بردن قابلیتهای آنها کمک میکنند. گرافها دارایی مزایای مختلفی هستند که شفاف تر کردن و واضحتر کردن تصویر و کاهش مصرف CPU به عنوان یکی از اصلیترین مزایای آنها بشمار می رود.
مطالعهٔ بیشتر
| در ویکیانبار منابعی در رابطه با نظریه گراف موجود است. |
- کتاب آشنایی با نظریهٔ گراف نوشتهٔ علیرضا علیپور، انتشارات فاطمی
- کتاب مقدمهای بر نظریه گراف نوشته دووگلاس بی وست انتشارات گسترش علوم پایه
- کتاب نظریه گرافها و کاربردهای آن نوشته باندی و مورتی، ترجمه حمید ضرابی زاده، موسسه دیباگران تهران
- کتاب ریاضیات گسسته نوشته ر.پ.گریمالدی، مرکز نشر دانشگاهی
پانویس
- ↑ گراف واژهٔ مصوب فرهنگستان زبان و ادب پارسی به جای graph در انگلیسی و در حوزهٔ ریاضیات است. فرهنگ واژههای مصوّب فرهنگستان: ۱۳۷۶ تا ۱۳۸۵، بخش دوم: به ترتیب الفبای لاتینی، صفحهٔ ۱۰۲ (فارسی). وبگاه رسمی فرهنگستان. بازدید در تاریخ ۶ مرداد ۱۳۸۹.
- ↑ کتاب ریاضیات گسسته پیش دانشگاهی رشته ریاضی فصل اول

