การค้นหาแอนนาแกรมที่น่าสนใจ


31

สมมติว่าและเป็นสองสตริงที่มีความยาวเท่ากัน anagrammingของสองสายคือการทำแผนที่ bijectiveเช่นว่าสำหรับแต่ละฉันb 1 b 2b na1a2anb1b2bna i = b p ( i ) ip:[1n][1n]ai=bp(i)i

อาจมีแอนนาแกรมมากกว่าหนึ่งรายการสำหรับคู่สายเดียวกัน ตัวอย่างเช่นถ้า `abcab` และเรามีและและอื่น ๆb = p 1 [ 1 , 2 , 3 , 4 , 5 ] [ 4 , 5 , 1 , 2 , 3 ] p 2 [ 1 , 2 , 3 , 4 , 5 ] a=b=cababp1[1,2,3,4,5][4,5,1,2,3]p2[1,2,3,4,5][2,5,1,4,3]

เราจะบอกว่าน้ำหนัก ของแอนนาแกรมคือจำนวนการตัดที่ต้องทำในสตริงแรกเพื่อให้ได้ชิ้นที่สามารถจัดเรียงใหม่เพื่อรับสตริงที่สอง อย่างเป็นทางการนี้จำนวนของค่าของซึ่ง1) นั่นคือมันคือจำนวนของจุดที่ไม่ได้เพิ่มขึ้นอย่างแน่นอนตัวอย่างเช่น 1. ,และเพราะตัดครั้งเดียวลงไปในชิ้นและและตัดสี่ คูณเป็นห้าชิ้นw(p)pi[1n1]p(i)+1p(i+1)pw(p1)=1w(p2)=4p11234512345p212345

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

คำถาม

ฉันต้องการอัลกอริทึมที่กำหนดให้มีสองสายที่มีแอนนาแกรมอยู่ทำให้ได้น้ำหนักที่แน่นอนของแอนนาแกรมที่เบาที่สุดของทั้งสองสตริง มันเป็นสิ่งที่ถูกต้องถ้าอัลกอริทึมให้ผลแอนนาแกรมที่เบาที่สุด แต่ก็ไม่จำเป็น

มันค่อนข้างง่ายในการสร้างแอนนาแกรมทั้งหมดและชั่งน้ำหนัก แต่อาจมีจำนวนมากดังนั้นฉันจึงต้องการวิธีการที่จะหาแอนนาแกรมแบบเบาโดยตรง


แรงจูงใจ

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

cholecystoduodenostomy
duodenocholecystostomy

ปัญหาที่เกิดขึ้นควรมีความชัดเจนเหล่านี้เป็นจืดเพราะพวกเขายอมรับ anagramming เบามากว่าการแลกเปลี่ยนเพียงcholecysto, duedenoและstomyส่วนสำหรับน้ำหนักของ 2. บนมืออื่น ๆ ที่เป็นตัวอย่างที่สั้นมากนี้เป็นที่น่าแปลกใจมากขึ้นและน่าสนใจ:

ชายฝั่ง
ขวาง

แอนนาแกรมที่เบาที่สุดมีน้ำหนัก 8

ฉันมีโปรแกรมที่ใช้วิธีนี้เพื่อค้นหาแอนนาแกรมที่น่าสนใจคือแอนนาแกรมทั้งหมดที่มีน้ำหนักสูง แต่มันทำได้โดยการสร้างและชั่งน้ำหนักแอนนาแกรมที่เป็นไปได้ทั้งหมดซึ่งช้า


แค่อยากรู้อยากเห็นคุณจะหาคู่ของแอนนาแกรมได้อย่างไร คุณค้นหาด้วยสัตว์เดียรัจฉานภายในคำทั้งหมดที่มีความยาวเท่ากันหรือไม่? O(n2)
Pedro

4
ไม่แน่นอน คุณแปลงแต่ละคำเป็นรูปแบบบัญญัติซึ่งมีตัวอักษรเดียวกันตามลำดับตัวอักษร (ตัวอย่างเช่นรูปแบบมาตรฐานของcholecystoduodenostomyis ccddeehlmnooooossttuyy) สองคำเป็นแอนนาแกรมหากและหากพวกเขามีรูปแบบที่ยอมรับเหมือนกัน คุณจัดเก็บคำต่าง ๆ ไว้ในตารางแฮชที่มีรูปแบบตามแบบบัญญัติและเมื่อใดก็ตามที่คุณพบการชนคุณจะมีแอนนาแกรม
Mark Dominus

ตอนนี้ฉันมีข้อมูลเกี่ยวกับสิ่งนี้ในบล็อกของฉันจำนวนมากหรือน้อย: (α) (β) (γ) (δ)
Mark Dominus

คำตอบ:


21

ปัญหานี้เรียกว่า "ปัญหาพาร์ทิชันสตริงขั้นต่ำทั่วไป" (แม่นยำยิ่งขึ้นคำตอบของปัญหาพาร์ทิชันสตริงขั้นต่ำทั่วไปเท่ากับคำตอบในปัญหาของคุณบวก 1) น่าเสียดายที่ NP-hard แม้จะมีข้อ จำกัด ที่ ตัวอักษรแต่ละตัวเกิดขึ้นได้มากที่สุดสองครั้งในแต่ละสตริงอินพุตตามที่พิสูจน์โดย Goldstein, Kilman และ Zheng [GKZ05] นี่หมายความว่าไม่มีอัลกอริธึมเวลาพหุนามอยู่ยกเว้น P = NP (แน่นอนถ้าตัวอักษรแต่ละตัวเกิดขึ้นมากที่สุดปัญหาก็จะเล็กน้อยเพราะมีเพียงแอนนาแกรมเดียว)

ในด้านบวกผู้เขียนคนเดียวกัน [GKZ05] ให้อัลกอริทึมแบบพหุนามเวลา 1.1037- ภายใต้ข้อ จำกัด เดียวกัน (A“ 1.1037- อัลกอริทึมการประมาณค่า ” หมายถึงอัลกอริทึมที่อาจไม่ส่งออกคำตอบที่ถูกต้องAแต่รับประกันว่าจะส่งออกค่าBเช่นAB ≤ 1.1037 A ) พวกเขายังให้อัลกอริธึมเชิงเส้น 4 เวลาประมาณ ข้อ จำกัด ที่อ่อนแอกว่าที่ตัวอักษรแต่ละตัวเกิดขึ้นมากที่สุดสามครั้งในแต่ละสตริงอินพุต

[GKZ05] Avraham Goldstein, Petr Kolman และ Jie Zheng ปัญหาพาร์ทิชันสตริงขั้นต่ำทั่วไป: ความแข็งและการประมาณ วารสารอิเล็กทรอนิกส์ของ Combinatorics , 12, บทความ R50, 2005 http://www.combinatorics.org/ojs/index.php/eljc/article/view/v12i1r50



9

นี่คือการติดตามผลของคำตอบของ Tsuyoshi Itoโดยสรุปส่วนที่เกี่ยวข้องมากที่สุดของบทความ GKZ05 ที่เขาอ้างถึง

กระดาษนี้พิสูจน์การลดลงของปัญหา Maximal Independent Set ( MIS ) สร้างกราฟมีจุดคู่( ฉัน, J )เช่นว่าฉัน = และฉัน+ 1 = J + 1 เชื่อมต่อจุดยอด( i , j )และ( k , ) (โดยที่i k ) ด้วยขอบเมื่อใดก็ตามที่เป็นไปไม่ได้ที่แอนนาแกรมสามารถทำแผนที่ทั้งหมดของฉันG(i,j)ai=bjai+1=bj+1(i,j)(k,)ikและฉัน+ 1 J + 1และ k และ k + 1 + 1 ง่ายต่อการตรวจจับ การทำแผนที่ดังกล่าวเป็นไปไม่ได้แน่นอนหากหนึ่งในสิ่งต่อไปนี้ถูกเก็บiji+1j+1kk+1+1

  1. และ j i=kj
  2. และ j + 1 i+1=kj+1
  3. และ { j , j + 1 }หลุดจาก { , + 1 }i+1<k{j,j+1}{,+1}

บอกว่าส่งผลกราฟมีชุดที่เป็นอิสระสูงสุดของขนาดs แล้วน้ำหนักต่ำสุด anagramming อยู่ตรงn - s - 1ที่nคือความยาวของสายและข (การสนทนาถือเช่นกัน: แอนนาแกรมที่มีน้ำหนักเบาแปลโดยตรงเป็น MIS ขนาดใหญ่สำหรับGสำหรับรายละเอียดดูหน้า 4–5 ของกระดาษ)Gsns1nabG

ตัวอย่างเช่นพิจารณาสองสตริงและyttrious touristyกราฟที่เกี่ยวข้องมีสองจุดยอดหนึ่งสำหรับouคู่ที่ใช้ร่วมกันและอีกหนึ่งสำหรับriคู่ที่ใช้ร่วมกัน มีขอบระหว่างจุดไม่เป็นเพราะมันเป็นไปได้ที่จะมี anagramming ที่แมปทั้งouไปouและriไปri; หรือหนึ่งสามารถตรวจสอบว่าสามเงื่อนไขข้างต้นล้มเหลวทั้งหมด ดังนั้นกราฟจึงมี MIS ขนาดและน้ำหนักแอนนาแกรมขั้นต่ำคือ 8-2-1 = 5 ซึ่งสอดคล้องกับแอนนาแกรม↔ 's=2y|t|t|ri|ou|st|ou|ri|s|t|y

บนมืออื่น ๆ พิจารณาและderater treaderเวลานี้กราฟมีจุดยอดสามจุด:

  1. DErater + treaDEr
  2. dERater + treadER
  3. deratER + treadER

2 และ 3 เข้ากันไม่ได้และ 1 และ 3 เข้ากันไม่ได้ แต่ 1 และ 2 เข้ากันได้ ดังนั้นไม่ซ้ำกันระบบสารสนเทศมีขนาดและมีจุดที่ 1 และ 2 anagramming ที่สอดคล้องกันของน้ำหนัก 7-2-1 = 4 คือ↔s=2der|a|t|e|rt|r|e|a|der


2
ขอบคุณสำหรับการติดตามโพสต์ แต่นี่ไม่ใช่ข้อพิสูจน์ว่าปัญหาของคุณสมบูรณ์แล้ว เพื่อพิสูจน์ความสมบูรณ์ของปัญหาของคุณคุณต้องลดปัญหา NP-complete ที่ทราบสำหรับปัญหาของคุณและนั่นคือทฤษฎีบท 2.2 ของ [GKZ05] สิ่งที่คุณนำเสนอที่นี่ (เลมม่า 1.1 จาก [GKZ05]) เป็นการลดลงในทิศทางตรงกันข้าม
Tsuyoshi Ito

นี่เป็นการปฏิรูปที่ดี การเปลี่ยนแปลงเล็กน้อยที่เป็นการทำให้เข้าใจง่ายเล็กน้อยแนวคิด (อย่างน้อยสำหรับฉัน): แทนที่จะวาดเส้นขอบระหว่างคู่ที่ไม่เข้ากันและขอชุดอิสระสูงสุดเราสามารถวาดเส้นขอบระหว่างคู่ที่เข้ากันได้และถามหากลุ่มสูงสุด (ฉันคิดว่าง่ายกว่าที่จะคิดเกี่ยวกับ "จำนวนคู่ที่มากที่สุดที่เราสามารถอยู่ด้วยกันได้คืออะไร")
ShreevatsaR

2

มันไม่ครอบคลุมอัลกอริธึมที่แน่นอนที่คุณนึกไว้ (ซึ่งคำตอบของ Tsuyoshi Ito ทำ ) แต่พยายามหาปัญหาพื้นฐานในการค้นหาแอนนาแกรม "น่าสนใจ" ...

ความคิดแรกของฉันคือการใช้ความหลากหลายในการแก้ไขระยะทางซึ่งการเปลี่ยนแปลงของอะตอมนั้นมีน้ำหนักตาม "ความน่าสนใจ" มากกว่า "ความยากลำบาก" หรือ "ความสับสน" ตามปกติ แน่นอนว่าไม่น่าเป็นไปได้ที่คุณสามารถเข้ารหัสการแปลงที่น่าสนใจได้อย่างมีประสิทธิภาพด้วยวิธีนี้เนื่องจากพวกเขาน่าจะไม่ใช่คนในพื้นที่และดังนั้นจึงพบปัญหา NP-complete ของ MIS เป็นต้น

ดังนั้นความคิดที่สองคือการสร้างการจัดเรียงตัวอักษรเป็นตัวอักษรระหว่างคำ (à la machine alignment alignment) และจากนั้นให้คะแนนการจัดตำแหน่งตัวเองสำหรับ "ความน่าสนใจ" (เช่นการนับการจัดเรียงที่ใช้ตัวอักษรที่อยู่ติดกัน ตัวอักษรที่อยู่ติดกันหรือจำนวนการจัดแนวที่แต่ละการจัดแนวตัดกัน ฯลฯ จากนั้นรวมการจัดแนวทั้งหมดผ่านโมเดลการบันทึกหรือเช่น)

แนวคิดที่สามคือการละทิ้งการมองโครงสร้างของแอนนาแกรมอย่างสมบูรณ์และมองไปที่ความหมายของคำ บ่อยครั้งสิ่งที่ทำให้แอนนาแกรม "น่าสนใจ" คือความไม่ลงรอยกันระหว่างความหมายของคำที่เกี่ยวข้อง ดังนั้นลองใช้วิธีคำนวณระยะทางใน WordNet หรือที่คล้ายกัน


0

ปัญหาจะสามารถเรียบเรียงในแง่ของกลุ่มการเปลี่ยนแปลง

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

ก่อนอื่นให้จำสัญกรณ์สำหรับการเรียงสับเปลี่ยนนั่นคือสัญกรณ์วงรอบที่เรียกว่า:

  • ()
  • (1)
  • (12)
  • (123)
  • และหนึ่ง

'วงจร' แบบเรียบง่ายเหล่านี้ประกอบขึ้นเพื่ออธิบายวิธีเรียงสับเปลี่ยนที่ซับซ้อนยิ่งขึ้น

n

  • (12)
  • (a b)(a+1 b+1)a>0b<a+1b+1n
  • ...
  • (a b)(a+1 b+1)(a+i1 b+i1)a>0a+i1bb+i1n

การเคลื่อนไหวเหล่านี้เป็นพื้นฐานสำหรับอัลกอริทึมของคุณ สิ่งที่คุณสนใจคือการหาลำดับที่เล็กที่สุดของการเคลื่อนไหวเหล่านี้เพื่อย้ายจากคำหนึ่งไปอีกคำ

ฉันไม่รู้อัลกอริธึมสำหรับการคำนวณสิ่งนี้นอกเหนือจากการค้นหาแบบ brute force แต่อย่างน้อยตอนนี้ก็มีคำอธิบายที่ชัดเจนกว่า (ฉันหวัง) ว่าการเคลื่อนไหวแบบดั้งเดิมคืออะไร (และบางทีนักทฤษฎีกลุ่มบางคนในหมู่พวกเราสามารถชี้ไปที่อัลกอริธึมที่เหมาะสม)


1
ขอบคุณ บางทีฉันเป็นคนมองโลกในแง่ร้าย แต่สำหรับฉันดูเหมือนว่าวิธีนี้จะเป็นเรื่องยาก ฉันไม่คิดว่าวิธีการแบบกลุ่มตามทฤษฎีจะให้ผลไม้เว้นแต่ว่าเราจะค้นพบว่ากลุ่มการเปลี่ยนแปลงที่น่าสนใจคืออะไรและนั่นแตกต่างกันไปตามสตริงอินพุต ฉันคิดว่าการเป็นตัวแทนที่มีประสิทธิภาพของกลุ่ม จำกัด นั้นเป็นปัญหาที่ลึกและอุดมสมบูรณ์มาก แต่ฉันต้องการที่จะเข้าใจผิด
ทำเครื่องหมาย Dominus

1
“ สิ่งที่คุณสนใจคือการหาลำดับที่เล็กที่สุดของการเคลื่อนไหวเหล่านี้เพื่อย้ายจากคำหนึ่งไปอีกคำหนึ่ง” ฉันไม่คิดว่าสิ่งนี้ถูกต้อง ตัวอย่างเช่นถ้า n = 4 การสลับ (1 2) มีน้ำหนัก 2 แต่การสลับ (2 3) มีน้ำหนัก 3 วิธีการนับของคุณไม่แยกความแตกต่างทั้งสองนี้
Tsuyoshi Ito

ฉันตอบตอนดึก ฉันไม่เข้าใจการวัดน้ำหนักอย่างถูกต้อง ที่จริงฉันไม่เข้าใจเลยตอนนี้ ฉันแม้ว่าคุณต้องการอนุญาตให้มีการเคลื่อนไหวของบล็อกของตัวอักษรซึ่งเป็นเหตุผลที่ฉันไปทุกปัญหาของการกำหนดดั้งเดิมเหล่านี้ คำตอบของฉันอาจเป็นแรงบันดาลใจดังนั้นฉันจะทิ้งมันไว้แม้ว่ามันจะผิด
Dave Clarke

0

สำหรับ cholecystoduodenostomy / duodenocholecystostome ฉันสังเกตเห็นว่าถ้าคุณกำหนดจำนวนให้กับตัวละครแต่ละตัวที่อธิบายว่ามันถูกย้ายเป็นเดลต้าคุณจะมีสิ่งต่าง ๆ เช่น 7 7 และ 8 -7s จากนั้นเป็น 6 0 ไม่ถูกต้องเนื่องจากตัวอักษรบางตัวอาจทำซ้ำ (ตัวที่สองย้ายไปข้างหน้า 2 ไม่กลับ 7) เป็นต้น แต่ยังคง "เข้ารหัสความยาวรันได้" เนื่องจากคุณเห็นเดลตาเดียวกันในแถว

เปรียบเทียบกับชายฝั่ง / ส่วนที่คุณเห็นบางสิ่งเช่น (+2) (+5) (+5) (+3) (- 3) (- 1) (+3) .... น้อยกว่า "ความยาวที่เข้ารหัสได้"

บางทีการสุ่มของเดลตาอาจให้คะแนนกับคุณว่าแอนนาแกรมน่าสนใจแค่ไหน?

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