อัลกอริทึมที่มีประสิทธิภาพสำหรับการค้นหาชุดของต้นไม้


9

ฉันมีชุดข้อมูลขนาดใหญ่ของต้นไม้และฉันต้องการค้นหาโดยระบุtreelet (กราฟย่อยที่เชื่อมต่อ) แบบสอบถามควรส่งคืนการเกิดทั้งหมดของ treelet ในชุดข้อมูล

มีอัลกอริทึมที่มีประสิทธิภาพในการทำเช่นนั้นหรือไม่?

ฉันกำลังคิดถึงบางสิ่งเช่นอาร์เรย์ต่อท้ายอย่างไรก็ตามการเข้ารหัสต้นไม้อย่างไร้เดียงสาเป็นสตริง (โดยการเรียงลำดับการส่งผ่านโหนดคงที่) จะไม่ทำงานเนื่องจากการค้นหา Treelet อาจมีรูปร่างที่ไม่เจาะจง

UPDATE:

รายละเอียดบางอย่างเกี่ยวกับอินสแตนซ์ทั่วไปที่ฉันคาดหวัง:

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

ฉันต้องการสิ่งนั้นสำหรับแอปพลิเคชัน NLP: ต้นไม้แต่ละต้นจะแยกการพึ่งพาของประโยคแต่ละโหนดแสดงคำที่เกิดขึ้นซ้ำและแต่ละคำมีคำในพจนานุกรม (มีการตกแต่งบางอย่าง)


1
เล่มนี้มีการอภิปรายของอัลกอริทึมแบบขนานสำหรับทรีมอร์ฟิซึ่มย่อย
Anthony Labarre

1
ขออภัยฉันคิดว่าคุณกำลังมองหากราฟย่อยที่เชื่อมต่อซึ่งจำเป็นต้องเป็นต้นไม้ซึ่งปรากฏในชุดต้นไม้ที่กำหนด คุณช่วยอธิบายให้ชัดเจนว่าปัญหาของคุณแตกต่างจากคำอธิบายนี้หรือไม่?
Anthony Labarre

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

1
คุณคุ้นเคยกับการจับคู่ทวิก XML หรือไม่ ดูเหมือนว่าปัญหาของคุณจะเป็นกรณีพิเศษดังนั้นคุณสามารถใช้อัลกอริทึมและซอฟต์แวร์ที่มีอยู่แล้วก็ได้
Marek Chrobak

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

คำตอบ:


3

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


1

ในขณะที่กลับผมเขียนถึงขั้นตอนวิธีต้นไม้ canonization โรนัลด์อ่านและใส่ไว้ในวิกิพีเดีย

ฉันจะสร้าง hashtable สำหรับแต่ละโหนดโหนดภายในและติดเลเบลด้วยรายการพอยน์เตอร์กลับไปที่ subtrees ที่มาจาก อย่างไรก็ตามมันจะใช้งานได้กับดอกทริเลตด้วยใบไม้จริงเท่านั้น

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