المخططات والشبكات
Download
Report
Transcript المخططات والشبكات
املخططات والشبكات
Graphs & Networks
ملقرر تركيب البيانات وتصميم الخوارزميات
1289
اعداد
د .محمد ذويـب
أهداف املادة العلمية
.1تعريف مفهوم املخططات والشبكات وتميز بينهما.
.2تمثل املخططات والشبكات بطرق مختلفة.
.3تستطيع استخدام خوارزمية Dijkstraإليجاد
اقصر ممر بين زوجين من العناصر.
.4تستطيع استخدام خوارزمية Floyedإليجاد
اقصرممر بين زوجين من العناصر.
املخططـات
GRAPHSKS
الشبكـات
NETWORK
اوال:املخططات ()Graphs
تعريف املخططات
هي تراكيب بيانات تشبه الهياكل الشجرية
في التمثيل الرياض ي
حيث تمثل الهياكل الشجرية نوع من أنواع
املخططات
أما في برمجة الحاسوب فان املخطـطات تستعمل
بطريقة تختلف عن الهياكل الشجرية
وما يميزها
قلة القيود عليها
مقارنة بالهياكل الشجريةومن املمكن للعناصر
أن تؤشر الى بعضها
بمعنى آخر
ليس هناك عالقة أبوة وأبناء في املخططات
فاملخططات في اغلب األحيان لها شكل موحد
لتمثيل مشكلة طبيعية
فمثال يمكن ان تمثل مجموعة الرؤوس في املخطط
املدن بينما الحواف يمكن ان تمثل الطريق الواصلة
بين هذه املدن
وعلى اي حـال
فان املخطط ال يعكس املواقع الجغرافية
بل يعكس واقع العالقات بين املواقع واملمثلة
في القمـم ()Vertices
والطرق الواصلة بينها ()Edges
ويمكن أن تمثل الحواف في بعض االحيان على شكل
أقواس باإلضافة الى الخطوط املستقيمة
تتكون املخططات من جزئيين رئيسين هما :
.1مجموعة من العناصر ()Element
او العقد ( )Nodeوتسمى الرؤوس V
)(Vertices
.2مجموعة الحواف )E (edge
وبناء عليه فان املخطط يشار اليه كما يلي:
)G=(V,E
انـواع املخططات
Graphs Type
يوجد نوعان رئيسيان من املخططات هي:
املخططات الغير متجهة
()UNDIRECTED GRAPHS
املخططات املتجهة
( )DIGRAPH
اوال:
املخططات الغير متجهة
()UNDIRECTED GRAPHS
يكون املخطط غير متجه
عندما تكون كل حافة تصل بين زوج
من القمم الغير مرتبة
وكذلك إذا لم تحدد الحواف التي تربط
بين رؤوس املخطط باتجاه معين
وفي هذه الحالة:
تكون القمة ()v1,v2
مكافئة للقمة ()v2,v1
v2
v1
v3
v4
v5
ثانيا:
املخططات املتجهة
()DIGRAPHS
املخطط يسمى متجه إذا كانت كل حافةفي املخطط
تربط بين زوج مرتب من القمم
ويكون هناك على األقل ممرواحد
من كل قمةالى قمةأخرى
ومحددا بسهم يشير الى تلك القمة
v1
v2
v4
v3
v6
v5
v7
تمثيل املخططات
Representation of Graphs
هناك عدة طرق لتمثيل املخططات منها:
.1القوائم املتصلة
.2مصفوفة الجوار ()Adjacency Matrices
)(Linked Representation
اوال :
القوائم املتصلة ()Linked Representation
تعتبر من ابسط الطرق إستخداما
فإستعراض املخطط يتضمن زيارة كل قمة في
املخطط مرة واحدة فقط فالخوارزميات التي تطبق
في الهياكل الشجرية ال يمكن أن تطبق هنا
الن املخطط قد يحتوي على دوران
لذلك خوارزمية االستعراض الشجري
من املمكن أن تؤدي الى تكرار ال نهائي
ملنع ذلك من الحدوث
كل رأس تمت زيارته يمكن أن يسجل
لتجنب زيارته مرة أخرى
مع ذلك من املمكن أن تحتوي املخططات
على قمم معزولة(غير متصلة)
مما يعني أن بعض أجزاءاملخطط
من املمكن أن تحذف إذا تم تطبيق منهج
االستعراض الشجري
مثـال:
مثل املخطط التالي باستخدام مؤشرات الربط
1
4
2
3
الحـل:
يتم تمثيل املخطط كي يشمل قائمتين:
.1قائمة العناصر
.2قائمة الحـواف
قائمــة الحواف
NULL
4
3
2
قائمة
العناص
ر
1
NULL
4
3
1
2
NULL
4
2
1
3
NULL
3
2
1
4
ثانيا :
مصفوفة الجوار
()Adjacency Matrices
هي عبارة عن مصفوفة ثنائية األبعاد
التي تحددجميع القمم املجاورة
لكل قمة في املخطط
فمصفوفة الجوار )A(aijهي مصفوفة من الحجم
n x nحيث يوضع في املوقع aijقيمة الوزن
اذا كان هناك حافة
من القمة iالى القمة j
ويوضع 0اذا لم يكن هناك حافة تربط بين الرأسين
وبشكل عام العالقة التالية تمثل مصفوفة
aij := 1 if there is an edge from
i
to
j
الجوار :
0 if there is no edge
مثـال :
مثل الشكل التالي باستخدام مصفوفة الجوار
v2
v1
v4
v5
v7
v3
v6
الحـل:
يمكن تمثيل املخطط السابق بمصفوفة الجوار
التالية:
V V V V V V V
7
6
5
4
3
2
1
0
0
0
0
0
1
0
0
0
0
1
0
V1 0
V2 0
0
0
1
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
V3 1
V4 0
V5 0
0
0
0
1
0
0
0
0
0
0
0
0
V6 0
V7 0
نالحظ ان مصفوفة الجوار تحتوي دائما
على العنصرين 0و 1
ولهذا السبب
ّ
البولية
يطلق عليها املصفوفة
حساب الحواف الداخلة والخارجة
من كل قمـة
في املخطط باستخدام مصفوفة الجوار
لحساب عدد الحواف الداخلة:
نستعمل رقم العنصر 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على التوالي.
.2الدالة indegreeتحسب عدد مرات
ظهور الرقم 1في كل عمود في مصفوفة
الجوار بإستخدام رقم العقدة الـتي
سيتم حساب الحواف الداخلة لها والذي
يمثل دليل املصفوفة.
.3الدالة outdegreeتحسب عدد
مرات ظهور الرقم 1في كل صف
من مصفوفة الجوار بإستعمال رقم
العقدة التي ستحسب لها عدد الحواف.
ثانيا:
الشبكات
NETWORKS
تعرف الشبكة على انها مخطط هندس ي
يتكون من نقطة بداية Aونقطة نهاية Fمتصالت
فيما بينهما بمجموعة متتابعة من العقد Nods
متصلة معا بعدد من الحواف Edges
Diagram
(كل حافة تصل بين نقطتين او اكثر )
ولكل حافة من حوافه قيمة عددية موجبة
تمثل
وزن تلك الحافة
طرق ايجاد اقصر املمرات
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
في الشكل التالي
يظهر شك ـل الشبكة
A
B
C
D
يمكن تمثيل الشكل السابق باستخدام مصفوفة
الجوار كما يلي:
D
C
B
A
A TO D
A TO C
A TO B
0
A
B TO D
B TO C
0
0
B
C TO D
0
0
0
C
0
D TO C
0
0
D
ويتم االعالن عن املصفوفة بلغة 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 () ; }
الدوال املستخدمه في خوارزمية ديجكسترا
.1الداله : ReadMAT
حيث يتم عن طريق هذه الداله
قراءة مصفوفة اوزان الجوار
وعند ادخال مثل هذه القيم يجب ادخال القيمه
0في حالتين هما :
اوال:
اذا كانت الحافه ( )Vi ,Viأي من والى النقطة.
ثانيا:
اذا لم توجد حافة.
.2دالة : Initialize
حيث يتم في هذه الدالة تحديد القيم االبتدائية
] INCLUDE [ SOURCEتحدد في البداية
على انها تساوي INCLUDE [i] trueلكل
النقاط املتبقية تساوي false
.3الداله : FINDMIN
وهي داله تعيد اقصر املمرات من نقطة البداية
الى النقطه J
وبذلك تصبح النقطه Jضمن اقصر املمرات
حيث يتم تعديل قيمة ]Included [j
لتصبح مساوية للقيمة true
ولتحديد ذلك
يتم فحص ابعاد جميع املمرات
من نقطة البداية الى نقطة j
وهذه االبعاد تخزن في املصفـوفة
Distance Matrix
.4الداله : UPDATE
تستخدم لتعديل املصفوفة Distance Matrix
واملصفوفة Path Matrixفي حالة ايجاد نقطة مثل
iحيث ان )(INCLUDE [i]= false
تعطي ممر طوله اقصر املمرات املوجودة
قبل اعتبار هذه النقطه
وفي هذه الحاله
تضاف هذه النقطه الى النقاط املشمولة
في اقصر املمرات
.5الداله : ALL
و تستخدم كداله منطقيه
و تعيد القيمه trueعندما تصبح قيم جميع
املواقع في املصفوفة Include Matrix
تساوي true
وتعيد هذه الداله القيمه falseخالف ذلك
.6الداله : SHORT PATH
وتستخدم كداله يتم من داخلها
استدعاء الدوال السابقه
باالضافه الى دالة الطباعه التي تقوم بطباعة
النتائج وأي معلومات اخرى نرغب فيها
وفي نهاية هذه الداله يتم طباعة اقصر املمرات
وتكلفة هذا املمر
.7
دالة الطباعه : PRINT
تستخدم هذه الداله
لطباعة قيم املصفوف ـات
DISTANSE , INCLUDE , PATH
بعد كل خطوه من خطوات الخوارزميه
.8
الداله : PRINTPATH
يستخدم هذا االجراء
لطباعة اقصر املمرات بين نقطة املصدر
ونقطة الوجهه املقصوده
إليجاد اقصر املمرات بين نقطتين باستخدام
خوارزمية ديجكسترا
باستخدام مصفوفة تكلفة الجوار املوضحه
في الشكل التالي
سوف نجد اقصر املمرات
من النقطه 1الى النقطه 3
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
توضيحات :
اذا لم تكن هناك حافة من النقطه (أ)
الى النقطه(ب) فان قيمة املوقع
في الصف أ والعمود ب تساوي ما النهاية .
عند بدء البرنامج فان الداله
تعمل على تحويل االصفار الناتجة عن عدم
وجود حواف بين النقاط في املخطط الى اكبر
قيمه صحيحة ممكنه في لغة C++ويرمز الى
هذه القيمه بالرمز MAXINTوهو يساوي
. 32767
Initialize
حل املثال :
تبدأ خوارزمية ديجكسترا بقراءة قيم مصفوفة
الجوار ،ويتم تخزين تلك القيم في املصفوفة cost
فعلى سبيل املثال
تساوي ] cost [2,3القيمة 410وهذا يعني
ان وزن الحافه التي تصل بين النقطتين
2و 3هو 410
بعد ذلك يتم استدعاء االجراء
initialize
والذي يحدد القيم االبتدائية للمصفوفات
Distanceو Pathو Included
كما يلي
اوال:
محتويات املصفوفة DISTANCEكما يلي :
بعد النقطه 1من نقطة البداية وهي النقطه نفسها
أي ] DISTANCE [ 1يساوي صفر
بعد النقطه 2من نقطة البداية
أي ] DISTANCE [ 2يساوي
800
بعد النقطه 3من نقطة البداية
أي ] DISTANCE [ 3يساوي
بعد النقطه 4من نقطة البداية
أي ] DISTANCE [ 4يساوي
بعد النقطه 5من نقطة البداية
أي ] DISTANCE [ 5يساوي
2985
310
200
وبذلك :
تكون املصفوفة DISTANCEكما يلي :
200
310
2985
800
Distance : 0
ثانيا:
محتويات املصفوفة PATH
فهي قيمة نقطة البداية في حال وجود حافة او
ممرمن نقطة البداية الى النقاط االخرى .
ولهذا تكون محتويات املصفوفة PATHمساوية
للقيمة (1أي نقطة البداية)
باستثناء ] PATH[1حيث تساوي قيمته صفرا .
1
1
1
1
0
Path:
ثالثا:
محتويات املصفوفة INCLUDE
فان قيم جميع عناصرها تساوي false
باستثناء قيمة العنصر] INCLUDE [ 1
حيث ان القيمه 1تمثل نقطة البدايةوالتي
تساوي trueوهذا يعني ان النقطه 1
ينبغي ان تشمل في اقصر املمرات .
وبذلك نحصل على القيم االبتدائية للمصفوفات
PATH وINCLUDE وDISTANCE
: كما يلي
النقطه
1
2
3
4
5
Distance
Path
Include
0
0
true
800
1
false
2985
1
false
310
1
false
200
1
false
وفي املرحلة التالية
من تنفيذ الخوارزمية
يتم تعديل محتويات املصفوفات الثالث
بحيث تعكس تلك التعديالت ابعاد اقصر املمرات
من نقطة البداية كما تبين هذه التعديالت النقاط
التي تم اخذها بعين االعتبار والنقاط املشمولة
في اقصر املمرات
لذلك
يتم في الخطوة الثانيه من الخوارزميه إجراء
التعديالت التالية على املصفوفات الثالث
فبما ان بعد النقطه 5من النقطه
1هو االقل من ابعاد النقاط االخرى
فان النقطه 5ينبغي ان تكون ضمن
اقصر املمرات
وبذلك تصبح ] INCLUDE [5مساوية للقيمة
trueوتبقى النقطه 1بوصفها النقطه التي يمكن
املرور بها حتى هذه اللحظه من الخوارزميه
وتبقى انطالقا من نقطة البداية (وهي النقطه)1
مباشرة الى النقاط االخرى كما تبقى محتويات
املصفوفة PATHكما هي
وعليه تكون محتويات املصفوفة الثالث بالنسبة
الى النقطة 5كما يلي :
5
4
3
2
1
النقطه
0
0
true
400
5
true
1821
4
false
1000
1
false
200
5
true
Distance
Path
Include
نأخذ الطريق الغير مباشر من النقطة 5الى النقطة
3من خالل النقطة 2
5
4
3
2
1
النقطه
0
0
true
400
5
true
1410
2
false
1000
1
true
200
5
true
Distance
Path
Include
:فتصبح كما يلي
النقطه
1
2
3
4
5
Distance
200
1000
1410
400
0
Path
Include
5
true
1
true
2
true
5
true
0
true
التوضيح :
لو أخذنا النقطه 2لتوضيح معنى القيم املوجودة
في املصفوفات الثالث
نالحظ ان محتويات املوقع الثاني في املصفوفات
الثالث هي ( )false , 1 , 800وهذا يعني ان طول
اقصر املمرات من النقطه 1الى النقطه 2حتى هذه
اللحظه هو 800
كما تعني القيمه 1ان النقطه التي تم استخدامها
للوصول الى النقطه 2هي النقطه 1
وتعني القيمه falseان النقطه 2لم تؤخذ
بعين االعتبار لتحديد اقصر املمرات
حتى هذه اللحظه
الخطوه التاليه
يمكن الوصول الى النقطه 3
إما من النقطه 1مباشرة وتكلفة هذا املمر 2985
او عن طريق النقطه 2وتكلفة هذا املمر 800
من النقطه 1او عن طريق النقطه 4
وتكلفة الوصول في هذه الحاله
هي 310
وبما ان 310اصغر من 800
لذلك شمول النقطه 4ضمن اقصر املمرات
وعليه تصبح قيمة
]DISTANCE [ 3
تساوي
( ) 1731 = 1421+310
كما تصبح محتويات 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
ً
إذا في الخطوه التاليه من الخوارزميه
سنالحظ أن طول املمر من 1الى 2الى 3
اصغر من طول املمر من النقطه 1الى 4
ونتيجة لذلك يصبح طول املسافة
من 1الى 3يساوي
1210 = 410+800
وهو اقل من الطول السابق للممر
من 1الى 4ثم الى 3
ولذلك يتم إجراء التعديالت الالزمة
على املصفوفات عن طريق اإلجراء
UPDATE
ومن ضمن تلك التعديالت
في هذه الخطوه
تعديل يغير قيمه ] PATH [3من 4الى 2
وتعديل ] DISTANCE[3من 1731الى 1210
وتعديل قيمة ]INCLUDE [2
من falseالى true
مما يعني ان النقطه 2قد اخذت بعين االعتبار
وعليه تصبح محتويات املصفوفات الثالث
5
4
3
2
1
النقطه
200
310
1210
800
0
Distance
1
1
2
1
0
Path
true
false
true
true
true
Include
ومن املصفوفة األخيرة نجد أقصر املمرات
وذلك بالنظر الى النقطه ( 3أي نقطة النهاية )
حيث نالحظ ان PATH [ 3 ] =2
أي ان الوصول الى 3تم من 2
اما عن كيفية الوصول الى 2
فمن الواضح انه تم عبر 1ألن PATH [ 2 ] = 1
وبما أن 1هي نقطة البداية فان اقصر املمرات
هو 1الى 2الى 3
وملعرفة طـول هذا املمر
نستخدم املصفوفة 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
لتوضيح املثال
نقوم برسم املخطط ملصفوفة تكلفة الجوار
2985
3
410
2
1
800
1421
612
310
200
5
4
400
ثانيا :
نقوم بحساب اقصر املرات بين النقطه 1و النقطه 3
االحتماالت :
410+800
3
1
2
1
3
1
2
4
1
4
3
1
5
4
3
1
5
4
2
1
4
2
3
=1210
=2985
3
3
1421+612+800
=3233
1421+310
=1731
1421+400+200
=2021
410+612+400+200
=1622
410+612+310
=1332
لتوضيح املثال
وبعد حساب اوزان جميع االحتماالت
بين النقطة 1و النقطة 3يتضح ان املمر
من النقطة 1الى النقطة 2الى النقطة 3
هو أقصر املمرات مقارنة مع نتائج باقي املمرات
وهي نفس النتيجة في حل املثال بالطريقتين
1
2
1210 = 410 + 800 = 3
الطريقة الثانية :
خوارزمية فلويد Floyd
تعد خوارزمية فلويد تعديال على خوارزمية
Dijkstraحيث تقوم هذه الخوارزمية على
حساب مصفوفة اقصر املمرات بين نقطتين
مختلفتين في املخطط الشبكي
من خالل مقارنة جميع قيم العمود األول
والصف االولفي مصفوفة املسافة ومقارنة
مجموع القيم املؤشر عليها مع بقية القيم االخرى
في نفس الصف والعمود في املصفوفة
اذا كان املجموع اقل من القيمة املؤشر عليها
نغير القيمة بقيمة املجموع املقابل لها في نفس
الصف والعمود كفاءة هذه الخوارزمية هو )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
وهذا بدوره يضمن لنا اقصر املمرات
من النقطه Iالى النقطه J
دون املرور خالل أي نقطه رقمها اكبر من Jعلى فرض
ان نقاط املخطط مرقمه الى N-1
مثـال
أوجد مصفوفة أقصر املمرات للمخطط املبين في
الشكل باستخدام خوارزمية فلويد Floyd
الحـل
أوال نجد مصفوفة تكلفة الجوار
املسافة املباشرة بين القمة الواحدة والقمم
االخرى.
إشارة ∞ تدل على عدم وجود أي طريق مباشر.
بما أن عدد نقاط املخطط يساوي
()A,B,C,D,E
5
مصفوفات5 نحصل على
(P1, P2, P3, P4, P5(
A
A
B
C
D
E
∞
23 10
∞
18
B 23 ∞ 10 48 ∞
C 10 10 ∞ 19
D
∞
48 19
E 18 ∞
7
7
∞
20
20
∞
النتيجة للمصفوفة 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
∞ 23 10 ∞ 18
∞ 23 46 10 48
10 10 ∞ 19 7
∞ 48 19 ∞ 20
∞ 20
7
∞ 18
A
B
C
D
E
نأخذ القيمة التي تليها ونقارنها
C+B=10+23=33 is > 10
ما دام املجموع ليس اقل من القيمة اذن
نتركهاكماهي
E
A B C D
18
∞ A ∞ 23 10
B 23 46 10 48
C 10 10 ∞ 19
∞ D ∞ 48 19
E 18 ∞ 7 20
∞
7
20
∞
النتيجة النهائية للمصفوفة P1
مالحظة
اذا كانت احدى القيم التي نريد جمعها ومقارنتها ∞
نترك القيمة كما هي
∞+23
اذن ال يجوز
=D+B
وهكذا مع بقية القيم الى ان ننتهي من مقارنة
جميع القيم بمجموع العمود االول والصف االول
لتكون النتيجة كاآلتي
A B C D E
∞ 23 10 ∞ 18
23 46 10 48 41
10 10 20 19 7
∞ 48 19 ∞ 20
7 20 36
18 41
A
B
C
D
E
النتيجة للمصفوفة P2
االن نأخذ التكرار التالي وننفذ الخطوات
كما في الخطوات السابقة
E
A B C D
18
∞ A ∞ 23 10
B 23 46 10 48
C 10 10 20 19
∞ D ∞ 48 19
E 18 41 7 20
41
7
20
36
النتيجة النهائية للمصفوفة P2
جميع القيم عدلت كما في املصفوفة التالية اآلتي
A B C D E
46 23 10 71 18
23 46 10 48 41
10 10 20 19 7
71 48 19 96 20
20 36
7
18 41
A
B
C
D
E
النتيجة للمصفوفة P3
التكرار التالي
E
D
C
B
A
46 23 10 71 18
A
23
B
10 10 20 19
C
71 48 19 96 20
D
18
E
46 10 48 41
7
20 36
7
41
النتيجة النهائية للمصفوفة P3
التكرار املناسب سيكون بتغيير البنود التالية
E
D
C
B
A
20 20 10 29 17
20 20 10 29 17
7
10 10 20 19
29 29 19 38 20
20 14
7
17 17
A
B
C
D
E
النتيجة النهائية للمصفوفة P4
التكرار التالي:في هذا التكرار ال نحتاج الى تغيير
أي بند من البنود لذلك نذهب الى التكرار الذي يليه
E
D
C
B
A
A 20 20 10 29 17
B 20 20 10 29 17
C 10 10 20 19 7
D 29 29 19 38 20
7 20 14
E 17 17
النتيجة النهائية للمصفوفة P5
في هذه الحالة هناك مادة وحيدة نحتاج الى تغييرها كاآلتي
E
D
C
B
A
A 20 20 10 29 17
B 20 20 10 29 17
7
C 10 10 14 19
D 29 29 19 38 20
20 14
7
17 17
E
املصفوفة النهائية
اذن P5تكون مصفوفة أقصر املمرات على شكلهاالتالي
E
D
C
B
A
17
29
20 10
20
A
17
10 29
20
20
B
7
19
14
10
10
C
20
38
29 19
29
D
14
20
7
17
17
E
املصفوفة النهائية
يمكن استخدام املصفوفة االخيرة من اجل اعادة
رسم الشبكة االصلية فتصبح كما يلي