สอบถาม algorithm ในการหาค่าล่าสุดจากเวลาที่ผ่านมา

กระทู้คำถาม
ความต้องการไม่ซับซ้อนครับ ใครเทพโปรแกรมมิ่งช่วยคิดหน่อยครับ

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

สมมุตินะครับ เรามี input ความถี่คงที่ 1 Hz นั่นก็คือ 1 ช่องของ buffer ต้องมี 60 ค่าถูกมั๊ยครับ
ทั้ง 60 ช่อง = 3600 ค่า คราวนี้พอถึงนาทีที่ 61 มันลบค่าช่องแรกทิ้งไปแล้วฟิลใหม่ทำให้ค่าตกไป = 3600 - 60 = 3540
แล้วหลังจากนั้นค่าถึงจะค่อยๆ นับขึ้น

วิธีแก้ปัญหา
1. ง่ายมาก สร้างเป็น buffer แบบวินาทีแทน แล้วเก็บมันทุกวินาที ก็จะละเอียดขึ้น แต่ต้องใช้ buffer = 60x60 = 3600 = ช่อง
ติดปัญหาอย่างเดียวครับ RAM เต็ม

ตอนนี้อยากหา algorithm ใหม่ก่อนครับ วิธีแก้ปัญหาโดยการเพิ่ม RAM หรือ optimized พวก hardware ไว้เป็นตัวเลือกสุดท้ายกรณีหมดหนทางจริงๆ

.. เพิ่มเติมข้อมูลครับ ..
เขียนบน Controller ครับ dspic30F4011 ram จำกัดมากครับมี 2KB ตอนนี้เหลือให้ใช้อีกประมาณ 150 byte

การทำงานที่ถูกต้องนะครับ
เนื่องจาก input คงที่ 1 Hz 60 นาทีที่ผ่านมามันก็ต้องแสดงผล 3600 คงที่ตลอดเวลา ไม่ใช่เดี๋ยวขึ้น เดี๋ยวลง ถูกมั๊ยครับลองคิดตาม

ส่วนวิธีแก้ปัญหาโดยใช้ buffer 61 ช่องแทน แล้วค่อยเคลียร์ช่องแรกทิ้งก็ไม่ได้เหมือนกันครับ ถ้าทำแบบนั้น
เพราะเราจะได้ค่า = 3600 จาก 60 นาทีที่แล้ว + นาทีที่ 61:00 - 61:59 = 3600 + 60 = 3660 ถูกมั๊ยครับ
แล้วพอขึ้นนาทีที่ 62:00 ค่าถึงจะตกเหลือ 3600 เพราะเราเคลียร์ค่า buffer ทิ้งไปแต่พอค่าไปถึงนาทีที่ 62:01 ค่าจะขึ้นไปใหม่เป็น 3601 3602 .. 3660 แล้วตกเหมือนเดิม ก็คือปัญหาเดียวกับที่ผมเผชิญอยู่ แต่ว่าแทนที่ค่าจะตกจะกลายเป็นค่าโด่งขึ้นไปแทนแล้วค่อยตก
แก้ไขข้อความเมื่อ
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่