想象一下,你是一个批发商,你的客户有客户。交易是由您客户的客户完成的,但是当您看到每笔交易时,您只需要向您的客户收费,并且只需要担心您的客户的存款被用完。这是一项预付费服务。
交易是针对服务的,其价值是服务持续时间 * 费率的函数。
我需要一种方法,通过汇总客户累积的费用来观察我的 000 万客户账户的存款用尽情况。我与客户的客户没有任何财务安排。
当一个给定的服务实例启动时,我的客户的 BurnRate 会随着任何给定服务的收费率被添加到我代表我的客户提供的所有正在进行的服务的累积费率中而增加。当服务终止时,BurnRate 也会降低。
一个好的候选似乎是min heap或priority queue,但在我看来,传统的树/映射也可以工作,因为最左边的节点,即从迭代器读取的第一个节点,会产生相同的信息。
至少有可能 N 个客户可能有完全相同的存款耗尽时刻,AKA 生存时间 (TTL) 计算为“现在”+ (CurrentBalance/BurnRate),因此多图可能比堆更合适。同样,任何基于经验的见解都会非常有帮助。
我的主要问题是哪个性能更好,堆还是映射/多映射?其次,堆会优雅地处理重复值吗?
TVMIA 可提供任何性能洞察力,尤其是来自经验或基准。
PS:回顾文献,我省略了一个重要的要求。当新服务启动或进程内服务结束时,我必须通过删除客户的旧 TTL 节点来更新数据结构,并用新的 TTL 插入一个新节点。看来 priority_queue 不支持这些操作。
此外,在The C++ Programming Language, 4th Edition 的第 924 页第 31 章中,Stroustrup 强烈暗示使用树来实现 priority_queue 是首选方法。由于我上面的“oops”要求只能通过树来满足,我的选择很明确,因此不会进行基准测试来比较两种方法——至少在这个项目完成之前不会。
感谢所有出席(或潜伏)并分享他们的知识和经验的人。