เพื่อนร่วมงานที่ทำงานเกี่ยวกับการเขียนโปรแกรมทางพันธุกรรมถามคำถามต่อไปนี้ ก่อนอื่นฉันพยายามแก้มันโดยใช้วิธีโลภ แต่จากความคิดที่สองฉันพบตัวอย่างของอัลกอริทึมโลภ ดังนั้นฉันคิดว่ามันควรค่าแก่การกล่าวถึงที่นี่
พิจารณาพหุนามสองอันซึ่งแสดงโดยต้นไม้แสดงออกของพวกเขา ตัวอย่างเช่นและมีภาพประกอบด้านล่าง:
กฎ:
- แต่ละโหนดเป็นชื่อตัวแปร ( ), ตัวเลขหรือการดำเนินการ (+, -, ×)
- การสำรวจเส้นทางตามลำดับของต้นไม้ควรส่งผลให้พหุนามถูกต้อง
- โหนดการดำเนินการมีระดับ 2 โหนดอื่น ๆ มีระดับ -0 โหนดทั้งหมดมีระดับที่ 1 (ยกเว้นรูทซึ่งมีระดับนอกเป็น 0)
บนโหนด N ของแผนผังกำหนดการดำเนินการพื้นฐานดังนี้:
- การดำเนินการขั้นพื้นฐานสามารถสร้างแผนภูมินิพจน์ด้านบนของ N (ดูตัวอย่างด้านล่าง)
ค่าใช้จ่ายของการดำเนินการพื้นฐานของประเภท 1คือ 1 ค่าใช้จ่ายสำหรับประเภท 2เท่ากับจำนวนการดำเนินงาน {+, -, ×} ในต้นไม้นิพจน์ที่สร้างขึ้นใหม่
ตัวอย่างสำหรับชนิดที่ 2:ค่าใช้จ่ายของการดำเนินการพื้นฐานต่อไปนี้คือ 2 เนื่องจากโครงสร้างนิพจน์ที่สร้างอยู่ด้านบนของโหนด N ใช้การดำเนินการสองอย่าง (- และ×)
ให้ T1 และ T2 เป็นต้นไม้แสดงออกสองต้นที่แทนพหุนาม กำหนดระยะทางของ T1 และ T2 ดังนี้: ค่าใช้จ่ายขั้นต่ำของการดำเนินงานขั้นพื้นฐานสำหรับการแปลง T1 เป็น T2 โปรดทราบว่าเราไม่ต้องการให้ทรีที่แปลงแล้วมีโครงสร้างเดียวกันกับ T2 เราแค่อยากให้มันคำนวณพหุนามเดียวกับ T2 (ดูความคิดเห็นสำหรับตัวอย่าง)
ปัญหา:จาก T1 และ T2 แสดงอัลกอริทึมที่คำนวณระยะทาง
ตัวอย่างที่ 1:ให้ T1 และ T2 เป็นต้นไม้สองต้นที่แสดงในตอนต้นของโพสต์นี้ ในการแปลงต้นไม้ที่ถูกต้องเป็นต้นไม้ด้านซ้ายเราสามารถสร้างต้นไม้ที่มีราคา 3 อยู่ด้านบนของ×และเปลี่ยน 4 เป็น 1 (ราคารวมคือ 4)