Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

อัลกอริทึม Huffman สำหรับทรี t-ary ในโครงสร้างข้อมูล


อัลกอริธึมอย่างง่าย

  • มีการเตรียมต้นไม้ฮัฟฟ์แมนเริ่มต้นจำนวน n ต้น ซึ่งแต่ละต้นจะเป็นโหนดใบเดียว จัดต้นไม้ n ต้นไว้ในคิวลำดับความสำคัญที่จัดตามน้ำหนัก (ความถี่)
  • ลบหรือลบต้นไม้สองต้นแรก (ต้นที่มีน้ำหนักน้อยที่สุด) รวมต้นไม้ทั้งสองนี้เข้าด้วยกันเพื่อสร้างต้นไม้ใหม่ที่มีรากเชื่อมโยงกับต้นไม้ทั้งสองต้นในฐานะลูก และมีน้ำหนักคือผลรวมของน้ำหนักของต้นไม้ลูกทั้งสอง
  • เก็บทรีใหม่นี้ไว้ในคิวลำดับความสำคัญ
  • ทำซ้ำขั้นตอนที่ 2-3 จนกว่าจะถึงและเว้นแต่ต้นไม้ Huffman บางส่วนทั้งหมดจะถูกรวมเป็นต้นเดียว

เป็นอัลกอริธึมที่โลภ:ในการทำซ้ำแต่ละครั้ง อัลกอริธึมจะสร้างการตัดสินใจที่ "โลภ" เพื่อรวมทรีย่อยทั้งสองเข้าด้วยกันโดยมีน้ำหนักน้อยที่สุด เป็นไปได้ไหมที่อัลกอริทึมจะให้ผลลัพธ์ที่ต้องการ?

  • บทแทรก:ให้ x และ y เป็นอักขระที่มีความถี่ต่ำที่สุดสองตัว มีแผนผังโค้ดที่เหมาะสมที่สุดที่ x และ y เป็นพี่น้องกันซึ่งมีความลึกต่ำสุดเท่ากับโหนดปลายสุดอื่นๆ ในแผนผัง
  • ทฤษฎีบท:รหัส Huffman ถือเป็นรหัสไบนารี่ที่ไม่มีส่วนนำหน้า (อัลกอริทึมที่โลภสร้างแผนภูมิ Huffman โดยมีน้ำหนักพาธภายนอกต่ำสุดสำหรับชุดตัวอักษรที่กำหนด)