การพิสูจน์ฮีปไบนารีมี


16

ฉันพยายามที่จะพิสูจน์ว่ากองไบนารีที่มี nodes มีออกจากใบเนื่องจากกองถูกสร้างขึ้นด้วยวิธีต่อไปนี้:nn2

แต่ละโหนดใหม่จะถูกแทรกผ่านขึ้นกรอง ซึ่งหมายความว่าแต่ละโหนดใหม่จะต้องสร้างที่ลูกที่มีอยู่ถัดไป สิ่งที่ฉันหมายถึงคือเด็ก ๆ จะถูกเลื่อนระดับจากซ้ายไปขวา ตัวอย่างเช่นฮีปต่อไปนี้:

    0
   / \
  1   2

จะต้องมีการสร้างตามลำดับนี้: 0, 1, 2 (ตัวเลขเป็นเพียงดัชนีพวกเขาไม่ได้บ่งชี้ถึงข้อมูลจริงที่เก็บอยู่ในโหนดนั้น)

สิ่งนี้มีนัยสำคัญสองประการ:

  1. ไม่มีโหนดใดในระดับไม่มีระดับที่เต็มไปอย่างสมบูรณ์k+1k

  2. เนื่องจากเด็กถูกสร้างจากซ้ายไปขวาจึงไม่มี "ช่องว่าง" ระหว่างโหนดในระดับหรือสถานการณ์ดังต่อไปนี้: k+1

        0
       / \
      1   2
     / \   \
    3  4    6
    

(นี่จะเป็นฮีปที่ผิดกฎหมายตามคำจำกัดความของฉัน) ดังนั้นวิธีที่ดีที่จะคิดว่าฮีปนี้คือการใช้อาเรย์ของฮีปที่ไม่สามารถมี "การข้าม" ในอาเรย์ของอาร์เรย์ได้

ดังนั้นฉันคิดว่าอุปนัยอาจเป็นวิธีที่ดีในการทำสิ่งนี้ ... บางทีบางสิ่งบางอย่างที่ต้องจัดการกับแม้แต่กรณีแปลก ๆ สำหรับ n ตัวอย่างเช่นการเหนี่ยวนำโดยใช้ความจริงที่ว่าแม้กองที่สร้างขึ้นในแบบนี้จะต้องมีโหนดภายในที่มีลูกหนึ่งคนสำหรับคู่ n และไม่มีโหนดดังกล่าวสำหรับคี่ n ไอเดีย?


@DaveClarke: ไม่มาก; คำถามที่เชื่อมโยงเป็นผลมาจากความเข้าใจผิดเกี่ยวกับชิ้นส่วนของบรรณาธิการที่เราทิ้งไว้เพื่อการอ้างอิง
Raphael

คุณได้ลองการเหนี่ยวนำมากกว่าการตอบสนองหมายเลขโหนด จำนวนแทรก?
Raphael

@DaveClarke: เพราะอะไร มันเป็นคำถามที่ถูกต้องในตัวเอง imho
Raphael

BTW คำถามไม่เกี่ยวกับกอง การอ้างสิทธิ์ถือสำหรับต้นไม้ไบนารีที่สมบูรณ์
Ran G.

คำตอบ:


8

ถ้าฉันได้รับคำถามของคุณอย่างถูกต้องฮีปที่ได้รับนั้นเป็นเพียงต้นไม้ไบนารีที่สั่งซื้อซึ่งในคำสั่งฉันหมายความว่าระดับ th สามารถครอบครองได้หลังจากระดับk - 1เต็มแล้วและแต่ละระดับถูกครอบครองจากซ้าย ไปทางขวาโดยไม่ข้ามkk1

จากนั้นหลักฐานก็เป็นเช่นนี้

  1. ต้นไม้ที่สมบูรณ์แบบของความลึกมี2 k + 1 - 1โหนดk2k+11
  2. สมมติว่ากองถึงความลึกkดังนั้น k
    1. ถึงระดับต้นไม้สมบูรณ์แบบ (และมีโหนด2 k - 1อยู่ที่นั่น)k12k1
    2. ในระดับสุดท้ายมีโหนดทั้งหมดซึ่งเป็นโหนดทั้งหมดn2k+1
  3. ใบไม้แต่ละอันในระดับ th มีต้นกำเนิด ยิ่งกว่านั้นใบต่อเนื่องสองใบนั้นมีพ่อเหมือนกัน (อาจยกเว้นโหนดสุดท้ายซึ่งพ่อมีลูกเพียงคนเดียว)k
  4. ดังนั้นจากโหนดที่ระดับk - 1 , n - 2 k + 12k1k1เป็นผู้ปกครองและที่เหลือ2k-1-n-2 k +1n2k+12เป็นใบไม้2k1n2k+12
  5. จำนวนใบทั้งหมดคือ ซึ่งให้สิ่งที่คุณต้องการ
    n2k+1+2k1n2k+12

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

โอ้ว้าวฉันไม่รู้จักเงื่อนไขเหล่านี้ด้วยซ้ำ ขอบคุณที่ชี้นำสิ่งนี้
Ran G.

"ถึงระดับ k − 1 ต้นไม้สมบูรณ์แบบ (และมี 2 ^ k - 1 โหนดที่นั่น)" และ "ดังนั้นจาก 2 ^ (k − 1) โหนดที่ระดับ k − 1" ดูเหมือนจะขัดแย้งกับข้อความ หรือฉันหายไปบางอย่าง
เอเดรียน h.

@adrianh ( ) โหนดในทรีย่อยทั้งหมด2 k - 1โหนดเฉพาะในระดับสุดท้าย (ดังนั้นในทรีย่อยทั้งหมดมี2 k - 1 + 2 k - 2 +2k12k1โหนด.)2k1+2k2+...
Ran กรัม

อาคุณพูดถูกต้องขอบคุณมากสำหรับความกระจ่าง!
เอเดรียน h.

11

นี่คือข้อพิสูจน์เชิงตรรกะที่ง่ายกว่า

ใบสุดท้ายคือดัชนี ผู้ปกครองของมันอยู่ที่ดัชนีn / 2และในทำนองเดียวกันไม่มีองค์ประกอบดังกล่าวที่ผู้ปกครองของมันคือ ( n / 2 + 1 )nthn/2องค์ประกอบ ดังนั้นใบไม้จะถูกจัดทำดัชนีจาก n / 2+1 ถึง nn/2+1)thn/2

ดังนั้นจำนวนของใบ = n- = ( n / 2 )(n/2)(n/2)


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