Upload
brooke-stafford
View
55
Download
6
Tags:
Embed Size (px)
DESCRIPTION
المخططات والشبكات Graphs & Networks لمقرر تركيب البيانات وتصميم الخوارزميات 1289. اعداد د. محمد ذويـب. أهداف المادة العلمية. تعريف مفهوم المخططات والشبكات وتميز بينهما. تمثل المخططات والشبكات بطرق مختلفة. تستطيع استخدام خوارزمية Dijkstra لإيجاد اقصر ممر بين زوجين من العناصر. - PowerPoint PPT Presentation
Citation preview
المخططات والشبكات
Graphs & Networks
لمقرر تركيب البيانات وتصميم 1289الخوارزميات اعداد
د. محمد ذويـب
تعريف مفهوم المخططات 1.والشبكات وتميز بينهما.
تمثل المخططات والشبكات بطرق 2.مختلفة.
تستطيع استخدام خوارزمية 3.Dijkstra إليجاد
اقصر ممر بين زوجين من العناصر. Floyedتستطيع استخدام خوارزمية 4.
إليجاداقصرممر بين زوجين من العناصر.
أهداف المادة العلمية
الشبكـاتNETWORK
المخططـات GRAPHSKS
هي تراكيب بيانات تشبه الهياكل الشجرية
في التمثيل الرياضي حيث تمثل الهياكل الشجرية نوع من أنواع
المخططات
(Graphs)اوال:المخططات
تعريف المخططات
أما في برمجة الحاسوب فان المخطـطات
تستعمل بطريقة تختلف عن الهياكل الشجرية
وما يميزهاقلة القيود عليها
مقارنة بالهياكل الشجريةومن الممكن للعناصر
أن تؤشر الى بعضها
ليس هناك عالقة أبوة وأبناء في المخططات
فالمخططات في اغلب األحيان لها شكل موحد
لتمثيل مشكلة طبيعية فمثال يمكن ان تمثل مجموعة الرؤوس
في المخطط المدن بينما الحواف الطريق الواصلة يمكن ان تمثل
بين هذه المدن
بمعنى آخر
فان المخطط ال يعكس المواقع الجغرافيةبل يعكس واقع العالقات بين المواقع
والممثلة (Vertices)في القمـم
(Edges)والطرق الواصلة بينها
ويمكن أن تمثل الحواف في بعض االحيان على شكل
أقواس باإلضافة الى الخطوط المستقيمة
وعلى اي حـال
تتكون المخططات من جزئيين : رئيسين هما
( Element)العناصر مجموعة من 1.
وتسمى الرؤوس (Node)او العقد V
(Vertices)
)E )edgeمجموعة الحواف 2.
وبناء عليه فان المخطط يشار اليه كما يلي:
G=)V,E(
.1
انـواع المخططات
Graphs Type
المخططات الغير متجهة (UNDIRECTED GRAPHS)
المخططات المتجهة (DIGRAPH )
يوجد نوعان رئيسيان من المخططات هي:
متجهةالمخططات الغير (UNDIRECTED GRAPHS )
يكون المخطط غير متجه عندما تكون كل حافة تصل بين زوج
من القمم الغير مرتبة
:اوال
وكذلك إذا لم تحدد الحواف التي تربط بين رؤوس المخطط باتجاه معين
(v1,v2)تكون القمة
(v2,v1) مكافئة للقمة
وفي هذه الحالة:
v2
v3 v5
v4
v1
المخططات المتجهة(DIGRAPHS )
المخطط يسمى متجه إذا كانت كل حافةفي المخطط تربط بين زوج
مرتب من القمم ويكون هناك على األقل ممرواحد
من كل قمةالى قمةأخرى ومحددا بسهم يشير الى تلك القمة
ثانيا:
v1 v2
v3 v4 v5
v6 v7
تمثيل المخططاتRepresentation of Graphs
Linked)القوائم المتصلة 1.Representation)
Adjacency)مصفوفة الجوار 2.Matrices)
هناك عدة طرق لتمثيل المخططات منها:
Linked) المتصلةالقوائم
Representation)تعتبر من ابسط الطرق إستخدامافإستعراض المخطط يتضمن زيارة كل قمة في المخطط مرة واحدة
فالخوارزميات التي تطبق فقط في الهياكل الشجرية ال يمكن أن
تطبق هنا الن المخطط قد يحتوي على دوران
: اوال
لذلك خوارزمية االستعراض الشجري من الممكن أن تؤدي الى تكرار ال
نهائي
لمنع ذلك من الحدوث كل رأس تمت زيارته يمكن أن
يسجل لتجنب زيارته مرة أخرى
مع ذلك من الممكن أن تحتوي المخططات
(متصلة غير)على قمم معزولةمما يعني أن بعض أجزاءالمخطط
من الممكن أن تحذف إذا تم تطبيق منهج
االستعراض الشجري
:مثـال
1
2 4
3
مثل المخطط التالي باستخدام مؤشرات الربط
الحـل:
قائمة العناصر1.
قائمة الحـواف2.
يتم تمثيل المخطط كي يشمل قائمتين:
2
1
1
1
NULL
NULL
NULL
NULL
قائمةقائمــة الحوافالعناصر
3
3
2
2
4
4
4
3
1
2
3
4
( Adjacency Matrices) مصفوفة الجوار
هي عبارة عن مصفوفة ثنائية األبعاد التي تحددجميع القمم المجاورة
لكل قمة في المخططهي مصفوفة )A)aijفمصفوفة الجوار
من الحجم n x n حيث يوضع في الموقعaij
قيمة الوزن
: ثانيا
aij := 1 if there is an edge from i to j 0 if there is no edge
اذا كان هناك حافة j الى القمة iمن القمة
اذا لم يكن هناك حافة 0ويوضع تربط بين الرأسين
وبشكل عام العالقة التالية تمثل
:مصفوفة الجوار
مثـال :
مثل الشكل التالي باستخدام مصفوفة الجوار
v1
v7v6
v4 v5v3
v2
يمكن تمثيل المخطط السابق :بمصفوفة الجوار التالية
:الحـل
نالحظ ان مصفوفة الجوار تحتوي دائما
1 و 0 على العنصرين
ولهذا السبب ¡ة يطلق عليها المصفوفة البولي
حساب الحواف الداخلة والخارجة من كل قمـة
في المخطط باستخدام مصفوفة الجوار
كدليل nنستعمل رقم العنصر للعمود
في مصفوفة الجوار ونحسب عدد مرات تكرار
في مصفوفة الجوار1الرقم
لحساب عدد الحواف الداخلة:
كدليل nحيث نستخدم رقم العقدة الصف
في مصفوفة الجوار ونحسب عدد مرات حصول
في ذلك الصف ويمثـل 1 الرقم عدد مرات
عدد الحواف 1 حصول الرقم الخارجة من كل
عقدة في المخطط.
وبنفس الطريقة لحساب الحواف الخارجة:
لحساب الحواف الداخلة والخارجة من والى كل
عنصر في المخطط باستخدام تمثيل مصفوفة
الجوار نكتب الدوال التالية:
: مثـال
buildadjm)intadj[][MAX], int n(
void buildadjm)int adj[][MAX], int n({ int i,j; for)i=0;i<n;i++( for)j=0;j<n;j++(
{ cout<<"Enter 1 if there is an edge from "<< i <<" “
<< "to" <<" "<< j <<" otherwise enter 0 "<<endl;
cin>>adj[i][j]; } }
:حل المثال
ثم نبني الدالةindegree
حيث تحسب عدد مرات ظهور 1الرقم
في كل عمود في مصفوفة الجوار باستخدام
رقم العقدة التي سيتم حساب الحـواف الداخلة لها والذي يمثل
دليل المصفوفة
Int indegree )intadj[][MAX],intx,int n(
{ int i, count =0; for)i=0;i<n;i++(
if) adj[i][x] ==1( count++;
return)count(; }
وهي كالتالي:
ثم نبني الدالةoutdegree
حيث تحسب عدد مرات ظهورفي كل صف من مصفوفة 1 الرقم
الجوار باستعمال رقم العقدة (الرأس)
لها عدد الحواف التي ستحسب
حل المثال :
int outdegree)int adj[][MAX],int x,int n(
{ int i, count =0; for)i=0;i<n;i++( if) adj[x][i] ==1( count++; return)count(; }
:وهي كالتالي
void main)( { int adj[MAX][MAX], n, i; cout<<"Enter the number of nodes in
graph maximum = “ <<MAX<<endl;
cin>>n;
حل المثال:
البرنامج الرئيسي وهنا يكونكالتالي :
buildadjm)adj,n(;
for)i=0;i<n;i++({ cout<<"The indegree
of the node "<<i<<" is” <<indegree)adj,i,n(<<endl;
cout<<"The outdegree of the
node“<<i<<"is”<<outdegree)adj,i,n(<< endl; } }
شرح البرنامج:
يقوم هذا البرنامج أوال ببناء 1.مصفوفة الجوار
من خالل مناداة بعد buildadjmالدالة
ذلك يدخل في حلقة التكرار الداخلة والخارجة لحسـاب الحواف
لكل عقدة في المخطط مناداة الدوال........... من خالل
indegreeوoutdegree.على التوالي
تحسب عدد indegreeالدالة2.مرات
في كل عمود 1 ظهور الرقم في مصفوفة
الجوار بإستخدام رقم العقدة الـتي
سيتم حساب الحواف الداخلة لها والذي
يمثل دليل المصفوفة.
تحسب عددoutdegreeالدالة3.في 1 مرات ظهور الرقم
كل صف من مصفوفة الجوار
بإستعمال رقم العقدة التي ستحسب لها
عدد الحواف.
لشبكاتا NETWORKS
تعرف الشبكة على انها مخطط يتكون من نقطة Diagramهندسي
متصالت فيما F ونقطة نهاية A بدايةبينهما بمجموعة متتابعة من العقد
Nods Edges متصلة معا بعدد من الحواف
ثانيا:
كل حافة تصل بين نقطتين او )( اكثر
ولكل حافة من حوافه قيمة عددية موجبة
تمثل وزن تلك الحافة
طرق ايجاد اقصر الممرات
SHORTEST PATH
ان ايجاد اقصر الممرات في المخطط الشبكي
يعتمد على وجود ممر بين كل قيمتين في المخطط بحيث يكون مجموع اوزان الحواف هو االقل
:فمثالإليجاد الطريق األسرع للوصول من
موقع الى آخر في مخطط الطرق
بين اقصر الممرات نعمل على ايجاد هذه المواقع
من خالل فحص جميع الطرق المؤدية الى الموقع المطلوب
بداية من نقطة االنطالق ونهــاية الى الوجهة المقصودة
ستخدم إليجاد اقصر الممرات نوطريقتيناحدى ال :
االولى :الطريقة 1.باستخدام خوارزمية
(Dijkstra) ديجكسترا
:ةالثانيالطريقة 2.)باستخدام خوارزمية فلويد
Floyd)
االولى :الطريقة •
باستخدام خوارزمية ديجكسترا Dijkstra هناك العديد من الخوارزميات
إليجاد المسافة من قمة الى اخرى في المخطط
حيث تقوم Dijkstraمنها خوارزمية هذه الخوارزمية على تحديد المسافة
من قمة محددة وجميع القمم االخرى في المخطط
من قمة Dijkstraتبدأ خوارزمية معينة
في ( source) تسمى نقطة المصدرالمخطط الشبكي وتمتد حتى تصل
الى جميع القمم االخرى في المخطط وتقوم على تخزين
المسافة الكلية من القمة المصدرية
الى القمة المراد الوصول اليها
وللتوضيح اكثر
على تخزين Dijkstraتعمل خوارزمية مجموع اقل تكلفة للحواف من
نقطة البداية الى نقطة النهاية ومن الجدير بالذكر
ان كفاءة هذه الخوارزمية هو O)n2(
مصفوفة تكلفة الجوار(Adjacency Matrix Cost)
مصفوفة الطول ( Distance Matrix)
مصفوفة التخزين(Path Matrix )
مصفوفة العناصر(Include Matrix)
تحتاج هذه الخوارزمية الى اربع مصفوفات وهي :
المصفوفة األولى:
مصفوفة تكلفة الجوار (Adjacency Matrix Cost )
في الشكل التاليةل الشبكــ يظهر شك
DC
A B
الشكل السابق تمثيل يمكن باستخدام مصفوفة
كما يلي: الجوار A B C D
A 0 A TO B A TO C A TO D
B 0 0 B TO C B TO D
C 0 0 0 C TO D
D 0 0 D TO C 0
+C المصفوفة بلغة ويتم االعالن عن
:كالتالي + int COST[N][N] ;
المصفوفة الثانية: مصفوفة الطول
(Distance Matrix )
لتخزين طول اقصر الطرق من نقطه االنطالق
وذلك في الموقع Jالى النقطه [ DISTANCE[J
+C المصفوفة بلغة ويتم االعالن عن
:كالتالي + int DISTANCE[N][N];
المصفوفة الثالثة:مصفوفة التخزين (Path Matrix)
مر بها في تلتخزين العناصر التي اقصر الممرات
ةيحتوي على النقط path[ j ]حيث ان في اقصر j ة المباشره لنقطةالسابق
الممرات+C المصفوفة بلغة ويتم االعالن عن
:كالتالي + int PATH[N];
المصفوفة الرابعة:مصفوفة العناصر
(Include Matrix)
ه منطقيه¡وهي مصفوفة بولي تحتوي على العناصر المشمولة ،
(االنطالق) االصل ةبما في ذلك نقطالممرات لغاية هذه ضمن اقصر
االلحظه من تطبيق الخوارزمية بدءمن نقطة االنطالق
ففي حالة شمول أي من النقاط قبل j
Includedضمن اقصر الممرات
True تساوي
+C المصفوفة بلغة ويتم االعالن عن
:كالتالي + bool INCLUDE[N];
وصف خوارزمية ديجكسترا إليجاد ; Const int N=50 اقصر الممرات
Typedef bool Boolean Type [N] ;Int cost [N][N] ;Int DISTANCE [N] ;Int PATH [N] ;Bool INCLUDE [N] ;Void SHORTPATH ) int SOURCE (;Boolean Type Included;Int I , j ; ReadMat )(;
Initialize ) SOURCE ( ;Do { FINDMIN )J( ; INCLUDE[J] = true ; For )i=0;i<N ;i++( If ) ! INCLUDED[J] ( UPDATE ) I,
J ( ; PRINT )( ; } While ALL) Included ( ; PrintPath )( ; }
الدوال المستخدمه في خوارزمية ديجكسترا
: ReadMAT الداله1.حيث يتم عن طريق هذه الداله قراءة مصفوفة اوزان الجوار
اوال:أي من والى ( Vi ,Vi) اذا كانت الحافه
.ةالنقطثانيا:
. ة اذا لم توجد حاف
اوال:أي من والى ( Vi ,Vi) اذا كانت الحافه
.ةالنقطثانيا:
. ة اذا لم توجد حاف
وعند ادخال مثل هذه القيم يجب ادخال القيمه
في حالتين هما : 0
: Initialize دالة2.
تحديد القيم ةحيث يتم في هذه الدالاالبتدائية
INCLUDE [ SOURCE] تحدد في البداية لكلtrue INCLUDE [i] على انها تساوي
false النقاط المتبقية تساوي
:FINDMIN الداله 3.داله تعيد اقصر الممرات من وهي
نقطة البداية J الى النقطه
ضمن اقصر Jوبذلك تصبح النقطه الممرات
Included [j]حيث يتم تعديل قيمة
trueلتصبح مساوية للقيمة
ولتحديد ذلك يتم فحص ابعاد جميع الممرات
jمن نقطة البداية الى نقطة وفةـوهذه االبعاد تخزن في المصف
Distance Matrix
:UPDATE الداله 4. Distance تستخدم لتعديل المصفوفة
Matrix في حالة ايجاد Path Matrixوالمصفوفة
نقطة مثلi حيث ان (INCLUDE [i]= false)
تعطي ممر طوله اقصر الممرات الموجودة
قبل اعتبار هذه النقطه
وفي هذه الحاله تضاف هذه النقطه الى النقاط
المشمولة في اقصر الممرات
: ALLالداله 5. و تستخدم كداله منطقيه
عندما تصبح قيم trueو تعيد القيمه جميع
Include Matrix المواقع في المصفوفة trueتساوي
خالف false وتعيد هذه الداله القيمه ذلك
: SHORT PATHالداله 6. وتستخدم كداله يتم من داخلها
استدعاء الدوال السابقه باالضافه الى دالة الطباعه التي
تقوم بطباعةالنتائج وأي معلومات اخرى نرغب
فيها وفي نهاية هذه الداله يتم طباعة اقصر الممرات وتكلفة هذا
الممر
: PRINTدالة الطباعه 7. تستخدم هذه الدالهاتــ لطباعة قيم المصفوف
DISTANSE , INCLUDE , PATH
بعد كل خطوه من خطوات الخوارزميه
: PRINTPATH الداله 8. يستخدم هذا االجراء
لطباعة اقصر الممرات بين نقطة المصدر
ونقطة الوجهه المقصوده
إليجاد اقصر الممرات بين نقطتينباستخدام خوارزمية ديجكسترا
باستخدام مصفوفة تكلفة الجوار الموضحه
التاليفي الشكل نجد اقصر الممراتوف س
3الى النقطه1 من النقطه
1 2 3 4 5
1 0 800 2985 310 200
2 800 0 410 612 0
3 2985 410 0 1421 0
4 310 612 1421 0 400
5 200 0 0 400 0
: توضيحات
اذا لم تكن هناك حافة من النقطه(أ)فان قيمة الموقع ( ب)الى النقطه
تساوي بوالعمود أفي الصف ما النهاية .
عند بدء البرنامج فان الدالهInitialize
تعمل على تحويل االصفار الناتجة عن عدم
وجود حواف بين النقاط في المخطط الى اكبر
++Cقيمه صحيحة ممكنه في لغة
ويرمز الىوهو MAXINTبالرمز هذه القيمه
يساوي 32767.
حل المثال :
تبدأ خوارزمية ديجكسترا بقراءة قيم مصفوفة
الجوار ، ويتم تخزين تلك القيم في فعلى سبيل المثالcostالمصفوفة
وهذا 410 ةالقيم cost [2,3] تساوي يعني
ان وزن الحافه التي تصل بين النقطتين
410 هو 3 و 2
بعد ذلك يتم استدعاء االجراء
initialize والذي يحدد القيم االبتدائية
للمصفوفاتDistance و Path و Included
كما يلي
اوال: كما DISTANCE محتويات المصفوفة
يلي :
من نقطة البداية وهي 1بعد النقطه النقطه نفسها
يساوي صفر DISTANCE [ 1 ]أي
من نقطة البداية 2بعد النقطه 800يساوي DISTANCE [ 2 ]أي
من نقطة البداية3بعد النقطه 2985 يساوي DISTANCE [ 3 ]أي
من نقطة البداية 4بعد النقطه 310 يساوي DISTANCE [ 4 ]أي
من نقطة البداية 5بعد النقطه 200 يساوي DISTANCE [ 5 ]أي
وبذلك : كما يلي :DISTANCEتكون المصفوفة
Distance : 0 800 2985 310 200
: ثانياPATHمحتويات المصفوفة
فهي قيمة نقطة البداية في حال نقطة وجود حافة او ممرمن
البداية الى النقاط االخرى . PATHولهذا تكون محتويات المصفوفة
(أي نقطة البداية)1مساوية للقيمة
حيث تساوي قيمته PATH[1]باستثناء صفرا .
Path: 0 1 1 1 1
:ثالثاINCLUDEمحتويات المصفوفة
falseفان قيم جميع عناصرها تساوي
INCLUDE [ 1 ]باستثناء قيمة العنصر
تمثل نقطة 1حيث ان القيمه البدايةوالتي
وهذا يعني ان النقطه true تساوي 1
ان تشمل في اقصر ينبغيالممرات .
وبذلك نحصل على القيم االبتدائية للمصفوفات
DISTANCE وINCLUDE و PATH
كما يلي :النقطه 1 2 3 4 5Distance 0 800 2985 310 200
Path 0 1 1 1 1Include true false false false false
وفي المرحلة التالية من تنفيذ الخوارزمية
يتم تعديل محتويات المصفوفات الثالث
بحيث تعكس تلك التعديالت ابعاد اقصر الممرات
من نقطة البداية كما تبين هذه التعديالت النقاط
التي تم اخذها بعين االعتبار والنقاط المشمولة
في اقصر الممرات
لذلك يتم في الخطوة الثانيه من
الخوارزميه إجراء التعديالت التالية من النقطه 5فبما ان بعد النقطه على المصفوفات الثالث
هو االقل من ابعاد النقاط االخرى 1 ينبغي ان تكون ضمن5فان النقطه
اقصر الممرات
مساوية INCLUDE [5]وبذلك تصبح للقيمة
true بوصفها النقطه 1 وتبقى النقطه التي يمكن المرور بها حتى هذه
اللحظه من الخوارزميه
وتبقى انطالقا من نقطة البداية مباشرة الى النقاط (1وهي النقطه)
االخرى كما تبقى محتويات كما هي PATHالمصفوفة
وعليه تكون محتويات المصفوفة الثالث بالنسبة
كما يلي :5 الى النقطة
النقطه 1 2 3 4 5Distance 200 1000 1821 400 0
Path 5 1 4 5 0Include true false false true true
نأخذ الطريق الغير مباشر من من خالل 3 الى النقطة 5النقطة 2النقطة
النقطه 1 2 3 4 5Distance 200 1000 1410 400 0
Path 5 1 2 5 0Include true true false true true
فتصبح كما يلي:
النقطه 1 2 3 4 5Distance 200 1000 1410 400 0
Path 5 1 2 5 0Include true true true true true
التوضيح :
لتوضيح معنى 2 لو أخذنا النقطه القيم الموجودة
في المصفوفات الثالث
نالحظ ان محتويات الموقع الثاني , false , 1)في المصفوفات الثالث هي
وهذا يعني ان طول اقصر (800 2 الى النقطه 1الممرات من النقطه
800حتى هذه اللحظه هو
ان النقطه التي 1كما تعني القيمه 2تم استخدامها للوصول الى النقطه
1هي النقطه
لم 2 ان النقطه falseوتعني القيمه
تؤخذ بعين االعتبار لتحديد اقصر الممرات
حتى هذه اللحظه
الخطوه التاليه 3يمكن الوصول الى النقطه
مباشرة وتكلفة هذا 1 إما من النقطه2985 الممر
وتكلفة هذا 2او عن طريق النقطه 800 الممر
او عن طريق النقطه1من النقطه 4
وتكلفة الوصول في هذه الحاله 310هي
800 اصغر من 310وبما ان
ضمن اقصر 4لذلك شمول النقطه الممرات
وعليه تصبح قيمة DISTANCE [ 3]
تساوي ( 310+1421 = 1731 )
PATH [ 4 ]كما تصبح محتويات = 1
3 أي ان الوصول الى النقطه 4عن طريق النقطه
أي ان PATH [ 4] = 1 وبما ان 4الوصول الى
(نقطة البداية ) 1عن طريق النقطه
4وبما انه وتم اختيار النقطة 3للوصول الى النقطه
وتصبح محتويات العنصر الرابع للمصفوفة
INCLUDE
مساوية للقيمة true
أي ان محتويات المصفوفات الثالث كما يلي
النقطه 1 2 3 4 5
Distance 0 800 1731 310 200
Path 0 1 4 1 1
Include true false false true true
وبما ان بعض قيم المصفوفة INCLUDE
غير مأخوذة بعين االعتبار (falseوهو ما تشير اليه القيمه )
سوف يستمر تنفيذ الخوارزميه حتى تصبح جميع فيم عناصر تلك
المصفوفة trueمساوية للقيمة
¿ في الخطوه التاليه من إذاالخوارزميه
2 الى 1سنالحظ أن طول الممر من 3الى
1اصغر من طول الممر من النقطه 4الى
ونتيجة لذلك يصبح طول المسافة = 410+800يساوي 3 الى 1 من
1210
وهو اقل من الطول السابق للممر 3 ثم الى 4 الى 1من
ولذلك يتم إجراء التعديالت الالزمة على المصفوفات عن طريق اإلجراء
UPDATE
ومن ضمن تلك التعديالت
في هذه الخطوه
الى 4من PATH [3]تعديل يغير قيمه
2
الى 1731من DISTANCE[3] وتعديل
1210
INCLUDE [2]وتعديل قيمة
true الى falseمن
قد اخذت 2مما يعني ان النقطه
بعين االعتبار
وعليه تصبح محتويات المصفوفات
الثالث
النقطه 1 2 3 4 5
Distance 0 800 1210 310 200
Path 0 1 2 1 1
Include true true true false true
ومن المصفوفة األخيرة نجد أقصر الممرات
أي ) 3وذلك بالنظر الى النقطه (نقطة النهاية
PATH [ 3 ] =2حيث نالحظ ان
2 تم من 3أي ان الوصول الى
2 اما عن كيفية الوصول الى
PATH ألن 1فمن الواضح انه تم عبر
[ 2 ] = 1
هي نقطة البداية فان 1وبما أن اقصر الممرات
3 الى 2 الى 1 هو ولمعرفة طـول هذا الممر
DISTANCE نستخدم المصفوفة
القيمه DISTANCE [ 3 ]فتعطينا (1210)
وهي طول الممر
النقطه 1 2 3 4 5
Distance 0 800 1210 310 200
Path 0 1 2 1 1
Include true true true true true
لتوضيح المثالنقوم برسم المخطط لمصفوفة
تكلفة الجوار
1 2
4 5
2985
410800
400
1421
310612
200
3
1210= 410+800 3 2 1
2985= 3 1
3233= 1421+612+800 3 4 2 1
1731= 1421+310 3 4 1
2021= 1421+400+200 3 4 5 1
1622= 410+612+400+200 3 2 4 5 1
1332= 410+612+310 3 2 4 1
ثانيا : 1نقوم بحساب اقصر المرات بين النقطه
االحتماالت :3و النقطه
لتوضيح المثال
وبعد حساب اوزان جميع االحتماالت يتضح ان 3 و النقطة 1 بين النقطة
الممر الى 2 الى النقطة 1 من النقطة
3النقطة هو أقصر الممرات مقارنة مع نتائج
باقي الممرات وهي نفس النتيجة في حل المثال
بالطريقتين1 2 3 = 800 + 410 = 1210
الطريقة الثانية :
تعد خوارزمية فلويد تعديال على حيث تقوم هذه Dijkstraخوارزمية
الخوارزمية على حساب مصفوفة اقصر الممرات بين نقطتين
مختلفتين في المخطط الشبكي
Floyd خوارزمية فلويد
من خالل مقارنة جميع قيم العمود األول
والصف االولفي مصفوفة المسافة ومقارنة
مجموع القيم المؤشر عليها مع بقية القيم االخرى
في نفس الصف والعمود في المصفوفة
اذا كان المجموع اقل من القيمة
المؤشر عليها نغير القيمة بقيمة المجموع المقابل لها في نفس الصف والعمود كفاءة
)O)n3هذه الخوارزمية هو
تحتاج هذه الخوارزمية الى ثالث
مصفوفات وهي :
مصفوفة تكلفة الجوار(Adjacency Matrix
Cost)
تم شرحها سابقا.
مصفوفة التخزين(Path Matrix)
على القيم ةتحتوي هذه المصفوف الممر العدديه لتكلفة
بأقصر الممرات ما بين ةوالمشمولنقطتين
I وJ ويشار الى ذلك بPATH [I][J]
مصفوفةP في بداية ةيتم تهيئة المصفوف
الخوارزمية كما يلي مساوية للصفر COST [I][J]اذا لم تكن COST[I][J]=P[I][J]و
( أي عناصر القطر ) J=Iاذا كانت صفرتساوي
او ما ال MAXINTخرى أوفي الحاالت النهاية
ونجد من الخوارزمية وباألخص من الدوره الداخليه
نحصل على:Kانه بعد الدوره
P[I][J] = MINIMUM)P[I][K]+P[K][J],P[I][J] (
وهذا بدوره يضمن لنا اقصر الممرات J الى النقطه Iمن النقطه
دون المرور خالل أي نقطه رقمها اكبر على فرض Jمن
N-1ان نقاط المخطط مرقمه الى
أوجد مصفوفة أقصر الممرات للمخطط المبين في الشكل
Floyd خوارزمية فلويدباستخدام
مثـال
أوال نجد مصفوفة تكلفة الجوار
المسافة المباشرة بين القمةالواحدة والقمم االخرى.
تدل على عدم وجود أي ∞إشارة طريق مباشر.
بما أن عدد نقاط المخطط يساوي5 (A,B,C,D,E)
الحـل
A B C D E
A ∞ 23 10 ∞ 18
B 23
∞ 10 48 ∞
C 10
10 ∞ 19 7
D ∞ 48 19 ∞ 20
E 18
∞ 7 20 ∞
مصفوفات 5نحصل على ((P1, P2, P3, P4, P5
P1النتيجة للمصفوفة
نؤشر الى العمود االول والصفاالول ونقارن
بين القيم االخرى مع مجموع القيم المؤشر
عليها في نفس الصف والعمود.
اذا كان المجموع اقل من القيمةيجب ان نغير
القيمة بقيمة المجموع.
A B C D E
A ∞ 23 10 ∞ 18
B 23 ∞ 10 48 ∞
C 10 10 ∞ 19 7
D ∞ 48 19 ∞ 20
E 18 ∞ 7 20 ∞
يتم حساب القيم وتعديلها كاألتي:
B+B=23+23=46 is > ∞
∞من الواضح ان القيمة اصغر من Aاذن نغيرها كاألتي B C D E
A ∞ 23 10 ∞ 18
B 23 46 10 48 ∞
C 10 10 ∞ 19 7
D ∞ 48 19 ∞ 20
E 18 ∞ 7 20 ∞
نأخذ القيمة التي تليها ونقارنهاC+B=10+23=33 is > 10
ما دام المجموع ليس اقل من Aالقيمة اذن نتركهاكماهي B C D E
A ∞ 23 10 ∞ 18
B 23 46 10 48 ∞
C 10 10 ∞ 19 7
D ∞ 48 19 ∞ 20
E 18 ∞ 7 20 ∞
P1النتيجة النهائية للمصفوفة
مالحظة اذا كانت احدى القيم التي نريد
نترك القيمة ∞جمعها ومقارنتها كما هي
D+B= ∞+23
اذن ال يجوز
A B C D E
A ∞ 23 10 ∞ 18
B 23 46 10 48 41
C 10 10 20 19 7
D ∞ 48 19 ∞ 20
E 18 41 7 20 36
وهكذا مع بقية القيم الى ان ننتهي من مقارنة
جميع القيم بمجموع العمود االول والصف االول لتكون النتيجة كاآلتي
A B C D E
A ∞ 23 10 ∞ 18
B 23 46 10 48 41
C 10 10 20 19 7
D ∞ 48 19 ∞ 20
E 18 41 7 20 36
P2النتيجة للمصفوفة
االن نأخذ التكرار التالي وننفذ الخطوات
كما في الخطوات السابقة
P2النتيجة النهائية للمصفوفة
جميع القيم عدلت كما في المصفوفة التالية اآلتي
A B C D E
A 46 23 10 71 18
B 23 46 10 48 41
C 10 10 20 19 7
D 71 48 19 96 20
E 18 41 7 20 36
P3النتيجة للمصفوفة
التكرار التالي
A B C D E
A 46 23 10 71 18
B 23 46 10 48 41
C 10 10 20 19 7
D 71 48 19 96 20
E 18 41 7 20 36
P3النتيجة النهائية للمصفوفة
التكرار المناسب سيكون بتغيير البنود التالية
A B C D E
A 20 20 10 29 17
B 20 20 10 29 17
C 10 10 20 19 7
D 29 29 19 38 20
E 17 17 7 20 14
P4النتيجة النهائية للمصفوفة
A B C D E
A 20
20 10 29 17
B 20
20 10 29 17
C 10
10 20 19 7
D 29
29 19 38 20
E 17
17 7 20 14
التكرار التالي:في هذا التكرار ال نحتاج الى تغيير
أي بند من البنود لذلك نذهب الى التكرار الذي يليه
P5النتيجة النهائية للمصفوفة
A B C D E
A 20 20 10 29 17
B 20 20 10 29 17
C 10 10 14 19 7
D 29 29 19 38 20
E 17 17 7 20 14
في هذه الحالة هناك مادة وحيدة نحتاج كاآلتي الى تغييرها
المصفوفة النهائية
تكون مصفوفة أقصر الممرات P5اذن على شكلهاالتالي
A B C D E
A 20 20 10 29 17
B 20 20 10 29 17
C 10 10 14 19 7
D 29 29 19 38 20
E 17 17 7 20 14
المصفوفة النهائية
يمكن استخدام المصفوفة االخيرة من اجل اعادة
رسم الشبكة االصلية فتصبح كما يلي