วิธีการหาพื้นที่สูงสุดสี่เหลี่ยมผืนผ้าในรูปหลายเหลี่ยมนูนออกมา?


21

ในบทความนี้เรากำลังมองหาขั้นตอนวิธีการ / ความคิดเกี่ยวกับวิธีการหาสิ่งที่สูงสุดในพื้นที่สี่เหลี่ยมผืนผ้า ภายในรูปหลายเหลี่ยมนูน

ในรูปต่อไปนี้ตัวเลขเป็นพื้นที่ของรูปสี่เหลี่ยมผืนผ้าที่พอดี ดังที่แสดงสี่เหลี่ยมที่ต้องการอาจแตกต่างกันในแต่ละมิติและสามารถอยู่ในมุมใดก็ได้

แก้ไข:

เราไม่มีความคิดที่ชัดเจนว่าจะจัดการกับปัญหาที่กล่าวถึงได้อย่างไรดังนั้นเราจึงถามที่นี่ อย่างไรก็ตามเราคาดว่าพื้นที่สี่เหลี่ยมผืนผ้าสูงสุดอาจเป็นหนึ่งในนั้นที่มีการจัดตำแหน่งขอบหนึ่งบน (ไม่จำเป็นต้องเป็นขอบความยาวเท่ากันแน่นอน) เป็นรูปหลายเหลี่ยม

ป้อนคำอธิบายรูปภาพที่นี่


1
คุณสามารถระบุซอฟต์แวร์ที่คุณใช้อยู่ได้หรือไม่? นอกจากนี้โพสต์งานของคุณไกลขนาดนี้หรือวิธีการทั่วไปที่คุณทำงานเพื่อแก้ไขปัญหานี้ บางทีบางคนสามารถปรับปรุงสิ่งที่คุณทำไปแล้ว จากประสบการณ์ของฉันที่จะทำให้ได้คำตอบที่มีประโยชน์มากกว่าแค่โพสต์คำถาม "หมดสติ"
Martin

1
เกี่ยวข้องอย่างใกล้ชิด: gis.stackexchange.com/questions/22895/… .
whuber

@ ซอฟต์แวร์มาร์ติน: การเขียนโปรแกรมในPythonนั้นจะอยู่ในFortranกรณีที่จำเป็น เราคาดเดาว่าจากการโพสต์ก่อนหน้าของเราที่นี่ยังกล่าวถึงข้างต้นโดยwhuberที่อาจเป็นรูปสี่เหลี่ยมผืนผ้าที่มีขอบเหมือนกันกับรูปหลายเหลี่ยมจะเป็นคำตอบ
นักพัฒนา

1
ปัญหาของคุณเป็นที่น่าสนใจจริงๆหนึ่งและฉันคิดว่าฉันจัดการเพื่อหาขั้นตอนวิธีการแก้ที่นี่และที่นี่
nickves

1
@ nickves ขอบคุณสำหรับลิงค์ คุณช่วยกรุณาใส่ข้อมูลเหล่านี้เป็นคำตอบพร้อมกับอธิบายขั้นตอนวิธีเล็กน้อยได้ไหม? มันอาจจะเป็นคำตอบที่ดีที่จะได้รับการยอมรับ
นักพัฒนา

คำตอบ:


4

บางบันทึกย่อใหญ่เกินไปที่จะใส่ความคิดเห็น (แม้ว่านี่จะไม่แนะนำอัลกอริทึมที่ชัดเจน):

Punch line (แก้ไข) : อย่างน้อยสองจุดยอดของสี่เหลี่ยมพื้นที่สูงสุดต้องอยู่ในขอบเขตของรูปหลายเหลี่ยม (เช่นตามขอบหรือที่จุดยอด) และถ้าสี่เหลี่ยมพื้นที่สูงสุดไม่ได้เป็นสี่เหลี่ยมก็ต้องมีจุดยอดอย่างน้อยสามจุดบนขอบเขตของรูปหลายเหลี่ยม

ฉันพิสูจน์ให้ตัวเองในสี่ขั้นตอน:

หมายเหตุ # 1 : จุดสุดยอดอย่างน้อยหนึ่งจุดของสี่เหลี่ยมผืนผ้าพื้นที่สูงสุดจะอยู่ในขอบเขตของรูปหลายเหลี่ยมเสมอ นี่เป็นสิ่งที่ชัดเจนมาก แต่การพิสูจน์อาจเป็นเช่นนี้ (ตามความขัดแย้ง): สมมติว่าคุณมีสี่เหลี่ยมผืนผ้า "สูงสุด" โดยไม่มีจุดสุดยอดในขอบเขตของรูปหลายเหลี่ยม นั่นหมายความว่าอย่างน้อยจะมีห้องเล็ก ๆ อยู่รอบ ๆ แต่ละจุดยอด ดังนั้นคุณสามารถขยายสี่เหลี่ยมผืนผ้าของคุณสักเล็กน้อยได้

หมายเหตุ # 2 : อย่างน้อยสองจุดยอดของสี่เหลี่ยมพื้นที่สูงสุดจะอยู่ในขอบเขตของรูปหลายเหลี่ยมเสมอ หลักฐานอาจเป็นเช่นนี้ (อีกครั้งโดยการขัดแย้ง): สมมติว่าคุณมีรูปสี่เหลี่ยมผืนผ้า "สูงสุด" โดยมีจุดยอดเพียงจุดเดียวบนขอบเขต (รับประกันโดยหมายเหตุ # 1) พิจารณาทั้งสองขอบที่ไม่ติดกับจุดสุดยอดนั้น เนื่องจากปลายทางของพวกเขาไม่ได้อยู่ในขอบเขตจึงมีห้องเล็ก ๆ รอบ ๆ ดังนั้นทั้งสองขอบนั้นอาจจะ "อัด" เล็กน้อยขยายพื้นที่ของรูปหลายเหลี่ยมและขัดแย้งกับค่าสูงสุดของมัน

หมายเหตุ # 3 : มีจุดยอดตรงข้ามแนวทแยงมุมสองจุดของพื้นที่สี่เหลี่ยมผืนผ้าสูงสุดที่วางอยู่บนขอบเขตของรูปหลายเหลี่ยม (เรารู้จากหมายเหตุ # 2 ว่ามีอย่างน้อยสองตัว แต่ไม่จำเป็นว่าพวกมันจะอยู่ตรงข้ามกัน) แต่อีกครั้งด้วยความขัดแย้งถ้ามีเพียงสองจุดยอดที่อยู่ติดกันแล้วขอบตรงข้าม อยู่ในขอบเขต) สามารถอัดขึ้นรูปได้เล็กน้อยเพิ่มพื้นที่ของรูปสี่เหลี่ยมผืนผ้าและขัดแย้งกับความสูงสุดของมัน

หมายเหตุ # 4 : (แก้ไข)หากสี่เหลี่ยมผืนผ้าพื้นที่สูงสุดไม่ใช่สี่เหลี่ยมจตุรัสสามอันนั้นจะอยู่บนขอบเขตของรูปหลายเหลี่ยม

ในการพิสูจน์สมมุติว่าไม่ใช่กรณีดังกล่าวนั่นคือสี่เหลี่ยมผืนผ้าพื้นที่สูงสุดไม่ใช่สี่เหลี่ยม แต่มีจุดยอดสองจุดเท่านั้นที่อยู่ในขอบเขตของรูปหลายเหลี่ยม ฉันจะแสดงวิธีการสร้างสี่เหลี่ยมที่ใหญ่กว่าขัดแย้งกับความจริงสูงสุด

โทรจุดของสี่เหลี่ยมผืนผ้าA, B, และC Dโดยไม่สูญเสียความคิดทั่วไปสมมติว่าBและDเป็นสองสิ่งที่อยู่ในขอบเขตรูปหลายเหลี่ยม ตั้งแต่AและCอยู่ด้านในของรูปหลายเหลี่ยมมีห้องเลื้อยอยู่รอบตัว (แสดงเป็นวงกลมรอบ ๆAและCในภาพด้านล่าง) ตอนนี้วาดวงกลมรอบ ๆ สี่เหลี่ยมและจุดเลื่อนAและCรอบ ๆ วงกลมเล็กน้อยด้วยจำนวนเท่ากัน (เพื่อสร้างA'และC'ตามภาพด้านล่าง) เพื่อให้สี่เหลี่ยมผืนผ้าใหม่A'BC'Dเป็นสี่เหลี่ยมจัตุรัสมากกว่าสี่เหลี่ยมจัตุรัสดั้งเดิม กระบวนการนี้สร้างสี่เหลี่ยมผืนผ้าใหม่ที่อยู่ภายในรูปหลายเหลี่ยมต้นฉบับและมีพื้นที่ที่ใหญ่กว่า นี่เป็นข้อขัดแย้งดังนั้นการพิสูจน์จึงเสร็จสิ้น

การสร้างรูปสี่เหลี่ยมผืนผ้าใหม่

ในการเชื่อหลักฐานนั้นคุณต้องโน้มน้าวตัวเองว่าพื้นที่ของสี่เหลี่ยมที่ถูกจารึกไว้ในวงกลมนั้นเพิ่มขึ้นเมื่อมันกลายเป็น "สี่เหลี่ยมจัตุรัสมากขึ้น" (เช่นความแตกต่างระหว่างความยาวของขอบจะเล็กลง) คุณต้องใช้รูปหลายเหลี่ยมเพื่อให้นูนเพื่อให้บรรทัดใหม่มีอยู่ภายใน และอาจมีรายละเอียดเล็ก ๆ น้อย ๆ อื่น ๆ ที่ได้รับการกวาดใต้พรม แต่ฉันค่อนข้างแน่ใจว่าพวกเขาทั้งหมดทำงานออก


หมายเหตุ # 4 เป็นคาวเพราะ "wiggling" จุดยอดสองจุดอื่น ๆ จะสร้างรูปสี่เหลี่ยมที่ไม่ใช่
whuber

จริง อย่างไรก็ตามการสร้างภาพตัวอย่างที่ 4 ของคุณไม่ถูกต้อง (ถ้าจุดยอด 2 จุดอยู่บนขอบเขตรูปหลายเหลี่ยมคุณจะไม่สามารถขยายได้อีก) ฉันไม่สามารถอธิบายได้อย่างแม่นยำว่าทำได้อย่างไร (ลองเขียนความคิดเห็น แต่ยุ่งเกินไป) แต่ฉันเชื่อว่าคุณพูดถูก
Saryk

ฉันเชื่อว่ามีตัวอย่างที่ต้องบันทึก # 4 สิ่งที่ฉันได้พบใช้การคำนวณที่เกี่ยวข้องเพื่อแสดงแม้ว่า; ที่ง่ายที่สุดคือการก่อกวนของรูปหกเหลี่ยมที่ผิดปกติ (สี่เหลี่ยมจัตุรัสที่มีสองมุมตรงข้ามตัดออกเล็กน้อย)
whuber

ตกลงกันว่าหมายเหตุ 4 เป็นสิ่งที่คาว ฉันจะลองดูในเย็นวันนี้และแก้ไขหรือลบมัน
csd

+1 นั่นคือการแก้ปัญหาที่ดีของความยากลำบาก ขอบคุณสำหรับการแก้ไข!
whuber

3

ฉันได้ทำภาพร่างที่รวดเร็วและน่ากลัวเกี่ยวกับโน้ตสีเขียวของคุณในคำถาม ฉันไม่สามารถโพสต์เป็นความคิดเห็นได้ดังนั้นฉันจึงต้องเขียนคำตอบแม้ว่าจะไม่ใช่
ฉันเชื่อว่าในภาพด้านล่างเรามีสี่เหลี่ยมผืนผ้าพื้นที่สูงสุด (ไม่สมบูรณ์มันเป็นเพียงแค่ภาพร่างที่สร้างขึ้นบน Paint เพื่อให้ความคิด) และฉันไม่คิดว่าคุณจะสามารถหาภาพที่ใหญ่กว่าซึ่งจะมีด้านร่วมกับ ขอบของ plygon สีดำ ...
อย่างไรก็ตามฉันอาจผิดในกรณีที่คุณมีคำขอโทษของฉันทั้งหมด
ร่างด่วนที่ฉันทำบน Paint


3
จุดดี (+1) มีตัวอย่างที่เรียบง่ายกว่ามากลองพิจารณาปัญหาการจารึกสี่เหลี่ยมมุมฉากสูงสุดภายในแปดเหลี่ยมปกติ เป็นเรื่องง่ายที่จะเห็น (และง่ายต่อการพิสูจน์โดยการหาสี่เหลี่ยมจัตุรัสสูงสุดภายในวงกลมของรูปแปดเหลี่ยม) ที่มุมของการแก้ปัญหานั้นตรงกับจุดยอดสลับของรูปแปดเหลี่ยม
whuber

อันที่จริง (ตอนนี้ฉันมีข้อสงสัยอย่างมาก) สี่เหลี่ยมผืนผ้าเล็กที่สุดภายนอก (อันจากโพสต์นี้ ) ของรูปหลายเหลี่ยมนี้ไม่ได้มีการวางแนวเดียวกับด้านใดด้านหนึ่งใช่ไหม? (ฉันจะเห็นมันวางแนวเดียวกับสี่เหลี่ยมสีแดงของฉัน)
Saryk

3
รูปหลายเหลี่ยมนั้นไม่นูน แต่อย่างใด คำถามเดิมไม่ จำกัด เฉพาะรูปหลายเหลี่ยมนูน
csd

2
@csd นั่นเป็นจุดที่ดี แต่ Saryk ยังคงถูกต้องตามตัวอย่างการแสดงของฉัน Saryk ไม่มีปัญหากับขอบเขตพื้นที่ต่ำสุดสี่เหลี่ยมผืนผ้า: มันง่ายต่อการพิสูจน์ (อย่างจริงจัง) ว่ามันจะต้องมีด้านข้างของลำตัวนูน ฉันเชื่อว่าพื้นที่สูงสุดที่ถูกจารึกไว้สี่เหลี่ยมผืนผ้า (ของรูปหลายเหลี่ยมนูน) ต้องการเพียงสองจุดยอดสัมผัสขอบเขตไม่มาก
whuber

2

ขั้นตอนวิธีการอื่น ๆ O(log n)ส่วนใหญ่พบในพื้นที่สูงสุดที่เป็นเส้นตรงสี่เหลี่ยมจารึกไว้ในรูปหลายเหลี่ยมนูนและมีความซับซ้อนของ ฉันไม่คิดว่าคุณเดาว่ารูปหลายเหลี่ยมพื้นที่สูงสุดถูกจัดชิดกับด้านใดด้านหนึ่งถูกต้องเพราะสิ่งที่คุณต้องทำคือหมุนรูปหลายเหลี่ยมnครั้งทำให้เกิดความซับซ้อนO(n log n)และในการวิจัยสั้น ๆ ของฉันฉันไม่สามารถ ค้นหาสิ่งที่บอกว่ามันเป็นเรื่องง่าย

อย่างไรก็ตามกระดาษทรงสี่เหลี่ยมที่ถูกจารึกไว้ที่ใหญ่ที่สุดในรูปหลายเหลี่ยมนูนโดย Knauer และ al. อธิบายอัลกอริทึมการประมาณค่าซึ่งจะช่วยให้คุณใกล้กับคำตอบที่ถูกต้อง

ดีที่สุดเท่าที่ฉันเข้าใจอัลกอริธึมมันสร้างขึ้นบนหนึ่งในรูปหลายเหลี่ยมพื้นที่แกนสูงสุดที่รู้จักกันแล้วสุ่มตัวอย่างจุดภายในพื้นที่ polyon สร้างหลายแกนจากตัวอย่างสุ่มเหล่านั้น iterates มากกว่าแกนเหล่านั้นและใช้แกน อัลกอริทึมที่กำหนดให้กับแต่ละคนแล้วส่งกลับสี่เหลี่ยมที่ใหญ่ที่สุดในชุดนั้น


อาจมีการพิมพ์ผิดในประโยคแรกหรือไม่ อาจไม่สามารถมีอัลกอริทึม O (log (n)) เพราะการอ่านในพิกัดเป็นการดำเนินการ O (n) เท่านั้น!
whuber

ลิงค์นั้นตายแล้ว
อันตราย

1
@dangerousdave - พบลิงค์สำรองเป็นเวลานาน ....
lreeder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.