ปัญหาคือ NP-hard สำหรับL = A ∗โดยที่Aเป็นภาษา จำกัด ที่มีคำต่อไปนี้:L=A∗A
- x 111 , x 000 ,x111x000
- y 100 , y 010 , y 001 ,y100y010y001
- 00 c 11 , 01 c 10 , 10 c 01และ 11 c 0000c1101c1010c0111c00
การลดลงมาจากปัญหาการวางแนวกราฟซึ่งเป็นที่รู้จักกันว่า NP-hard (ดูที่https://link.springer.com/article/10.1007/s00454-017-9884-9 ) ในปัญหานี้เราจะได้รับกราฟแบบไม่ระบุทิศทาง 3 รูปแบบซึ่งจุดยอดทุกจุดจะมีป้ายกำกับว่า " { 1 } " หรือ " { 0 , 3 } " เป้าหมายคือกำหนดขอบของกราฟเพื่อให้ขอบเขตของจุดยอดทุกจุดอยู่ในการกำหนดป้ายกำกับจุดยอดนั้น{1}{0,3}
การลดจำเป็นต้องใช้เป็นอินสแตนซ์กราฟการวางแนวและป้อนรายการอเนกประสงค์เป็นเอาต์พุต ในการลดลงนี้ triples ที่เราส่งออกจะตอบสนองข้อ จำกัด บางอย่างอยู่เสมอ ข้อ จำกัด เหล่านี้มีการระบุไว้ด้านล่างและเราจะอ้างถึงรายการของอเนกประสงค์ที่ถูกต้องหากและหากพวกเขาปฏิบัติตามข้อ จำกัด เหล่านี้:
- อักขระx , y , และcเป็นช่วงเวลาที่กำหนดเพียงหนึ่งดัชนีเท่านั้น กล่าวอีกนัยหนึ่งเมื่อใดก็ตามที่อักขระเหล่านี้ถูกวางไว้xyc
- For every triple (i,l,r)(i,l,r) present in the instance with i∈{0,1}i∈{0,1}, the triple (1−i,l,r)(1−i,l,r) is also present.
- ถ้า( α , l , r )และ( α ′ , l ′ , r ′ )เป็นทั้งสามสิ่งที่มีอยู่ในอินสแตนซ์แล้วทั้งl < l ′ ≤ ′ r ′ < rหรือl ′ < l ≤ r < r ′หรือ{ α , α ′ } = { 0 , 1 }กับl = l(α,l,r)(α′,l′,r′)l<l′≤r′<rl′<l≤r<r′{α,α′}={0,1}' < R = R 'l = l'< r = r'
- ถ้า( α , L , R )เป็นสามแล้วจำนวนอเนกประสงค์( α ' , L ' , R ' )กับL ≤ L ' ≤ R ' ≤ Rเป็นสิ่งr - L + 1( α , l , r )( α', l', r')l ≤ l'≤ r'≤ rr - l + 1
หมายเหตุบทแทรกต่อไปนี้พิสูจน์ในตอนท้ายของโพสต์นี้
แทรก: สำหรับรายชื่อที่ถูกต้องของอเนกประสงค์ตัวอักษรx , YและCจะต้องวางตรงตามที่ระบุโดยอเนกประสงค์และสำหรับคู่ของอเนกประสงค์ใด ๆ( 0 , L , R )และ( 1 , L , R )ที่ สำหรับตัวละครสองตัวสามที่จะต้องวางไว้ที่ดัชนีLและRxYค( 0 , l , r )( 1 , l , r )ล.R
จากนั้นความคิดของการลดมีดังต่อไปนี้
เราใช้คู่อเนกประสงค์( 0 , l , r )และ( 1 , l , r )เพื่อแสดงขอบ ขอบไประหว่างปลายทางที่ดัชนีลิตรและที่ดัชนีR สมมติว่าเราผลิตรายการอเนกประสงค์ที่ถูกต้องตัวละครจากทั้งสองนี้จะต้องวางไว้ที่lและrดังนั้นเราจึงสามารถปฏิบัติตามลำดับที่พวกเขาวางไว้เป็นการระบุทิศทางของขอบ นี่คือ1 "หัว" ของขอบและ0คือ "หาง" กล่าวอีกนัยหนึ่งถ้า1ถูกวางไว้ที่r( 0 , l , r )( 1 , l , r )ล.Rล.R101Rแล้วจุดขอบจากลิตรเพื่อRและถ้า1จะอยู่ที่ลิตรแล้วจุดขอบจากRเพื่อลิตรล.R1ล.Rล.
ในการเป็นตัวแทนของจุดยอดเราวางอักขระxหรือyที่ดัชนีและใช้อักขระสามตัวถัดไปเป็นจุดปลายของขอบทั้งสามซึ่งสัมผัสกับจุดยอด โปรดทราบว่าถ้าเราวางxทั้งสามขอบที่จุดสุดยอดจะต้องชี้ไปในทิศทางเดียวกัน (ทั้งหมดลงในจุดสุดยอดหรือออกทั้งหมดของจุดสุดยอด) เพียงเพราะสตริงที่มีในภาษา จำกัด จุดดังกล่าวมี outdegree 0หรือ3ดังนั้นเราจึงวางxว่าสำหรับจุดที่มีป้ายกำกับ{ 0 , 3 } ถ้าเราวางyxYxA03x{ 0 , 3 }Yว่าหนึ่งในสามของขอบที่จุดสุดยอดจะต้องชี้ไปในทิศทางเดียวกันเนื่องจากสตริงใน จุดดังกล่าวมี outdegree 1ดังนั้นเราจึงวางYว่าสำหรับจุดที่มีป้ายกำกับ{ 1 }A1Y{ 1 }
ในบางแง่เราก็เสร็จแล้ว โดยเฉพาะอย่างยิ่งการโต้ตอบระหว่างการแก้ไขอินสแตนซ์นี้กับการแก้อินสแตนซ์กราฟการวางแนวควรมีความชัดเจน น่าเสียดายที่รายชื่ออเนกประสงค์ที่เราผลิตอาจไม่ถูกต้องและ "ขอบ" ที่อธิบายไว้อาจไม่ทำงานตามที่ต้องการ โดยเฉพาะอย่างยิ่งรายการอเนกประสงค์อาจไม่ถูกต้องเนื่องจากเงื่อนไขที่ช่วงเวลาจากอเนกประสงค์ต้องมีกันและกันไม่อาจถือ: ช่วงเวลาจากทั้งสองขอบอาจทับซ้อนกันโดยไม่มีใครมีอื่น ๆ
เพื่อต่อสู้กับสิ่งนี้เราได้เพิ่มโครงสร้างพื้นฐานเพิ่มเติม โดยเฉพาะอย่างยิ่งเราเพิ่ม "จุดยอดครอสโอเวอร์" จุดยอดแบบครอสโอเวอร์เป็นจุดสุดยอดของระดับ4ซึ่งมีการจับคู่ขอบซึ่งภายในแต่ละคู่หนึ่งขอบจะต้องชี้ไปที่จุดยอดแบบครอสโอเวอร์และอีกหนึ่งตัว กล่าวอีกนัยหนึ่งจุดยอดครอสโอเวอร์จะทำงานเหมือนกับขอบ "ข้าม" เพียงสองจุด เราเป็นตัวแทนยอดครอสโอเวอร์โดยการวางตัวละครคที่บางส่วนดัชนีฉัน จากนั้นโปรดทราบว่าภาษาAจำกัด อักขระที่i - 1และi + 2ให้อยู่ตรงกันข้าม (หนึ่ง0และหนึ่ง1 ) และอักขระที่i - 24ciAi−1i+201i−2และฉัน+ 1จะเป็นตรงข้าม ดังนั้นหากเราใช้ดัชนีเหล่านี้เป็นจุดสิ้นสุดสำหรับสี่ขอบที่จุดยอดครอสโอเวอร์พฤติกรรมจะเป็นไปตามที่อธิบายไว้: ขอบทั้งสี่เป็นคู่และทุกคู่มีหนึ่งคะแนนในหนึ่งจุดi+1
How do we actually place these crossovers? Well suppose we have two intervals (l,r)(l,r) and (l′,r′)(l′,r′) which overlap. WLOG, l<l′<r<r′l<l′<r<r′. We add the crossover character into the middle (between l′l′ and rr). (Let's say that all along we spaced everything out so far that there's always enough space, and at the end we will remove any unused space.) Let the index of the crossover character be ii. Then we replace the four triples (0,l,r)(0,l,r), (1,l,r)(1,l,r), (0,l′,r′)(0,l′,r′), and (1,l′,r′)(1,l′,r′) with eight triples with two each (one with character 00 and one with character 11) for the following four intervals (l,i−1)(l,i−1), (i+2,r)(i+2,r), (l′,i−2)(l′,i−2), (i+1,r′)(i+1,r′). Notice that the intervals don't overlap in the bad way anymore! (After this change, if two intervals overlap, one is strictly inside the other.) Furthermore, the edge from ll to rr is replaced by an edge from ll to the crossover vertex followed by the edge from there to rr; these two edges are paired at the crossover vertex in such a way that one is pointed in and one is pointed out; in other words, the two edges together behave just like the one edge they are replacing.
In some sense, putting in this crossover vertex "uncrossed" two edges (whose intervals were overlapping). It is easy to see that adding the crossover vertex can't cause any additional edges to become crossed. Thus, we can uncross every pair of crossing edges by inserting enough crossover vertices. The end result still corresponds to the Graph Orientation instance, but now the list of triples is valid (the properties are all easy to verify now that we have "uncrossed" any crossing edges), so the lemma applies, the edges must behave as described, and the correspondence is actually an equivalence. In other words, this reduction is correct.
proof of lemma
Lemma: for a valid list of triples, the characters xx, yy, and cc must be placed exactly as indicated by the triples, and for any pair of triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r), the two characters for that triple must be placed at indices ll and rr.
proof:
We proceed by induction on the triples by interval length. In particular, our statement is the following: for any kk if some triple has interval length kk then the character in that triple must be placed as described in the lemma.
Base case: for k=0k=0, the triple must be placing a character xx, yy, or cc at the single index inside the interval. This is exactly as described in the lemma.
Inductive case: assume the statement holds for any kk less than some k′k′. Now consider some triple with interval length k′k′. Then that triple must be of the form (i,l,r)(i,l,r) with r=l+k′−1r=l+k′−1 and i∈{0,1}i∈{0,1}. The triple (1−i,l,r)(1−i,l,r) must also be present. The number of triples (α′,l′,r′)(α′,l′,r′) with l≤l′≤r′≤rl≤l′≤r′≤r is exactly r−l+1=k′r−l+1=k′. These triples include triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r) but also k′−2k′−2 other triples of the form (α′,l′,r′)(α′,l′,r′) with l<l′≤r′<rl<l′≤r′<r. These other triples all have interval length smaller than k′k′, so they all must place their characters as specified in the lemma. The only way for this to occur is if these triples place characters in every index starting at index l+1l+1 and ending at index r+1r+1. Thus, our two triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r) must place their characters at indices ll and rr, as described in the lemma, concluding the inductive case.
By induction, the lemma is correct.