大佬教程收集整理的这篇文章主要介绍了c – 在文件输入期间跟踪最高5个数字,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
struct largestowners { String name; double amountowned; };
我正在使用带有300个名称和金额的ifstream从文件中读取它.
如何在输入过程中跟踪最高的5个数字?所以我不必排序,而是在ifstream输入期间跟踪它.
我的目标是在输入过程中跟踪5个最高量,以便我可以在以后轻松打印出来.并节省时间/处理,而不是将来做
我知道我可以将它存储在一个数组或另一个结构中,但是在ifstream输入结构期间有什么好的算法来跟踪它吗?
4025025 Tony 66636 John 25 Tom 23693296 Brady 363 Bradley 6200 Tim
谢谢!
首先使用前5个数字填充min-heap.之后,对于每个传入元素,将其与最大的5个数字(最小堆的根)中的最小值进行比较.如果当前数字小于该值,则不执行任何操作,否则删除第5个最大值(从最小堆弹出)并将当前数字插入最小堆.
删除和插入最小堆将花费O(log n)时间.
例如,请考虑以下数字流:
1 2 5 6 3 4 0 10 3
最小堆最初将具有1 2 3 5 6.
遇到4时,1被删除,4被插入.@H_126_41@min heap现在看起来像这样:2 3 4 5 6
遇到0时,没有任何反应.
在遇到10时,2被删除,10被插入.@H_126_41@min heap现在看起来像这样:3 4 5 6 10
遇到3时,没有任何反应.
所以最后一组5个最大的元素都包含在堆中(3 4 5 6 10)
你甚至可以调整它来跟踪输入数字流中的k个最高元素.只需将最小堆的大小更改为k即可.
以上是大佬教程为你收集整理的c – 在文件输入期间跟踪最高5个数字全部内容,希望文章能够帮你解决c – 在文件输入期间跟踪最高5个数字所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。