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

ค่ามัธยฐานในกระแสของจำนวนเต็ม (เรียกใช้จำนวนเต็ม) ใน C++


คำชี้แจงปัญหา

ระบุว่าจำนวนเต็มถูกอ่านจากสตรีมข้อมูล หาค่ามัธยฐานขององค์ประกอบที่อ่านด้วยวิธีที่มีประสิทธิภาพ

หลังจากอ่านองค์ประกอบที่ 1 ของสตรีมแล้ว - 10 -> ค่ามัธยฐาน - 10

หลังจากอ่านองค์ประกอบที่ 2 ของสตรีมแล้ว - 10, 20 -> ค่ามัธยฐาน - 15

หลังจากอ่านองค์ประกอบที่ 3 ของสตรีมแล้ว - 10, 20, 30 -> ค่ามัธยฐาน - 20 เป็นต้น...

อัลกอริทึม

<ก่อน>1. ใช้ฮีปสูงสุดทางด้านซ้ายเพื่อแสดงองค์ประกอบที่น้อยกว่าค่ามัธยฐานที่มีประสิทธิภาพ และใช้ฮีปขั้นต่ำทางด้านขวาเพื่อแสดงองค์ประกอบที่มากกว่าค่ามัธยฐานที่มีประสิทธิภาพ2 หลังจากประมวลผลองค์ประกอบที่เข้ามา จำนวนองค์ประกอบในฮีปจะแตกต่างกันอย่างมาก 1 องค์ประกอบ3 เมื่อฮีปทั้งสองมีจำนวนองค์ประกอบเท่ากัน เราเลือกค่าเฉลี่ยของข้อมูลรูทของฮีปเป็นค่ามัธยฐานที่มีประสิทธิภาพ4 เมื่อฮีปไม่สมดุล เราเลือกค่ามัธยฐานที่มีประสิทธิภาพจากรูทของฮีปที่มีองค์ประกอบมากกว่า

ตัวอย่าง

#include โดยใช้เนมสเปซ std;#define MAX_HEAP_SIZE (128)#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])inline void Exch(int &a, int &b){ int aux =ก; ก =ข; b =aux;}bool Greater(int a, int b){ return a> b;}bool Smaller(int a, int b){ return a =0) { สูงสุด =A[0]; } ผลตอบแทนสูงสุด; } จำนวน int (){ ส่งคืน heapSize + 1; } เป็นโมฆะ heapify (int i) { int p =parent (i); if( p>
=0 &&comp(A[i], A[p]) ) { Exch(A[i], A[p]); heapify(p); } } int deleteTop(){ int del =-1; ถ้า ( heapSize> -1) { del =A[0]; Exch(A[0], A[heapSize]); heapSize--; heapify(พาเรนต์(heapSize+1)); } กลับเดล; } bool insertHelper (คีย์ int) { bool ret =false; ถ้า (heapSize  

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

ผลลัพธ์:101520