Page 52 - โครงสร้างข้อมูลและขั้นตอนวิธี
P. 52

2-42 โครงสร้างข้อมูลและขั้นตอนวิธี

Procedure MaxSubSequenceSum (A1, A2, …, An)

1 BEGIN	 	 /* คืน​ค่าผ​ ลลัพธ์จ​ าก​การเ​รียก​ใช้​ฟังก์ชัน​ย่อย โดยร​ ะบุ​ตำ�แหน่งเ​ริ่มแ​ ละ​สิ้นส​ ุดล​ ำ�ดับ */
2   	 RETURN  MaxSubSum             (A1,  A2,    …,  An,  1,  n)
3   END

Procedure MaxSubSum(A1, A2, …, An, Left, Right) /*ฟังก์ชนั ​ยอ่ ย เพอ่ื ​ระบุ​ตำ�แหน่ง​เริ่ม​และ​สิน้ ส​ ดุ ​ล�ำ ดับ */

1 BEGIN                                                   /* กรณีฐ​ าน ถ้าต​ ำ�แหน่ง​เริ่ม​กับส​ ิ้นส​ ุด​ลำ�ดับเ​ท่าก​ ัน */
2 IF Left = Right THEN	
3 BEGIN
4             		IEFLASELRefEt T>U0RTNHAELNef	t	           /* ถ้าจ​ ำ�นวนเต็ม​ในต​ ำ�แหน่ง​นั้นม​ ากกว่า​ศูนย์ */
5                                                         /* ให้ค​ ืนจ​ ำ�นวนเต็ม​ในต​ ำ�แหน่งน​ ั้น */
6
7             RETURN 0	                                   /* ถ้า​น้อย​กว่า​หรือเ​ท่ากับศ​ ูนย์ ให้​คืน​ศูนย์ */
8 END
9          Center := ⎣(Left + Right)/2⎦	                  /* หา​ตำ�แหน่งก​ ึ่งกลาง​ลำ�ดับ */
10 	Max/*LeเรftียSกuใ​mช้​ฟ:ัง=กM์ชันa​ยx่อSยu​ซbํ้าSเพumื่อ​ห(Aา​ค1,่า​ผAล2ร​, ว…ม,​มAากn,ท​ Lี่สeุดfข​t,อCง​ลeำ�nดteับrย​) ่อย​ทาง​ซ้าย แบบเ​วียนเ​กิด  */
11 	Max/*RเiรgียhกtS​ใชu้​ฟmังก:=์ชันM​ยa่อxยSซ​uํ้าbเพSืu่อmห​ า(​คA่า1​ผ, ลAร​2ว,ม…ม​ ,ากA​ทn,ี่สCุดข​enองteล​ rำ�+ด1ับ,ย​R่อigยhท​ tา)งข​ วา แบบ​เวียน​เกิด */

12 MaxLeftBorderSum := 0	 /* ให้​ค่า​เริ่ม​ต้น​ผลร​ วมม​ ากท​ ี่สุดใ​น​ครึ่ง​ซ้าย​ที่ม​ ี​จำ�นวนเต็ม​ตัวส​ ุดท้าย 	 */
13 LeftBorderSum := 0	 /* ให้ค​ ่า​เริ่มต​ ้นผ​ ล​รวม​ในค​ รึ่งซ​ ้าย​ที่​มี​จำ�นวนเต็ม​ตัว​สุดท้าย  */
14 FOR i := Center DOWN to Left DO
15 BEGIN	 	                         /* ลูป for เพื่อห​ าผ​ ล​รวม​มาก​ทสี่ ดุ ใ​นค​ รงึ่ ซ​ า้ ย​ท่ี​มจ​ี ำ�นวนเต็ม​ตวั ส​ ุดท้าย 	*/
16      	  LeftBorderSum :=         >LeMftBaxoLrdeeftrBSourmde+rSAuim
17      	  IF LeftBorderSum                                            THEN
18 	 	 MaxLeftBorderSum := LeftBorderSum
19 END

20 MaxRightBorderSum := /* ให้​ค่า​เริ่มต​ ้นผ​ ลร​ วมม​ าก​ที่สุดใ​น​ครึ่งข​ วาท​ ี่ม​ ีจ​ ำ�นวนเต็มต​ ัว​แรก  */
21 RightBorderSum := 0	 /* ให้ค​ ่า​เริ่มต​ ้นผ​ ล​รวมใ​นค​ รึ่งข​ วาท​ ี่ม​ ี​จำ�นวนเต็มต​ ัวแ​ รก */
22 FOR i := Center + 1 to Right DO
23 BEGIN	 	                         /* ลูป for เพื่อห​ า​ผลร​ วม​มากท​ ี่สุดใ​นค​ รึ่งข​ วา​ที่​มีจ​ ำ�นวนเต็มต​ ัวแ​ รก  */
24      	  RightBorderSum :=        >RigMhatxBRoirgdhetrBSourmde+rSAuim
25      	  IF RightBorderSum                                             THEN
26 	 	 MaxRightBorderSum := RightBorderSum
27 END
28 RETURN Max(MaxLeftSum, MaxRightSum, (MaxLeftBorderSum + MaxRightBorderSum))
    		 	 	                          	 /* คืน​ค่าม​ าก​ที่สุด​ของ​ผล​รวมล​ ำ�ดับ​ย่อยท​ ั้งส​ ามต​ ำ�แหน่ง  */
29 END
   47   48   49   50   51   52   53   54   55   56   57