top | item 43156012

(no title)

farazbabar | 1 year ago

This is similar to an approach I use but instead of a queue, I accomplish this using a ring buffer that wraps around and overwrites entries older than window size. We maintain a global window aggregate, subtract ring buffer slot aggregate for entries dropping out and accumulate new entries into new slot aggregate while adding it to the global aggregate. Everything is o(1) including reads, which just returns the global window aggregate.

discuss

order

packetlost|1 year ago

I've implemented something similar! Except it was persistent and intended for non-volatile flash media. Was a lot of fun to implement.

gotoeleven|1 year ago

How does this work for max rather than sum?

throwaway_1more|1 year ago

Max is not like sum, you can just maintain one value over the window and update from new ones arriving immediately?