สมมติว่าและเป็นสองสตริงที่มีความยาวเท่ากัน anagrammingของสองสายคือการทำแผนที่ bijectiveเช่นว่าสำหรับแต่ละฉันb 1 b 2 … b na i = b p ( i ) i
อาจมีแอนนาแกรมมากกว่าหนึ่งรายการสำหรับคู่สายเดียวกัน ตัวอย่างเช่นถ้า `abcab` และเรามีและและอื่น ๆb = p 1 [ 1 , 2 , 3 , 4 , 5 ] → [ 4 , 5 , 1 , 2 , 3 ] p 2 [ 1 , 2 , 3 , 4 , 5 ] →cabab
เราจะบอกว่าน้ำหนัก ของแอนนาแกรมคือจำนวนการตัดที่ต้องทำในสตริงแรกเพื่อให้ได้ชิ้นที่สามารถจัดเรียงใหม่เพื่อรับสตริงที่สอง อย่างเป็นทางการนี้จำนวนของค่าของซึ่ง1) นั่นคือมันคือจำนวนของจุดที่ไม่ได้เพิ่มขึ้นอย่างแน่นอนตัวอย่างเช่น 1. ,และเพราะตัดครั้งเดียวลงไปในชิ้นและและตัดสี่ คูณเป็นห้าชิ้น12345
123
45
12345
สมมติว่ามีอยู่ anagramming สำหรับสองสายและขจากนั้นแอนนาแกรมอย่างน้อยหนึ่งรายการต้องมีน้ำหนักน้อยที่สุด สมมติว่านี้คนนี้เป็นที่มีน้ำหนักเบา (อาจมีแอนนาแกรมที่เบาที่สุดหลายอันฉันไม่สนใจเพราะฉันสนใจเฉพาะน้ำหนักเท่านั้น)
คำถาม
ฉันต้องการอัลกอริทึมที่กำหนดให้มีสองสายที่มีแอนนาแกรมอยู่ทำให้ได้น้ำหนักที่แน่นอนของแอนนาแกรมที่เบาที่สุดของทั้งสองสตริง มันเป็นสิ่งที่ถูกต้องถ้าอัลกอริทึมให้ผลแอนนาแกรมที่เบาที่สุด แต่ก็ไม่จำเป็น
มันค่อนข้างง่ายในการสร้างแอนนาแกรมทั้งหมดและชั่งน้ำหนัก แต่อาจมีจำนวนมากดังนั้นฉันจึงต้องการวิธีการที่จะหาแอนนาแกรมแบบเบาโดยตรง
แรงจูงใจ
เหตุผลที่ปัญหานี้เป็นที่สนใจมีดังนี้ มันง่ายมากที่จะทำให้คอมพิวเตอร์ค้นหาพจนานุกรมและค้นหาแอนนาแกรมคู่คำที่มีตัวอักษรเหมือนกันทุกประการ แต่แอนนาแกรมที่ผลิตขึ้นจำนวนมากนั้นไม่น่าสนใจ ตัวอย่างเช่นตัวอย่างที่ยาวที่สุดที่พบได้ในพจนานุกรมนานาชาติที่สองของเว็บสเตอร์คือ:
cholecystoduodenostomy
duodenocholecystostomy
ปัญหาที่เกิดขึ้นควรมีความชัดเจนเหล่านี้เป็นจืดเพราะพวกเขายอมรับ anagramming เบามากว่าการแลกเปลี่ยนเพียงcholecysto
, duedeno
และstomy
ส่วนสำหรับน้ำหนักของ 2. บนมืออื่น ๆ ที่เป็นตัวอย่างที่สั้นมากนี้เป็นที่น่าแปลกใจมากขึ้นและน่าสนใจ:
ชายฝั่ง
ขวาง
แอนนาแกรมที่เบาที่สุดมีน้ำหนัก 8
ฉันมีโปรแกรมที่ใช้วิธีนี้เพื่อค้นหาแอนนาแกรมที่น่าสนใจคือแอนนาแกรมทั้งหมดที่มีน้ำหนักสูง แต่มันทำได้โดยการสร้างและชั่งน้ำหนักแอนนาแกรมที่เป็นไปได้ทั้งหมดซึ่งช้า
cholecystoduodenostomy
is ccddeehlmnooooossttuyy
) สองคำเป็นแอนนาแกรมหากและหากพวกเขามีรูปแบบที่ยอมรับเหมือนกัน คุณจัดเก็บคำต่าง ๆ ไว้ในตารางแฮชที่มีรูปแบบตามแบบบัญญัติและเมื่อใดก็ตามที่คุณพบการชนคุณจะมีแอนนาแกรม