ผลต่างระหว่างรุ่นของ "ขั้นตอนวิธีแบบห่อของขวัญ"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
DeNoctua (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
DeNoctua (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
บรรทัด 1:
'''ขั้นตอนวิธีแบบห่อของขวัญ''' ([[ภาษาอังกฤษ|อังกฤษ]]: Gift Wrapping Algorithm) คือวิธีในทาง [[เรขาคณิตเชิงคำนวณ]] ที่ใช้ในการคำนวณหา [[เปลือกนูนคอนเวกซ์ฮัลล์]]
 
== ประวัติ ==
ขั้นตอนวิธีแบบห่อของขวัญมีชื่อเรียกอีกอย่างหนึ่งว่า '''การเดินแถวของจาร์วิส''' เพื่อเป็นเกียรติแก่ '''R.A. Jarvis''' ผู้นำขั้นตอนวิธีนี้ออกเผยแพร่ในปี พ.ศ. 2516 (หลังจาก [[โรนัลด์ เกรแฮม]] นำเสนอ[[เกรแฮมสแกน]]หนึ่งปี)
== ขั้นตอนวิธี ==
[[Image:Jarvis march convex hull algorithm diagram.svg|thumb|280px|right|การใช้ขั้นตอนวิธีการห่อของขวัญในการหาเปลือกนูนคอนเวกซ์ฮัลล์]]
 
เริ่มจากให้ i = 0 และให้ p0 คือจุดสุดขีดจุดหนึ่ง ซึ่งทราบแน่นอนว่าอยู่บนเปลือกนูนคอนเวกซ์ฮัลล์ เช่น จุดบนสุด จากนั้น เลือกจุด Pi+1 โดย Pi+1 คือจุดที่ให้มุมกว้างที่สุดเทียบกับ Pi (อาจเป็นทิศทวนเข็มนาฬิกาหรือตามเข็มนาฬิกาก็ได้) ทำซ้ำเช่นนี้ไปเรื่อยๆ จนกว่าจะได้ ph = p0 คือวนกลับมาจนครบจุดเริ่มต้นนั่นเอง ([http://www.cs.princeton.edu/courses/archive/spr10/cos226/demo/ah/JarvisMarch.html ])
== รหัสเทียม ==
 
บรรทัด 14:
repeat
P[i] = pointOnHull // เพิ่มค่า pi ลงไปในอาเรย์ของคำตอบ P ช่องที่ i
endpoint = S[0] // ตั้งค่าเริ่มต้นสำหรับการหาจุดต่อไปบนเปลือกนูนคอนเวกซ์ฮัลล์
for j from 1 to |S|-1 // ตรวจสอบทุกจุด
if (pointOnHull.angle(S[j]) > pointOnHull.angle(endpoint))
บรรทัด 23:
 
== ประสิทธิภาพ ==
เนื่องจากเวลาในการหามุมสำหรับแต่ละจุดเป็นค่าคงที่ (O(1)) และการเปรียบเทียบมุมสำหรับทุกคู่จุดจะใช้เวลา O(n) สรุปว่าเราสามารถหาจุดๆหนึ่งบนเปลือกนูนคอนเวกซ์ฮัลล์ได้ภายในเวลา O(n) และหากมีจุดบนเปลือกนูนเป็นจำนวนคอนเวกซ์ฮัลล์เป็นจำนวน h จุดแล้ว สรุปได้ว่าการเดินแถวของจาร์วิสจะสามารถหาจุดทุกๆจุดบนเปลือกนูนคอนเวกซ์ฮัลล์ได้ภายในเวลา O(nh)
 
== การนำไปใช้ ==
โดยปกติแล้ว การเดินแถวของจาร์วิสนั้นจะสามารถทำงานได้เร็วกว่า[[เกรแฮมสแกน]] โดยกรณีที่เลวที่สุดคือกรณีที่ทุกจุดอยู่บนคอนเวกซ์ฮัลล์ เช่น รูปวงกลม
 
== แหล่งข้อมูลอื่น ==
* [http://www.cse.unsw.edu.au/~lambert/java/3d/giftwrap.html ขั้นตอนวิธีการห่อของขวัญในระดับตั้งแต่สองมิติขึ้นไป]
* [http://www.cse.unsw.edu.au/~lambert/java/3d/hull.html แบบจำลองเปลือกนูนคอนเวกซ์ฮัลล์]
* [http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/ConvexHull/jarvisMarch.htm ข้อมูลเพิ่มเติมจากมหาวิทยาลัยเคนท์สเตท]
 
[[หมวดหมู่:โพลีโทป]]