ตรวจจับรูปหลายเหลี่ยมเกือบสองชนิดได้ง่าย


22

ฉันสนใจในความซับซ้อนของการตัดสินใจว่ารูปหลายเหลี่ยมที่ไม่ใช่แบบง่ายนั้นให้ความเรียบง่ายเกือบทั้งสองอย่างเป็นทางการหรือไม่: ไม่ใช่แบบง่ายๆหรือแบบไขว้กัน เนื่องจากข้อกำหนดเหล่านี้ยังไม่เป็นที่รู้จักอย่างกว้างขวางให้ฉันเริ่มต้นด้วยคำจำกัดความบางอย่าง

  • Pp0,p1,p2,,pn1pipipi+1modn

  • รูปหลายเหลี่ยมนั้นง่ายถ้าจุดยอดทั้งหมดแตกต่างกันและขอบตัดกันที่จุดปลายเท่านั้น รูปหลายเหลี่ยมนั้นเรียบง่ายถ้ามันเป็นโฮมโมมอร์ฟิคกับวงกลมและขอบทุกด้านมีความยาวเป็นบวก อย่างไรก็ตามโดยทั่วไปแล้วจุดยอดและขอบของรูปหลายเหลี่ยมอาจตัดกันโดยพลการหรืออาจเกิดขึ้นพร้อมกันก็ได้ 1n

  • พิจารณาเส้นทางรูปหลายเหลี่ยมและที่จุดตัดเป็นจุดย่อยทั่วไปของทั้งสอง (อาจเป็นจุดเดียว) เราบอกว่าและข้ามถ้าปลายทางของพวกเขาสำรองในขอบเขตของพื้นที่ใกล้เคียงที่พบ subpath ที่B รูปหลายเหลี่ยมเป็นตัวเองข้ามถ้ามันมีสอง subpaths ข้ามและ ที่ไม่ใช่ตัวเองข้ามเป็นอย่างอื่น 2ABAB A(0),B(0),A(1),B(1)AB

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

ตัวอย่างเช่นพิจารณาหกจุดแสดงด้านล่างa,b,p,q,x,y

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

  • รูปหลายเหลี่ยมนั้นง่าย ดูรูปด้านซ้ายabpqyz

  • รูปหลายเหลี่ยมง่ายนิดหน่อย; รูปกลางแสดงรูปหลายเหลี่ยมแบบง่ายที่อยู่ใกล้เคียง อย่างไรก็ตามรูปหลายเหลี่ยมนี้ไม่ง่ายเพราะมันเข้าชมสามครั้งpapbpqyqzqp

  • รูปหลายเหลี่ยมเป็นการข้ามตนเองเนื่องจาก subpathsและ cross ดูตัวเลขที่เหมาะสมสำหรับสัญชาตญาณบางอย่างpapbpqzqyqbpqzyqpa

  • ในที่สุดรูปหลายเหลี่ยม (ซึ่งลมสองรอบรูปหลายเหลี่ยมกลาง) ไม่ข้ามตัวเอง แต่มันไม่ง่ายอย่างอ่อนแอ สัญชาตญาณจำนวนการเปลี่ยนของรูปหลายเหลี่ยมนี้เป็นในขณะที่จำนวนเลี้ยวง่ายเหลี่ยมใด ๆ จะต้อง1 (การพิสูจน์อย่างเป็นทางการต้องมีการวิเคราะห์เคสบางส่วนส่วนหนึ่งเนื่องจากจำนวนการหมุนไม่ได้กำหนดชัดเจนสำหรับรูปหลายเหลี่ยมที่มีpapbpqyqzqpapbpqyqzq±2±1มุม!)0

อัปเดต (13 ก.ย. ):ในรูปด้านล่างรูปหลายเหลี่ยมไม่ได้ข้ามตัวเองและมีการเปลี่ยนหมายเลข 1แต่มันไม่ง่ายอย่างอ่อนแอ รูปหลายเหลี่ยมเนื้อหาที่มีการผสมข้ามพันธุ์หลายsubwalks ที่ไม่ง่ายแต่ก็ไม่เคยมีใครข้ามsubpaths ง่าย (ฉันพูดว่า "เนื้อหา" เพราะมันไม่ชัดเจนว่าจะกำหนดได้อย่างไรเมื่อการเดินสองทางที่ไม่ง่าย!)abcabcxyzxpqrxzyx

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

ดังนั้นในที่สุดนี่คือคำถามที่แท้จริงของฉัน:

  • เราสามารถระบุได้อย่างรวดเร็วว่ารูปหลายเหลี่ยมที่กำหนดนั้นไม่ใช่การข้ามตัวเองหรือไม่

  • เราสามารถระบุได้อย่างรวดเร็วว่ารูปหลายเหลี่ยมที่กำหนดนั้นง่ายหรือไม่?

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

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

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


1 Branko Grünbaum รูปหลายเหลี่ยม: สเตอร์ที่ถูกต้องและเป็นธรรม Poinsot แต่สัจธรรม Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012

2ดูตัวอย่าง: Erik D. Demaine และ Joseph O'Rourke เรขาคณิตพับขั้นตอนวิธีการ: การเชื่อมโยง, Origami, รูปทรงหลายเหลี่ยม สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์, 2550


ฉันไม่เข้าใจว่าทำไมใครจะลงคะแนนคำถามนี้!
Kaveh

ฉันอาจจะเข้าใจผิดทั้งหมดคำถามและบางทีนี่อาจเป็นวิธีที่ปิด แต่ฉันคิดว่าวิธีที่คุณนับจุดยอดหมายความว่าคำถามที่สองจำเป็นต้องใช้เวลาชี้แจง ให้ฉันอธิบาย: ในตัวอย่างสุดท้ายของคุณคุณใช้จุดยอดเดียวกันหลาย ๆ ครั้ง ดูเหมือนจะง่ายต่อการสร้างกราฟที่มีจำนวนเลขชี้กำลังของรอบที่ไม่ซ้ำกัน
Joe Fitzsimons

หากการป้อนข้อมูลของคุณเป็นรูปหลายเหลี่ยมที่กำหนดไว้ในตัวอย่างของคุณก็เป็นไปได้สำหรับการป้อนข้อมูลที่จะชี้แจงในจำนวนจุดยอดโดยไม่ต้องทำซ้ำวงจร หากกราฟมีกราฟตัวอย่างของคุณ (2 และ 3) เป็นกราฟย่อยแสดงว่ามีรอบที่ไม่ข้ามและรอบที่ข้าม เป็นผลให้คุณต้องอ่านสตริงทั้งหมดเพื่อให้แน่ใจว่าคุณไม่มีรอบการข้ามใด ๆ (ซึ่งอาจรวมหรือไม่ได้รวมไว้) สิ่งนี้ใช้เวลาแทนเลขชี้กำลังในในกรณีที่แย่ที่สุด n
Joe Fitzsimons

1
@JoeFitzsimons: อินพุตเป็นเพียงลำดับของคะแนน (เช่นคู่ของตัวเลขจริง) ซึ่งไม่จำเป็นต้องแตกต่างกัน ขนาดอินพุตคือความยาวของลำดับนี้ไม่ใช่จำนวนของจุดที่ไม่ซ้ำกัน n
Jeffε

2
@Kaveh: อาจเป็นนามธรรม / พิเศษเกินไป? มีคำมากเกินไป? ฉันควรจะตั้งชื่อจุดGa, Ka, Naa, Taa, Tin, Khat ?
Jeffε

คำตอบ:


2

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

การวิเคราะห์นี้อาจไม่แน่นเนื่องจากจำนวนครั้งที่มีการติดตาม subpath ทั่วไปที่มีความยาวเป็นเส้นตรงนั้นไม่ได้เป็นเชิงเส้นในจำนวนคู่ ควรมีจำนวนคงที่เท่านั้น ในทำนองเดียวกันถ้าความยาวของ subpath ทั่วไปที่ยาวที่สุดเป็นค่าคงที่เราก็โอเคในแง่ของระยะเวลาที่ติดตาม subpaths ทั่วไป ผมจะคาดหวังว่ากรณีที่เลวร้ายที่สุดที่เกิดขึ้นเมื่อมีการ subpath เดียวของความยาวเป็นเรื่องปกติของO(O(n)เส้นทางย่อย จากนั้นจะมีการโต้ตอบO(n)และในแต่ละการโต้ตอบO( √)O(n)O(n)กำลังติดตามขอบ ดังนั้นแม้จะยังคงจำนวนของขอบที่ตามมาคือo(n2)และขอบเขตที่ให้ไว้โดยจำนวนคู่ ดังนั้นฉันเดาว่าเป็นความจริงที่ถูกผูกไว้สำหรับขั้นตอนวิธีนี้คือO(n2)O(n)o(n2)O(n2)


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

จุดดี. เป็นไปได้ไหมที่จะนำรูปหลายเหลี่ยมมาเป็นรูปแบบมาตรฐานในการประมวลผลล่วงหน้า เราจะลบเส้นทางที่พับตัวเองกลับมาทันทีเช่นเดียวกับจุดยอดที่มีเส้นสายกับเพื่อนบ้านในทันที จากนั้นประโยคที่คุณยกมาจะถูกกำหนดให้ดีขึ้น - subpath ทั่วไปประกอบด้วยขอบที่มีจุดยอดเดียวกันและคุณรู้ว่าคุณทำเสร็จแล้วเพราะคุณถึงจุดยอดต่าง ๆ การพิสูจน์ว่าคำตอบยังคงเหมือนเดิมในรูปหลายเหลี่ยมในรูปแบบมาตรฐานไม่ควรยากเกินไป
Chris Gray

@ChrisGray: อาจจะ แต่ไม่ง่ายเท่าที่คุณแนะนำ หากภาพของเป็นต้นไม้จากนั้นการสลับการวนซ้ำทั้งหมดในที่สุดจะลดPไปที่จุดเดียว PP
Jeffε

ใช่คุณพูดถูกความคิดนั้นใช้ไม่ได้ ตัวเลขที่ถูกต้องที่สุดที่คุณให้ไว้ข้างต้นจะลดลงเป็นจุดเดียว
Chris Gray

ฉันวางแผนที่จะปล่อยให้เงินรางวัลหมดอายุ ครึ่งคะแนนจะได้รับโดยอัตโนมัติสำหรับคำตอบนี้
Jeff

2

ตามคำแนะนำของ Pat Morin นี่คือแนวคิดของฉันในการคำนวณจำนวนเลี้ยว ขออภัยถ้านี่เป็นสิ่งที่เลอะเทอะ ฉันยังคงต่อสู้กับปีศาจสัญกรณ์ ยิ่งกว่านั้นความคิดเห็นของ Pat ต่อคำตอบของ Chris แสดงให้เห็นว่าฉันเพิกเฉยต่อคดีที่สำคัญบางอย่าง แต่ฉันจะโพสต์ไว้ที่นี่ในกรณีที่คนอื่นเห็นว่ามีประโยชน์

สำหรับดัชนีใด ๆให้θ ( P ฉัน ) = θ ( P ฉัน- 1 , หน้าผม , หน้าผม+ 1 )แสดงถึงมุมภายนอกลงนามที่จุดสุดยอดหน้าฉัน ; นี่คือมุมทวนเข็มนาฬิการะหว่างรังสีหน้าฉัน- 1 P ฉันและหน้าฉันหน้าฉัน+ 1 , ปกติในช่วง- เธθ ฉันiθ(pi)=θ(pi1,pi,pi+1)pipi1pipipi+1เธ (เลขคณิตดัชนีทั้งหมดคือ mod nโดยปริยาย)จำนวนการเลี้ยวของ Pหมายถึง T u r n ( P ) = 1πθiπnP ผมขอเรียกว่าจุดสุดยอดหน้าฉันเดือยถ้าภายในมุมที่หน้าฉันจะมีค่าเท่ากับ0 มุมภายนอกθiที่เดือยไม่ชัดเจน มันอาจจะเป็นอย่างใดอย่างหนึ่งπหรือ-π โดยทั่วไปแล้วจำนวนการหมุนของPถูกกำหนดอย่างดีถ้าหากPไม่มีเดือย (และไม่มีจุดยอดซ้ำpi=

Turn(P)=12πi=0n1θ(pi).
pipi0θiππPP ) ไม่ยากที่จะพิสูจน์ว่า T u r n ( P )เป็นจำนวนเต็มถ้ามันถูกนิยามไว้อย่างดี โดยเฉพาะอย่างยิ่ง T U r n ( P ) = ± 1ถ้า Pเป็นรูปหลายเหลี่ยมที่เรียบง่ายpi=pi+1Turn(P)Turn(P)=±1P

ตอนนี้สมมติว่ามีการเดินของแบบฟอร์มพี R s R คิวที่หน้าQและเส้นทางR sคือการพลิกกลับของเส้นทางs R แล้วsเป็นเดือย; โทรrรากของs ในกรณีนี้ให้ฉันกำหนดมุมภายนอกที่sดังนี้ ~ θ ( s ) = เธs กรัมnPprsrqpqrssrsrss (แต่ถ้า θ ( p , r , q ) = 0 ? ในฐานะที่เป็นแพ็ตสังเกตสิ่งนี้สามารถเกิดขึ้นได้จริงอาจมีวิธี recursive บางประเภทในการกำหนด ˜ θ ( s )

θ~(s)=πsgnθ(p,r,q)={πif θ(p,r,q)>0πif θ(p,r,q)<0
θ(p,r,q)=0θ~(s) แม้ในกรณีนี้ แต่ฉันไม่รู้ว่ามันคืออะไร)

ถ้าเป็นอย่างอ่อนง่ายแล้วมีความเรียบง่ายn -gon ~ Pพลใกล้กับP ; tet ˜ sเป็นจุดยอดของ˜ P ที่ใกล้เคียงกับPมากที่สุด ในฐานะที่เป็น~ PวิธีPมุมภายในที่~ sใกล้ศูนย์ มันไม่ใช่เรื่องยากที่จะพิสูจน์ (โดยการเหนี่ยวนำกับความยาวของR s ) ที่มุมภายนอกθ ( ~ s )วิธี~ θ ( s )PnP~Ps~P~PP~Ps~rsθ(s~)θ~(s)

ถ้าประกอบด้วยการเดินทั้งหมดตามด้วยการพลิกกลับของมันr s rแล้วมุมภายนอกที่สเปอร์สrและsยังคงไม่ชัดเจน แต่ในกรณีนี้ผมเชื่อว่าPคือไม่ค่อยง่ายถ้าหากเดินR sไม่เป็นตัวเองข้าม (มีหลายกรณีที่ซับซ้อนกว่าที่ฉันไม่สามารถกำหนดหมายเลขเปลี่ยนที่เหมาะสมโดยเฉพาะถ้ารูปหลายเหลี่ยมเดินไปมาผ่านการเดินครั้งเดียว แต่ในทุกกรณีดังกล่าวปรากฏว่ารูปหลายเหลี่ยมนั้นง่ายหากอ่อนแอและหากว่า ไม่ข้าม)PrsrrsPrs

มิฉะนั้นถ้าเรากำหนดสำหรับการใด ๆ ที่ไม่ใช่การกระตุ้นจุดสุดยอดหน้าฉันตอนนี้เรามีจำนวนที่ดีที่กำหนดเปลี่ยน~ T U R n ( P ) = Σ ฉัน~ θ ( พีฉัน ) / 2 π = T U R n ( ~ P )ซึ่งจะต้อง± 1ถ้าPเป็นอย่างอ่อนง่ายθ~(pi)=θ(pi)piTurn~(P)=iθ~(pi)/2π=Turn(P~)±1P

ผมไม่มั่นใจว่าสามารถคำนวณได้ในเส้นเวลา ปัญหาหลักคือการที่เดินR sตัวเองสามารถมีสเปอร์ส อัลกอริธึมไร้เดียงสาที่พบรากของเดือยแต่ละอันด้วยแรงเดรัจฉานจริงต้องใช้เวลาΘ ( n 2 )ในกรณีที่เลวร้ายที่สุด; พิจารณาn -gon ที่มี subwalk ของความยาวΩ ( n )ที่เพียงแค่สลับระหว่างจุดสองจุดTurn~(P)rsΘ(n2)nΩ(n)

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