You are on page 1of 16

‫خوارزميات ‪2‬‬

‫حل دورات‬

‫ر‬
‫𝟖𝟏𝟎𝟐‪ 𝟐𝟎𝟏𝟗/‬الفصل األول‬
‫السؤال األول‪:‬‬
‫‪ .1‬بفرض لدينا الشجرة الثنائية التالية والمطلوب‪:‬‬
‫اكتب صيغة كل من العبور الملحق 𝒓𝒆𝒅𝒓𝒐𝒕𝒔𝒐𝑷 ‪ ،‬والعبور المسبق 𝒓𝒆𝒅𝒓𝒐𝒆𝒓𝑷 ‪ ،‬والعبور‬
‫الوسطي 𝒓𝒆𝒅𝒓𝒐𝒏𝒊 لهذه الشجرة‬

‫𝐩‬

‫𝑭‬
‫𝑺‬

‫𝑫‬ ‫𝐇‬ ‫𝐘‬


‫𝐑‬
‫𝐓‬ ‫𝑮‬
‫𝐙‬

‫𝑾‬

‫الحل‪:‬‬
‫العبور المسبق 𝒓𝒆𝒅𝒓𝒐𝒆𝒓𝑷‪:‬‬ ‫‪-‬‬
‫‪ )1‬زيارة العقدة‪.‬‬
‫‪ )2‬استدعاء نفسها لعبور الشجرة الثانوية اليسرى للعقدة‪.‬‬
‫‪ )3‬استدعاء نفسها لعبور الشجرة الثانوية اليمنى للعقدة‪.‬‬

‫{)𝒕𝒐𝒐𝑹𝒍𝒂𝒄𝒐𝒍 𝒆𝒅𝒐𝑵(𝒓𝒆𝒅𝒓𝑶𝒆𝒓𝑷 𝒅𝒊𝒐𝒗 𝒆𝒕𝒂𝒗𝒊𝒓𝒑‬


‫{)𝒍𝒍𝒖𝒏 = ! 𝒕𝒐𝒐𝑹𝒍𝒂𝒄𝒐𝒍(𝒇𝒊‬
‫;)" " ‪𝒔𝒚𝒔𝒕𝒆𝒎. 𝒐𝒖𝒕. 𝒑𝒓𝒊𝒏𝒕(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕. 𝒊𝑫𝒂𝒕𝒂 +‬‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝑷𝒓𝒆𝑶𝒓𝒅𝒆𝒓(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕.‬‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝑷𝒓𝒆𝑶𝒓𝒅𝒆𝒓(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕.‬‬
‫}‬
‫}‬
‫‪𝑷 𝑭 𝑫 𝑻 . 𝑾 . . . 𝑯 𝑮 … 𝑺 𝑹 . . 𝒀 . 𝒁 ..‬‬ ‫الخرج ‪:‬‬

‫العبور الوسطي 𝒓𝒆𝒅𝒓𝒐𝒏𝒊‪:‬‬ ‫‪-‬‬


‫‪ )1‬استدعاء نفسها لعبور الشجرة الثانوية اليسرى للعقدة‪.‬‬
‫‪ )2‬زيارة العقدة‪.‬‬
‫‪ )3‬استدعاء نفسها لعبور الشجرة الثانوية اليمنى للعقدة‪.‬‬

‫‪1‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫{)𝒕𝒐𝒐𝑹𝒍𝒂𝒄𝒐𝒍 𝒆𝒅𝒐𝑵(𝒓𝒆𝒅𝒓𝑶𝒏𝒊 𝒅𝒊𝒐𝒗 𝒆𝒕𝒂𝒗𝒊𝒓𝒑‬
‫{)𝒍𝒍𝒖𝒏 = ! 𝒕𝒐𝒐𝑹𝒍𝒂𝒄𝒐𝒍(𝒇𝒊‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝒊𝒏𝑶𝒓𝒅𝒆𝒓(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕.‬‬
‫;)" " ‪𝒔𝒚𝒔𝒕𝒆𝒎. 𝒐𝒖𝒕. 𝒑𝒓𝒊𝒏𝒕(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕. 𝒊𝑫𝒂𝒕𝒂 +‬‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒊𝒏𝑶𝒓𝒅𝒆𝒓(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕.‬‬
‫}‬
‫}‬
‫‪. 𝑻. 𝑾. 𝑫. 𝑭. 𝑮. 𝑯. 𝑷. 𝑹. 𝑺. 𝒀. 𝒁.‬‬ ‫الخرج ‪:‬‬

‫العبور الملحق 𝒓𝒆𝒅𝒓𝒐𝒕𝒔𝒐𝑷 ‪:‬‬


‫‪ )1‬استدعاء نفسها لعبور الشجرة الثانوية اليسرى للعقدة‪.‬‬
‫‪ )2‬استدعاء نفسها لعبور الشجرة الثانوية اليمنى للعقدة‪.‬‬
‫‪ )3‬زيارة العقدة‪.‬‬

‫{)𝒕𝒐𝒐𝑹𝒍𝒂𝒄𝒐𝒍 𝒆𝒅𝒐𝑵(𝒓𝒆𝒅𝒓𝑶𝒕𝒔𝒐𝑷 𝒅𝒊𝒐𝒗 𝒆𝒕𝒂𝒗𝒊𝒓𝒑‬


‫{)𝒍𝒍𝒖𝒏 = ! 𝒕𝒐𝒐𝑹𝒍𝒂𝒄𝒐𝒍(𝒇𝒊‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝑷𝒐𝒔𝒕𝑶𝒓𝒅𝒆𝒓(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕.‬‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝑷𝒐𝒔𝒕𝑶𝒓𝒅𝒆𝒓(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕.‬‬
‫;)" " ‪𝒔𝒚𝒔𝒕𝒆𝒎. 𝒐𝒖𝒕. 𝒑𝒓𝒊𝒏𝒕(𝒍𝒐𝒄𝒂𝒍𝑹𝒐𝒐𝒕. 𝒊𝑫𝒂𝒕𝒂 +‬‬
‫}‬
‫}‬
‫𝑷𝑺𝒀𝒁 ‪. . . 𝑾𝑻. 𝑫. . 𝑮. 𝑯𝑭. . 𝑹. . .‬‬ ‫الخرج ‪:‬‬

‫‪ .2‬قارن الزمن 𝒐 𝒈𝒊𝑩 لعملية اإلدخال وعملية البحث بين األشجار والمصفوفات المرتبة واللوائح‬
‫المترابطة وفق الجدول التالي‪:‬‬

‫عملية اإلدخال‬ ‫عملية البحث‬


‫األشجار الثنائية‬
‫المصفوفات المرتبة‬
‫اللوائح المترابطة‬

‫الحل‪:‬‬

‫عملية اإلدخال‬ ‫عملية البحث‬


‫)𝑵 𝟐 𝐠𝐨𝐥( 𝑶‬ ‫)𝑵 𝟐 𝐠𝐨𝐥( 𝑶‬
‫األشجار الثنائية‬
‫)𝑵( 𝑶‬ ‫)𝑵 𝐠𝐨𝐥( 𝑶‬
‫المصفوفات المرتبة‬
‫)𝟏( 𝑶‬ ‫)𝑵( 𝑶‬
‫اللوائح المترابطة‬

‫‪2‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬

‫‪ .3‬بفرض أن متحوالت العقدة ضمن الشجرة الثنائية يمكن تمثيلها بالصنف 𝒆𝒅𝒐𝑵 𝒔𝒔𝒂𝒍𝒄‬
‫{𝒆𝒅𝒐𝑵 𝒔𝒔𝒂𝒍𝑪‬
‫𝒆𝒖𝒍𝒂𝒗 𝒚𝒆𝒌 𝒔𝒂 𝒅𝒆𝒔𝒖 𝒂𝒕𝒂𝒅‪𝒊𝒏𝒕 𝒊𝑫𝒂𝒕𝒂; //‬‬
‫𝒂𝒕𝒂𝒅 𝒓𝒆𝒉𝒕𝒐‪𝒅𝒐𝒖𝒃𝒍𝒆 𝒇𝑫𝒂𝒕𝒂 ; //‬‬
‫𝒅𝒍𝒊𝒉𝒄 𝒕𝒇𝒆𝒍 𝒔‪𝑵𝒐𝒅𝒆 𝒍𝒆𝒇𝒕𝑪𝒉𝒊𝒍𝒅; //𝒕𝒉𝒊𝒔 𝒊𝒔 𝒕𝒉𝒆 𝒏𝒐𝒅𝒆′‬‬
‫𝒅𝒍𝒊𝒉𝒄 𝒕𝒉𝒈𝒊𝒓 𝒔‪𝑵𝒐𝒅𝒆 𝒓𝒊𝒈𝒉𝒕𝑪𝒉𝒊𝒍𝒅; //𝒕𝒉𝒊𝒔 𝒊𝒔 𝒕𝒉𝒆 𝒏𝒐𝒅𝒆′‬‬
‫}‬

‫{)𝒕𝒐𝒐𝒓 𝒆𝒅𝒐𝑵(𝒓𝒐𝒓𝒓𝒊𝒎 𝒆𝒅𝒐𝑵 𝒄𝒊𝒍𝒃𝒖𝒑‬


‫‪//𝒉𝒆𝒓𝒆 − − − − − − − − − −‬‬
‫}‬

‫المطلوب‪:‬‬
‫ً‬
‫(مستخدما االستدعاء التعاودي) طريقة اسمها 𝒓𝒐𝒓𝒓𝒊𝒎 (معكوس الشجرة) إذ‬ ‫اكتب بلغة الجافا‬
‫يتم التمرير لهذه الطريقة عنوان جذر الطريقة األصلية لتقوم طريقة 𝒓𝒐𝒓𝒓𝒊𝒎 بعكس الشجرة‬
‫ومن ثم إعادة عنوان جذر الشجرة المعكوسة للشجرة األصلية‪.‬‬
‫مثال‪ :‬الشجرة )𝒂( األصلية والشجرة )𝒃( هي معكوس الشجرة األصلية‪.‬‬

‫𝟏‬ ‫𝟏‬
‫𝟐‬ ‫𝟑‬ ‫𝟑‬ ‫𝟐‬

‫𝟒‬ ‫𝟓‬ ‫𝟓‬ ‫𝟒‬

‫𝟕‬ ‫𝟔‬
‫𝟔‬ ‫𝟕‬
‫)𝒂(‬ ‫)𝒃(‬
‫الحل‪:‬‬
‫{)𝒕𝒐𝒐𝒓 𝒆𝒅𝒐𝑵(𝒓𝒐𝒓𝒓𝒊𝒎 𝒆𝒅𝒐𝑵 𝒄𝒊𝒍𝒃𝒖𝒑‬
‫)𝒍𝒍𝒖𝒏 == 𝒕𝒐𝒐𝒓(𝒇𝒊‬
‫;𝒕𝒐𝒐𝒓 𝒏𝒓𝒖𝒕𝒆𝒓‬
‫{𝒆𝒔𝒍𝒆‬
‫;𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝑵𝒐𝒅𝒆 𝒕𝒆𝒎𝒑 = 𝒓𝒐𝒐𝒕.‬‬
‫𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒓𝒐𝒐𝒕. 𝒍𝒆𝒇𝒕𝑪𝒉𝒊𝒍𝒅 = 𝒓𝒐𝒐𝒕.‬‬
‫;𝒑𝒎𝒆𝒕 = 𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒓𝒐𝒐𝒕.‬‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝒎𝒊𝒓𝒓𝒐𝒓(𝒓𝒐𝒐𝒕.‬‬
‫;)𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒎𝒊𝒓𝒓𝒐𝒓(𝒓𝒐𝒐𝒕.‬‬
‫;𝒕𝒐𝒐𝒓 𝒏𝒓𝒖𝒕𝒆𝒓‬
‫}‬
‫}‬

‫‪3‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫السؤال الثاني‪:‬‬
‫ً‬
‫جدوال تبين فيه تغير‬ ‫‪ .1‬اكتب بلغة جافا طريقة انشطار عقدة في الشجرة 𝟒 ‪ 𝟐 − 𝟑 −‬ثم اكتب‬
‫المتحوالت من أجل إدخال عقدة ذات المفتاح 𝟓𝟗 في شجرة 𝟒 ‪ 𝟐 − 𝟑 −‬التالية وارسم الشكل‬
‫الجديد‪.‬‬

‫𝟎𝟑‬ ‫𝟎𝟓‬

‫𝟎𝟐‬ ‫𝟓𝟐‬ ‫𝟎𝟕‬ ‫𝟎𝟖‬ ‫𝟎𝟗‬

‫𝟎𝟒‬

‫الحل‪:‬‬
‫{)𝒆𝒅𝒐𝑵𝒔𝒊𝒉𝒕 𝒆𝒅𝒐𝑵( 𝒕𝒊𝒍𝒑𝒔 𝒅𝒊𝒐𝒗 𝒄𝒊𝒍𝒃𝒖𝒑‬
‫;𝑪𝒎𝒆𝒕𝒊 ‪𝑫𝒂𝒕𝒂 𝒊𝒕𝒆𝒎𝑩,‬‬
‫;𝟑𝒅𝒍𝒊𝒉𝒄 ‪𝑵𝒐𝒅𝒆 𝒑𝒂𝒓𝒆𝒏𝒕, 𝒄𝒉𝒊𝒍𝒅𝟐,‬‬
‫;𝒙𝒆𝒅𝒏𝑰𝒎𝒆𝒕𝒊 𝒕𝒏𝒊‬
‫;)(𝒎𝒆𝒕𝑰𝒆𝒗𝒐𝒎𝒆𝒓 ‪𝒊𝒕𝒆𝒎𝑪 = 𝒕𝒉𝒊𝒔𝑵𝒐𝒅𝒆.‬‬
‫;)(𝒎𝒆𝒕𝑰𝒆𝒗𝒐𝒎𝒆𝒓 ‪𝒊𝒕𝒆𝒎𝑩 = 𝒕𝒉𝒊𝒔𝑵𝒐𝒅𝒆.‬‬
‫;)𝟐(𝒅𝒍𝒊𝒉𝒄𝒕𝒄𝒆𝒏𝒏𝒐𝒄𝒔𝒊𝒅 ‪𝒄𝒉𝒊𝒍𝒅𝟐 = 𝒕𝒉𝒊𝒔𝑵𝒐𝒅𝒆.‬‬
‫;)𝟑(𝒅𝒍𝒊𝒉𝒄𝒕𝒄𝒆𝒏𝒏𝒐𝒄𝒔𝒊𝒅 ‪𝒄𝒉𝒊𝒍𝒅𝟑 = 𝒕𝒉𝒊𝒔𝑵𝒐𝒅𝒆.‬‬
‫;)(𝒆𝒅𝒐𝑵 𝒘𝒆𝒏 = 𝒕𝒉𝒈𝒊𝑹𝒘𝒆𝒏 𝒆𝒅𝒐𝑵‬
‫{)𝒕𝒐𝒐𝒓 == 𝒆𝒅𝒐𝑵𝒔𝒊𝒉𝒕(𝒇𝒊‬
‫;)(𝒆𝒅𝒐𝑵 𝒘𝒆𝒏 = 𝒕𝒐𝒐𝒓‬
‫;𝒕𝒐𝒐𝒓 = 𝒕𝒏𝒆𝒓𝒂𝒑‬
‫;)𝒆𝒅𝒐𝑵𝒔𝒊𝒉𝒕 ‪𝒓𝒐𝒐𝒕. 𝒄𝒐𝒏𝒏𝒆𝒄𝒕𝒄𝒉𝒊𝒍𝒅(𝟎,‬‬
‫}‬
‫𝒆𝒔𝒍𝒆‬
‫;)(𝒕𝒏𝒆𝒓𝒂𝑷𝒕𝒆𝒈 ‪𝒑𝒂𝒓𝒆𝒏𝒕 = 𝒕𝒉𝒊𝒔𝑵𝒐𝒅𝒆.‬‬
‫;)𝑩𝒎𝒆𝒕𝒊(𝒔𝒎𝒆𝒕𝑰𝒕𝒓𝒆𝒔𝒏𝒊 ‪𝒊𝒕𝒆𝒎𝑰𝒏𝒅𝒆𝒙 = 𝒑𝒂𝒓𝒆𝒏𝒕.‬‬
‫;)(𝒔𝒎𝒆𝒕𝑰𝒎𝒖𝑵𝒕𝒆𝒈 ‪𝒊𝒏𝒕 𝒏 = 𝒑𝒂𝒓𝒆𝒏𝒕.‬‬
‫)‪𝒇𝒐𝒓(𝒊𝒏𝒕 𝒋 = 𝒏 − 𝟏; 𝒋 > 𝒊𝒕𝒆𝒎𝑰𝒏𝒅𝒆𝒙; 𝒋 − −‬‬
‫{‬
‫;)𝒋(𝒅𝒍𝒊𝒉𝒄𝒕𝒄𝒆𝒏𝒏𝒐𝒄𝒔𝒊𝒅 ‪𝑵𝒐𝒅𝒆 𝒕𝒆𝒎𝒑 = 𝒑𝒂𝒓𝒆𝒏𝒕.‬‬
‫;)𝒑𝒎𝒆𝒕 ‪𝒑𝒂𝒓𝒆𝒏𝒕. 𝒄𝒐𝒏𝒏𝒆𝒄𝒕𝒄𝒉𝒊𝒍𝒅(𝒋 + 𝟏,‬‬
‫}‬
‫;)𝒕𝒉𝒈𝒊𝑹𝒘𝒆𝒏 ‪𝒑𝒂𝒓𝒆𝒏𝒕. 𝒄𝒐𝒏𝒏𝒆𝒄𝒕𝒄𝒉𝒊𝒍𝒅(𝒊𝒕𝒆𝒎𝑰𝒏𝒅𝒆𝒙 + 𝟏,‬‬
‫;)𝑪𝒎𝒆𝒕𝒊(𝒎𝒆𝒕𝑰𝒕𝒓𝒆𝒔𝒏𝒊 ‪𝒏𝒆𝒘𝑹𝒊𝒈𝒉𝒕.‬‬
‫;)𝟐𝒅𝒍𝒊𝒉𝒄 ‪𝒏𝒆𝒘𝑹𝒊𝒈𝒉𝒕. 𝒄𝒐𝒏𝒏𝒆𝒄𝒕𝒄𝒉𝒊𝒍𝒅(𝟎,‬‬
‫;)𝟑𝒅𝒍𝒊𝒉𝒄 ‪𝒏𝒆𝒘𝑹𝒊𝒈𝒉𝒕. 𝒄𝒐𝒏𝒏𝒆𝒄𝒕𝒄𝒉𝒊𝒍𝒅(𝟏,‬‬
‫}‬

‫‪4‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫في التابع 𝑡𝑟𝑒𝑠𝑛𝑖‬ ‫في التابع 𝑡𝑖𝑙𝑝𝑠‬ ‫في التابع 𝑡𝑖𝑙𝑝𝑠‬ ‫في التابع 𝑡𝑖𝑙𝑝𝑠‬ ‫في التابع 𝑡𝑖𝑙𝑝𝑠‬ ‫في التابع 𝑡𝑟𝑒𝑠𝑛𝑖‬

‫𝒆𝒅𝒐𝑵𝒓𝒖𝒄‬ ‫𝒕𝒏𝒆𝒓𝒂𝑷‬ ‫𝑪𝒎𝒆𝒕𝒊‬ ‫𝑩𝒎𝒆𝒕𝒊‬ ‫𝒕𝒉𝒈𝒊𝑹𝒘𝒆𝑵‬ ‫𝒎𝒆𝒕𝑰𝒑𝒎𝒆𝒕‬


‫𝟎𝟓‪𝒓𝒐𝒐𝒕 = 𝟑𝟎/‬‬ ‫𝟓𝟗‬
‫𝟎𝟗‪𝟕𝟎/𝟖𝟎/‬‬ ‫𝟎𝟓‪𝟑𝟎/‬‬ ‫𝟎𝟗‬ ‫𝟎𝟖‬
‫𝟎𝟕‬ ‫𝟎𝟖‪𝟑𝟎/𝟓𝟎/‬‬ ‫𝟎𝟗‬
‫𝟎𝟖‪𝟑𝟎/𝟓𝟎/‬‬ ‫𝟎𝟗‬
‫𝟎𝟗‬
‫𝟓𝟗‪𝟗𝟎/‬‬

‫𝟎𝟑‬ ‫𝟎𝟓‬

‫𝟎𝟐‬ ‫𝟓𝟐‬ ‫𝟎𝟕‬ ‫𝟎𝟖‬ ‫𝟎𝟗‬

‫𝟎𝟒‬
‫‪95‬‬

‫𝟎𝟑‬ ‫𝟎𝟓‬ ‫𝟎𝟖‬

‫𝟎𝟐‬ ‫𝟓𝟐‬ ‫𝟎𝟒‬ ‫𝟎𝟕‬ ‫𝟎𝟗‬ ‫𝟓𝟗‬

‫‪ .2‬اذكر القواعد الثالث لتحويل الشجرة 𝟒 ‪ 𝟐 − 𝟑 −‬إلى شجرة أحمر‪-‬أسود مع الرسم‪.‬‬


‫الحل‪:‬‬
‫للتحويل من شجرة ‪ 2 − 3 − 4‬إلى شجرة أحمر _ أسود نتبع القواعد التالية ‪:‬‬
‫‪ -1‬تحويل أي عقدة 𝑒𝑑𝑜𝑛 ‪ 2 −‬في شجرة ‪ 2 − 3 − 4‬الى عقدة سوداء في شجرة أحمر _ أسود‪.‬‬

‫‪33‬‬ ‫‪33‬‬

‫𝑊‬ ‫𝑋‬ ‫𝑊‬ ‫𝑋‬

‫‪5‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫‪ -2‬تحويل أي عقدة 𝑒𝑑𝑜𝑛 ‪ 3 −‬في شجرة ‪ 2 − 3 − 4‬الى عقدة ولد وعقدة والد في شجرة أحمر‬
‫_ أسود حيث تمتلك عقدة الولد عقدتي أوالد خاصة بها‪.‬‬

‫‪55‬‬ ‫‪27‬‬
‫‪27‬‬ ‫‪55‬‬

‫𝑌‬ ‫𝑊‬
‫‪27‬‬ ‫‪55‬‬
‫𝑊‬ ‫𝑋‬ ‫𝑌‬

‫𝑊‬ ‫𝑋‬ ‫𝑋‬ ‫𝑌‬

‫‪ -3‬تحويل أي عقدة 𝑒𝑑𝑜𝑛 ‪ 4 −‬في شجرة ‪ 2 − 3 − 4‬الى ولدين وعقدة والد في شجرة أحمر _‬
‫أسود حيث تلون األوالد باللون األحمر والوالد باألسود‪.‬‬

‫‪42‬‬

‫‪16‬‬ ‫‪42‬‬ ‫‪66‬‬

‫𝑍‬ ‫‪16‬‬ ‫‪66‬‬


‫𝑊‬ ‫𝑋‬ ‫𝑌‬

‫𝑊‬ ‫𝑋‬ ‫𝑌‬ ‫𝑍‬

‫‪ .3‬طبق القواعد التحويل السابقة في تحويل الشجرة 𝒆𝒅𝒐𝒏_𝟑 التالية إلى شجرة أحمر‪-‬أسود‬
‫متوازنة في حالة جذر الشجرة هو العدد ‪.82‬‬
‫𝟎𝟕‬ ‫𝟐𝟖‬

‫𝟎𝟒‬ ‫𝟔𝟖‬ ‫𝟐𝟗‬ ‫𝟗𝟗‬

‫𝟓𝟕‬

‫‪6‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫الحل‪:‬‬

‫‪82‬‬

‫‪70‬‬ ‫‪92‬‬

‫‪40‬‬ ‫‪75‬‬ ‫‪86‬‬ ‫‪99‬‬

‫السؤال الثالث‪:‬‬
‫ارسم التغيرات من أجل بناء شجرة هوفمان واستنتج الشيفرة من أجل جدول التواتر التالي‪:‬‬

‫𝒓𝒆𝒕𝒄𝒂𝒓𝒂𝒉𝑪‬ ‫𝑨‬ ‫𝑩‬ ‫𝑪‬ ‫𝑫‬


‫𝒕𝒏𝒖𝒐𝑪‬ ‫𝟑‬ ‫𝟏‬ ‫𝟐‬ ‫𝟏‬

‫الحل‪:‬‬
‫‪.1‬‬
‫𝟏‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬
‫𝐁‬ ‫𝐃‬ ‫𝐂‬ ‫𝑨‬

‫‪.2‬‬

‫𝟐‬

‫𝟐‬ ‫𝟑‬

‫𝐁‬ ‫𝐂‬ ‫𝑨‬


‫𝟏‬ ‫𝐃 𝟏‬

‫‪.3‬‬
‫𝟑‬ ‫𝟒‬
‫𝑨‬

‫𝟐‬ ‫𝟐‬
‫𝐂‬

‫𝐁 𝟏‬ ‫𝐃 𝟏‬

‫‪7‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫‪.4‬‬
‫‪7‬‬

‫𝟎‬ ‫𝟏‬

‫𝟑‬ ‫𝟒‬
‫𝟎=𝑨‬
‫𝟏𝟏 = 𝑪‬ ‫𝑨‬
‫𝟎𝟎𝟏 = 𝑩‬ ‫𝟎‬ ‫𝟏‬
‫𝟏𝟎𝟏 = 𝑫‬
‫𝟐‬ ‫𝟐‬
‫𝐂‬
‫𝟎‬ ‫𝟏‬

‫𝐁 𝟏‬ ‫𝐃 𝟏‬

‫السؤال الرابع‪:‬‬
‫‪ .1‬اكتب بلغة 𝑨𝑽𝑨𝑱 طريقة الفرز السريع التعاودية 𝒕𝒓𝒐𝑺𝒌𝒄𝒊𝒖𝑸𝒄𝒆𝒓 في حالة تقسيم وسط‬
‫الثالثة‪.‬‬

‫{)𝒕𝒉𝒈𝒊𝒓 𝒕𝒏𝒊 ‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒗𝒐𝒊𝒅 𝒓𝒆𝒄𝑸𝒖𝒊𝒄𝒌𝑺𝒐𝒓𝒕(𝒊𝒏𝒕 𝒍𝒆𝒇𝒕,‬‬


‫;𝟏 ‪𝒊𝒏𝒕 𝒔𝒊𝒛𝒆 = 𝒓𝒊𝒈𝒉𝒕 − 𝒍𝒆𝒇𝒕 +‬‬
‫)𝟑 =< 𝒆𝒛𝒊𝒔(𝒇𝒊‬
‫;)𝒕𝒉𝒈𝒊𝒓 ‪𝒎𝒂𝒏𝒖𝒂𝒍𝑺𝒐𝒓𝒕(𝒍𝒆𝒇𝒕,‬‬
‫{𝒆𝒔𝒍𝒆‬
‫;)𝒕𝒉𝒈𝒊𝒓 ‪𝒍𝒐𝒏𝒈 𝒎𝒆𝒅𝒊𝒂𝒏 = 𝒎𝒆𝒅𝒊𝒂𝒏𝑶𝒇𝟑(𝒍𝒆𝒇𝒕,‬‬
‫;)𝒏𝒂𝒊𝒅𝒆𝒎 ‪𝒊𝒏𝒕 𝒑𝒂𝒓𝒕𝒊𝒕𝒊𝒐𝒏 = 𝒑𝒂𝒓𝒕𝒊𝒕𝒊𝒐𝒏𝑰𝒕(𝒍𝒆𝒇𝒕, 𝒓𝒊𝒈𝒉𝒕,‬‬
‫;)𝒕𝒉𝒈𝒊𝒓 ‪𝒓𝒆𝒄𝑸𝒖𝒊𝒄𝒌𝑺𝒐𝒓𝒕(𝒑𝒂𝒓𝒕𝒊𝒕𝒊𝒐𝒏 + 𝟏,‬‬
‫}‬
‫}‬
‫‪ .2‬اكتب بلغة 𝑨𝑽𝑨𝑱 طريقة التجزيء 𝒕𝑰𝒏𝒐𝒊𝒕𝒊𝒕𝒓𝒂𝒑 التي تستدعيها طريقة الفرز السريع التعاودية‬
‫في حالة تقسيم وسط الثالثة‪.‬‬

‫{)𝟐𝒙𝒆𝒅 𝒕𝒏𝒊 ‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒗𝒐𝒊𝒅 𝒔𝒘𝒂𝒑(𝒊𝒏𝒕 𝒅𝒆𝒙𝟏,‬‬


‫;]𝟏𝒙𝒆𝒅[𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝒕 = 𝒑𝒎𝒆𝒕 𝒈𝒏𝒐𝒍‬
‫;]𝟐𝒙𝒆𝒅[𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝒕 = ]𝟏𝒙𝒆𝒅[𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝒕‬
‫;𝒑𝒎𝒆𝒕 = ]𝟐𝒙𝒆𝒅[𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝒕‬
‫}‬

‫{)𝒕𝒐𝒗𝒊𝒑 𝒈𝒏𝒐𝒍 ‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒊𝒏𝒕 𝒑𝒂𝒓𝒕𝒊𝒕𝒊𝒐𝒏𝑰𝒕(𝒊𝒏𝒕 𝒍𝒆𝒇𝒕, 𝒊𝒏𝒕 𝒓𝒊𝒈𝒉𝒕,‬‬


‫;𝒕𝒇𝒆𝒍 = 𝒓𝒕𝑷𝒕𝒇𝒆𝒍 𝒕𝒏𝒊‬
‫;𝟏 ‪𝒊𝒏𝒕 𝒓𝒊𝒈𝒉𝒕𝑷𝒕𝒓 = 𝒓𝒊𝒈𝒉𝒕 −‬‬
‫{)𝒆𝒖𝒓𝒕(𝒆𝒍𝒊𝒉𝒘‬
‫;)𝒕𝒐𝒗𝒊𝒑 < ]𝒓𝒕𝑷𝒕𝒇𝒆𝒍 ‪𝒘𝒉𝒊𝒍𝒆(𝒕𝒉𝒆𝑨𝒓𝒓𝒂𝒚[+ +‬‬
‫;)𝒕𝒐𝒗𝒊𝒑 > ]𝒓𝒕𝑷𝒕𝒉𝒈𝒊𝒓 ‪𝒘𝒉𝒊𝒍𝒆(𝒕𝒉𝒆𝑨𝒓𝒓𝒂𝒚[− −‬‬

‫‪8‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫)𝒓𝒕𝑷𝒕𝒉𝒈𝒊𝒓 => 𝒓𝒕𝑷𝒕𝒇𝒆𝒍(𝒇𝒊‬
‫;𝒌𝒂𝒆𝒓𝒃‬
‫;)𝒓𝒕𝑷𝒕𝒉𝒈𝒊𝒓 ‪𝒆𝒍𝒔𝒆 𝒔𝒘𝒂𝒑(𝒍𝒆𝒇𝒕𝑷𝒕𝒓,‬‬
‫}‬
‫;)𝟏 ‪𝒔𝒘𝒂𝒑(𝒍𝒆𝒇𝒕𝑷𝒕𝒓, 𝒓𝒊𝒈𝒉𝒕 −‬‬
‫;𝒓𝒕𝑷𝒕𝒇𝒆𝒍 𝒏𝒓𝒖𝒕𝒆𝒓‬
‫}‬

‫‪ .3‬اذكر التغيرات التي تطرأ على فرز المصفوفة التالية‪:‬‬


‫𝟎𝟑𝟑‬ ‫𝟎𝟓𝟓 𝟎𝟒𝟒 𝟎𝟔𝟔 𝟎𝟐𝟐 𝟎𝟏𝟏‬

‫𝟎𝟑𝟑‬ ‫𝟎𝟏𝟏‬ ‫𝟎𝟐𝟐‬ ‫𝟎𝟔𝟔‬ ‫𝟎𝟒𝟒‬ ‫𝟎𝟓𝟓‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬

‫𝟎𝟐𝟐‬ ‫𝟎𝟏𝟏‬ ‫𝟎𝟑𝟑‬ ‫𝟎𝟔𝟔‬ ‫𝟎𝟒𝟒‬ ‫𝟎𝟓𝟓‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬

‫𝟎𝟏𝟏‬ ‫𝟎𝟐𝟐‬ ‫𝟎𝟑𝟑‬ ‫𝟎𝟔𝟔‬ ‫𝟎𝟒𝟒‬ ‫𝟎𝟓𝟓‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬

‫𝟎𝟏𝟏‬ ‫𝟎𝟐𝟐‬ ‫𝟎𝟑𝟑‬ ‫𝟎𝟒𝟒‬ ‫𝟎𝟔𝟔‬ ‫𝟎𝟓𝟓‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬

‫𝟎𝟏𝟏‬ ‫𝟎𝟐𝟐‬ ‫𝟎𝟑𝟑‬ ‫𝟎𝟒𝟒‬ ‫𝟎𝟔𝟔‬ ‫𝟎𝟓𝟓‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬

‫𝟎𝟏𝟏‬ ‫𝟎𝟐𝟐‬ ‫𝟎𝟑𝟑‬ ‫𝟎𝟒𝟒‬ ‫𝟎𝟓𝟓‬ ‫𝟎𝟔𝟔‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬

‫‪9‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫𝟖𝟏𝟎𝟐‪ 𝟐𝟎𝟏𝟗/‬الدورة الثالثة‬
‫السؤال األول‪:‬‬
‫‪ .1‬اكتب بلغة 𝒂𝒗𝒂𝒋 طريقة فرز شل 𝒕𝒓𝒐𝑺𝒍𝒍𝒆𝒉𝒔 والتي تقوم بفرز المصفوفة العددية 𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝑻‪.‬‬

‫)(𝒕𝒓𝒐𝑺𝒍𝒍𝒆𝒉𝒔 𝒅𝒊𝒐𝒗 𝒄𝒊𝒍𝒃𝒖𝒑‬


‫{‬
‫;𝒓𝒆𝒕𝒖𝒐 ‪𝒊𝒏𝒕 𝒊𝒏𝒏𝒆𝒓,‬‬
‫;𝒑𝒎𝒆𝒕 𝒈𝒏𝒐𝒍‬
‫;𝟏 = 𝒉 𝒕𝒏𝒊‬
‫)𝟑‪𝒘𝒉𝒍𝒊𝒆(𝒉 <= 𝒏𝑬𝒍𝒆𝒎𝒔/‬‬
‫;𝟏 ‪𝒉 = 𝒉 ∗ 𝟑 +‬‬
‫)𝟎 > 𝒉(𝒆𝒍𝒊𝒉𝒘‬
‫{‬
‫)‪𝒇𝒐𝒓(𝒐𝒖𝒕𝒆𝒓 = 𝒉 ; 𝒐𝒖𝒕𝒆𝒓 < 𝒏𝑬𝒍𝒆𝒎𝒔; 𝒐𝒖𝒕𝒆𝒓 + +‬‬
‫{‬
‫;]𝒓𝒆𝒕𝒖𝒐[𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝒕 = 𝒑𝒎𝒆𝒕‬
‫;𝒓𝒆𝒕𝒖𝒐 = 𝒓𝒆𝒏𝒏𝒊‬
‫)𝒑𝒎𝒆𝒕 => ]𝒉 ‪𝒘𝒉𝒊𝒍𝒆(𝒊𝒏𝒏𝒆𝒓 > 𝒉 − 𝟏 && 𝒕𝒉𝒆𝑨𝒓𝒓𝒂𝒚[𝒊𝒏𝒏𝒆𝒓 −‬‬
‫{‬
‫;]𝒉 ‪𝒕𝒉𝒆𝑨𝒓𝒓𝒂𝒚[𝒊𝒏𝒏𝒆𝒓] = 𝒕𝒉𝒆𝑨𝒓𝒓𝒂𝒚[𝒊𝒏𝒏𝒆𝒓 −‬‬
‫;𝒉 =‪𝒊𝒏𝒏𝒆𝒓−‬‬
‫}‬
‫;𝒑𝒎𝒆𝒕 = ]𝒓𝒆𝒏𝒏𝒊[𝒚𝒂𝒓𝒓𝑨𝒆𝒉𝒕‬
‫}‬
‫;𝟑‪𝒉 = (𝒉 − 𝟏)/‬‬
‫}‬
‫}‬

‫‪ .2‬طبق طريقة فرز شل (من أجل 𝟒 = 𝒉 فقط ) على المصفوفة التالية‬

‫𝟕‬ ‫𝟎𝟏‬ ‫𝟏‬ ‫𝟗‬ ‫𝟐‬ ‫𝟓‬ ‫𝟖‬ ‫𝟔‬ ‫𝟒‬ ‫𝟑‬

‫الحل‪:‬‬

‫𝟕‬ ‫𝟎𝟏‬ ‫𝟏‬ ‫𝟗‬ ‫𝟐‬ ‫𝟓‬ ‫𝟖‬ ‫𝟔‬ ‫𝟒‬ ‫𝟑‬
‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬ ‫𝟔‬ ‫𝟕‬ ‫𝟖‬ ‫𝟗‬

‫𝟐‬ ‫𝟎𝟏‬ ‫𝟏‬ ‫𝟗‬ ‫𝟒‬ ‫𝟓‬ ‫𝟖‬ ‫𝟔‬ ‫𝟕‬ ‫𝟑‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬ ‫𝟔‬ ‫𝟕‬ ‫𝟖‬ ‫𝟗‬

‫‪10‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫𝟐‬ ‫𝟑‬ ‫𝟏‬ ‫𝟗‬ ‫𝟒‬ ‫𝟓‬ ‫𝟖‬ ‫𝟔‬ ‫𝟕‬ ‫𝟎𝟏‬
‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬ ‫𝟔‬ ‫𝟕‬ ‫𝟖‬ ‫𝟗‬

‫𝟐‬ ‫𝟑‬ ‫𝟏‬ ‫𝟗‬ ‫𝟒‬ ‫𝟓‬ ‫𝟖‬ ‫𝟔‬ ‫𝟕‬ ‫𝟎𝟏‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬ ‫𝟔‬ ‫𝟕‬ ‫𝟖‬ ‫𝟗‬

‫𝟐‬ ‫𝟑‬ ‫𝟏‬ ‫𝟔‬ ‫𝟒‬ ‫𝟓‬ ‫𝟖‬ ‫𝟗‬ ‫𝟕‬ ‫𝟎𝟏‬

‫𝟎‬ ‫𝟏‬ ‫𝟐‬ ‫𝟑‬ ‫𝟒‬ ‫𝟓‬ ‫𝟔‬ ‫𝟕‬ ‫𝟖‬ ‫𝟗‬

‫السؤال الثاني‪:‬‬
‫قارن بين خوارزميات الفرز الداخلي وفق الجدول اآلتي‪:‬‬

‫الزمن‬ ‫عدد التبديالت‬ ‫عدد المقارنات‬ ‫اسم الخوارزمية‬

‫الفرز الفقاعي‬

‫الفرز باالختيار‬

‫الفرز بالضم‬

‫الحل‪:‬‬

‫الزمن‬ ‫عدد التبديالت‬ ‫عدد المقارنات‬ ‫اسم الخوارزمية‬

‫) 𝟐𝑵(𝑶‬ ‫) 𝟐𝑵(𝑶‬ ‫) 𝟐𝑵(𝑶‬


‫الفرز الفقاعي‬
‫) 𝟐𝑵(𝑶‬ ‫)𝑵(𝑶‬ ‫) 𝟐𝑵(𝑶‬ ‫الفرز باالختيار‬

‫) 𝟐𝑵(𝑶‬ ‫ال يوجد تبديل‬ ‫) 𝟐𝑵(𝑶‬ ‫الفرز بالضم‬


‫ً‬
‫دائما وإنما نسخ‬
‫وهو أسرع من‬
‫التبديل‬

‫‪11‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬

‫السؤال الثالث‪:‬‬
‫بفرض لدينا الشجرة اآلتية من النوع 𝟑 ‪ 𝟐 −‬والمطلوب‪:‬‬
‫وضح بالرسم كيف يتم إدخال عنصر جديد وليكن العدد 𝟒𝟐 في هذه الشجرة‪.‬‬

‫𝟎𝟓‬ ‫𝟓𝟖‬

‫𝟏𝟐‬ ‫𝟓𝟐‬
‫𝟓𝟕‬ ‫𝟓‬

‫𝟎𝟐‬ ‫𝟎𝟗‬
‫𝟎𝟕‬ ‫𝟎𝟖‬
‫𝟐𝟐‬ ‫𝟑𝟐‬ ‫𝟎𝟎𝟏‬
‫𝟎𝟑‬
‫𝟒𝟐‬

‫الحل‪:‬‬

‫‪)a‬‬

‫𝟎𝟓‬

‫𝟏𝟐‬ ‫𝟓𝟐‬ ‫𝟓𝟖‬

‫𝟎𝟐‬ ‫𝟓𝟗‬
‫𝟓𝟕‬
‫𝟎𝟑‬
‫𝟐𝟐‬ ‫𝟑𝟐‬
‫𝟎𝟗‬
‫𝟎𝟕‬
‫𝟎𝟖‬ ‫𝟎𝟎𝟏‬

‫‪12‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬
‫𝟎𝟓‬ ‫‪)b‬‬

‫𝟑𝟐‬ ‫𝟓𝟖‬

‫𝟏𝟐‬ ‫𝟓𝟐‬ ‫𝟓𝟗‬

‫𝟓𝟕‬
‫𝟎𝟐‬ ‫𝟒𝟐‬
‫𝟎𝟗‬
‫𝟐𝟐‬ ‫𝟎𝟑‬ ‫𝟎𝟕‬ ‫𝟎𝟎𝟏‬
‫𝟎𝟖‬

‫السؤال الرابع‪:‬‬
‫بفرض لدينا الصنف 𝒆𝒆𝒓𝑻 𝒔𝒔𝒂𝒍𝒄 والذي يمثل الشجرة الثنائية ‪ ،‬حيث يحتوي على متحول وحيد هو‬
‫𝒕𝒐𝒐𝒓من نوع 𝒆𝒅𝒐𝑵 (عقدة) أما الصنف 𝒆𝒅𝒐𝑵 𝒔𝒔𝒂𝒍𝒄 والذي يمثل عقد الشجرة الثنائية ‪ ،‬فهو‬
‫يحتوي على أربع متحوالت هي‪:‬‬
‫{𝒆𝒅𝒐𝑵 𝒔𝒔𝒂𝒍𝑪‬
‫)𝒚𝒆𝒌( 𝒎𝒆𝒕𝒊 𝒂𝒕𝒂𝒅‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒊𝒏𝒕 𝒊𝑫𝒂𝒕𝒂; //‬‬
‫𝒂𝒕𝒂𝒅 𝒓𝒆𝒉𝒕𝒐‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒅𝒐𝒖𝒃𝒍𝒆 𝒅𝑫𝒂𝒕𝒂 ; //‬‬
‫𝒅𝒍𝒊𝒉𝒄 𝒕𝒇𝒆𝒍 𝒔‪𝒑𝒖𝒃𝒍𝒊𝒄 𝑵𝒐𝒅𝒆 𝒍𝒆𝒇𝒕𝑪𝒉𝒊𝒍𝒅; //𝒕𝒉𝒊𝒔 𝒊𝒔 𝒕𝒉𝒆 𝒏𝒐𝒅𝒆′‬‬
‫𝒅𝒍𝒊𝒉𝒄 𝒕𝒉𝒈𝒊𝒓 𝒔‪𝒑𝒖𝒃𝒍𝒊𝒄 𝑵𝒐𝒅𝒆 𝒓𝒊𝒈𝒉𝒕𝑪𝒉𝒊𝒍𝒅; //𝒕𝒉𝒊𝒔 𝒊𝒔 𝒕𝒉𝒆 𝒏𝒐𝒅𝒆′‬‬
‫}‬
‫والمطلوب‪ :‬اكتب بلغة 𝒂𝒗𝒂𝒋 الطرق التالية‬
‫‪ .1‬طريقة إضافة عقدة للشجرة الثنائية‬
‫)𝒅𝒅 𝒆𝒍𝒃𝒖𝒐𝒅 ‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒗𝒐𝒊𝒅 𝒊𝒏𝒔𝒆𝒓𝒕(𝒊𝒏𝒕 𝒊𝒅,‬‬
‫‪ .2‬طريقة البحث عن عقدة ضمن الشجرة الثنائية‬
‫)𝒚𝒆𝒌 𝒕𝒏𝒊(𝒅𝒏𝒊𝒇 𝒆𝒅𝒐𝑵 𝒄𝒊𝒍𝒃𝒖𝒑‬
‫الحل‪:‬‬
‫‪.1‬‬
‫{)𝒅𝒅 𝒆𝒍𝒃𝒖𝒐𝒅 ‪𝒑𝒖𝒃𝒍𝒊𝒄 𝒗𝒐𝒊𝒅 𝒊𝒏𝒔𝒆𝒓𝒕(𝒊𝒏𝒕 𝒊𝒅,‬‬
‫‪𝑵𝒐𝒅𝒆 𝒏𝒆𝒘𝑵𝒐𝒅𝒆 = 𝒏𝒆𝒘𝑵𝒐𝒅𝒆():‬‬
‫;𝒅𝒊 = 𝒂𝒕𝒂𝑫𝒊 ‪𝒏𝒆𝒘𝑵𝒐𝒅𝒆.‬‬
‫;𝒅𝒅 = 𝒂𝒕𝒂𝑫𝒅 ‪𝒏𝒆𝒘𝑵𝒐𝒅𝒆.‬‬
‫)𝒍𝒍𝒖𝒏 == 𝒕𝒐𝒐𝒓(𝒇𝒊‬
‫{‬
‫;𝒆𝒅𝒐𝑵𝒘𝒆𝒏 = 𝒕𝒐𝒐𝒓‬
‫}‬

‫‪13‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫{𝒆𝒔𝒍𝒆‬
‫ر‬
‫;𝒕𝒐𝒐𝒓 = 𝒕𝒏𝒆𝒓𝒓𝒖𝒄 𝒆𝒅𝒐𝑵‬
‫;𝒕𝒏𝒆𝒓𝒂𝒑 𝒆𝒅𝒐𝑵‬
‫{)𝒆𝒖𝒓𝒕(𝒆𝒍𝒊𝒉𝒘‬
‫;𝒕𝒏𝒆𝒓𝒓𝒖𝒄 = 𝒕𝒏𝒆𝒓𝒂𝒑‬
‫{)𝒂𝒕𝒂𝑫𝒊 ‪𝒊𝒇(𝒊𝒅 < 𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫;𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝒄𝒖𝒓𝒓𝒆𝒏𝒕 = 𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫{)𝒍𝒍𝒖𝒏 == 𝒕𝒏𝒆𝒓𝒓𝒖𝒄(𝒇𝒊‬
‫;𝒆𝒅𝒐𝑵𝒘𝒆𝒏 = 𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝒑𝒂𝒓𝒆𝒏𝒕.‬‬
‫;𝒏𝒓𝒖𝒕𝒆𝒓‬
‫}‬
‫}‬
‫{𝒆𝒔𝒍𝒆‬
‫;𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒄𝒖𝒓𝒓𝒆𝒏𝒕 = 𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫{)𝒍𝒍𝒖𝒏 == 𝒕𝒏𝒆𝒓𝒓𝒖𝒄(𝒇𝒊‬
‫;𝒆𝒅𝒐𝑵𝒘𝒆𝒏 = 𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒑𝒂𝒓𝒆𝒏𝒕.‬‬
‫;𝒏𝒓𝒖𝒕𝒆𝒓‬
‫}‬
‫}‬
‫}‬
‫}‬
‫}‬
‫‪.2‬‬
‫{)𝒚𝒆𝒌 𝒕𝒏𝒊(𝒅𝒏𝒊𝒇 𝒆𝒅𝒐𝑵 𝒄𝒊𝒍𝒃𝒖𝒑‬
‫;𝒕𝒐𝒐𝒓 = 𝒕𝒏𝒆𝒓𝒓𝒖𝒄 𝒆𝒅𝒐𝑵‬
‫{)𝒚𝒆𝒌 = !𝒂𝒕𝒂𝑫𝒊 ‪𝒘𝒉𝒊𝒍𝒆(𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫)𝒂𝒕𝒂𝑫𝒊 ‪𝒊𝒇(𝒌𝒆𝒚 < 𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫;𝒅𝒍𝒊𝒉𝑪𝒕𝒇𝒆𝒍 ‪𝒄𝒖𝒓𝒓𝒆𝒏𝒕 = 𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫𝒆𝒔𝒍𝒆‬
‫;𝒅𝒍𝒊𝒉𝑪𝒕𝒉𝒈𝒊𝒓 ‪𝒄𝒖𝒓𝒓𝒆𝒏𝒕 = 𝒄𝒖𝒓𝒓𝒆𝒏𝒕.‬‬
‫)𝒍𝒍𝒖𝒏 == 𝒕𝒏𝒆𝒓𝒓𝒖𝒄(𝒇𝒊‬
‫;𝒍𝒍𝒖𝒏 𝒏𝒓𝒖𝒕𝒆𝒓‬
‫}‬
‫;𝒕𝒏𝒆𝒓𝒓𝒖𝒄 𝒏𝒖𝒓𝒕𝒆𝒓‬
‫}‬

‫‪14‬‬
‫خوارزميات ‪2‬‬
‫حل دورات‬

‫ر‬

‫‪15‬‬ ‫‪0‬‬

You might also like