ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทยปัญหาการค้นหาด้วยพละกำลังเยี่ยงควายถึก/เฉลยข้อ 5"
ไปยังการนำทาง
ไปยังการค้นหา
Aoy (คุย | มีส่วนร่วม) |
Aoy (คุย | มีส่วนร่วม) |
||
แถว 5: | แถว 5: | ||
แนวคิด ข้อนี้วัตถุที่เราต้องการหาคือลำดับย่อย ตำแหน่งเริ่มต้น <math>i \,</math>และตำแหน่งสุดท้าย <math>j \,</math>ในลำดับที่ให้มา โดยที่ <math>i \leq j \,</math>หรือคือช่วงที่เราเรียนกันไปแล้วในห้องเรียนนั่นเอง และเงื่อนไข คือต้องเป็นลำดับเลขคณิต(ที่มีความยาวมากที่สุด) ดังนั้นสิ่งที่อัลกอริทึมของเราต้องทำ คือหยิบช่วงแต่ละช่วง (ลำดับย่อยแต่ละลำดับ) มาดู แล้วดูว่ามันเป็นลำดับเลขคณิตหรือไม่ ถ้าใช่ก็ตรวจสอบอีกว่า มันเป็นลำดับเลขคณิตที่เราเคยรู้จักและยาวกว่าหรือไม่ ถ้ายาวกว่าก็เปลี่ยนมาจำลำดับย่อยใหม่นี้ | แนวคิด ข้อนี้วัตถุที่เราต้องการหาคือลำดับย่อย ตำแหน่งเริ่มต้น <math>i \,</math>และตำแหน่งสุดท้าย <math>j \,</math>ในลำดับที่ให้มา โดยที่ <math>i \leq j \,</math>หรือคือช่วงที่เราเรียนกันไปแล้วในห้องเรียนนั่นเอง และเงื่อนไข คือต้องเป็นลำดับเลขคณิต(ที่มีความยาวมากที่สุด) ดังนั้นสิ่งที่อัลกอริทึมของเราต้องทำ คือหยิบช่วงแต่ละช่วง (ลำดับย่อยแต่ละลำดับ) มาดู แล้วดูว่ามันเป็นลำดับเลขคณิตหรือไม่ ถ้าใช่ก็ตรวจสอบอีกว่า มันเป็นลำดับเลขคณิตที่เราเคยรู้จักและยาวกว่าหรือไม่ ถ้ายาวกว่าก็เปลี่ยนมาจำลำดับย่อยใหม่นี้ | ||
+ | |||
+ | จากแนวคิดข้างต้น เขียนเป็น pseudocode ได้ดังนี้ | ||
+ | ABS(x,y) | ||
+ | |||
+ | :if (x-y < 0) | ||
+ | |||
+ | :: return ((-1).(x-y)) | ||
+ | |||
+ | :: return(x-y]) | ||
+ | |||
+ | CHECK_ARITH(A,i,j) | ||
+ | |||
+ | : k = ABS(A[i],A[i+1]) | ||
+ | |||
+ | : for k=i+1 to k=j | ||
+ | |||
+ | :: if(ABS(A[k],A[k+1] != k)) | ||
+ | |||
+ | ::: retrun (0) | ||
+ | |||
+ | :: return(1) | ||
== ข้อย่อย 2 == | == ข้อย่อย 2 == |
รุ่นแก้ไขเมื่อ 08:28, 18 สิงหาคม 2552
ข้อย่อย 1
อินพุต: ลำดับของจำนวนเต็มที่มีความยาว
เอาพุต: ลำดับย่อยของลำดับที่เป็นอินพุตที่มีความยาวมากที่สุด และเป็นลำดับเลขคณิต
แนวคิด ข้อนี้วัตถุที่เราต้องการหาคือลำดับย่อย ตำแหน่งเริ่มต้น และตำแหน่งสุดท้าย ในลำดับที่ให้มา โดยที่ หรือคือช่วงที่เราเรียนกันไปแล้วในห้องเรียนนั่นเอง และเงื่อนไข คือต้องเป็นลำดับเลขคณิต(ที่มีความยาวมากที่สุด) ดังนั้นสิ่งที่อัลกอริทึมของเราต้องทำ คือหยิบช่วงแต่ละช่วง (ลำดับย่อยแต่ละลำดับ) มาดู แล้วดูว่ามันเป็นลำดับเลขคณิตหรือไม่ ถ้าใช่ก็ตรวจสอบอีกว่า มันเป็นลำดับเลขคณิตที่เราเคยรู้จักและยาวกว่าหรือไม่ ถ้ายาวกว่าก็เปลี่ยนมาจำลำดับย่อยใหม่นี้
จากแนวคิดข้างต้น เขียนเป็น pseudocode ได้ดังนี้ ABS(x,y)
- if (x-y < 0)
- return ((-1).(x-y))
- return(x-y])
CHECK_ARITH(A,i,j)
- k = ABS(A[i],A[i+1])
- for k=i+1 to k=j
- if(ABS(A[k],A[k+1] != k))
- retrun (0)
- return(1)