Java Program to Find Median in a Stream2025 年 5 月 6 日 | 阅读 3 分钟 在计算和算法设计领域,数据集的中位数是人们面临的常见问题类型。中位数给出了按值升序排列的值的分布的中间点,是另一种衡量集中趋势的指标。 然而,当数据以流的形式到来并持续定期接收时,计算中位数可能非常具有挑战性。这是因为数据集不是一次性可用的,反复对大型数据集进行排序非常耗时。 理解挑战对于静态数据集,查找中位数涉及排序并选择中间元素:如果数据集的元素数量是奇数,则中位数是数据集的中间项。当均值具有偶数大小的群组时,中位数是通过对中间群组的两个均值进行平均而生成的数字,这一点尤其正确。 然而,在流式处理环境中 这是一个数据集;组件可以一个接一个地进来。这使得每次都以 O(NlogN) 的时间复杂度对整个数据集进行排序的想法失效。这意味着必须有一种方法来有效地处理传入的元素,并仍然具备计算中位数的能力。 使用双堆方法为了解决这个问题,我们使用了两个堆的组合 最大堆:数据集的较小一半存储在此处。该堆中的最大元素影响堆的较低一半的中值。 最小堆:回想一下,declspec 声明了一个存储在此结构中的数据集的较大一半。此堆中的最小元素定义了该堆的较高一半的中值。 通过维护这些堆 中位数可以始终以 O(1) 的常数时间找到。 添加新元素需要对数时间 O(logN)。 算法添加新数字
平衡堆
查找中位数
文件名:MedianFinder.java 输出 Stream: 12 -> Median: 12.0 4 -> Median: 8.0 5 -> Median: 5.0 3 -> Median: 4.5 8 -> Median: 5.0 7 -> Median: 6.0 优点效率:这种方法非常适合实时系统。 可扩展性:更新也具有对数时间复杂度,这使得这种类型的树可以随着数据集进行扩展。 结论通过理想的双堆结构,可以几乎实时地确定流序列的中位数。这种方法具有简单性和高效性的优点,使其适用于许多情况。从简单地制作小数据集的数组到处理高速数字计算系统中的海量流数据,这种 Java 实现高效且可靠。 下一主题银行家算法 Java |
该接口允许我们异步执行线程上的任务。它存在于 java.util.concurrent 包中。ExecutorService 有助于维护线程池并为它们分配任务。它还提供在有任务排队到……的便利。
阅读 10 分钟
问题陈述:给定一个二进制矩阵(一个每个单元格仅包含数字 0 或 1 的网格),任务是确定从 0 单元格到 1 单元格所需的最小移动次数。...
7 分钟阅读
给定两个数字。第一个数字是整数 n,第二个数字是非负数,小于或等于 n,表示为 k。任务是找出所有错排的总数...
阅读 6 分钟
将数据映射到固定大小哈希的算法称为哈希算法。Java 中的哈希算法是加密哈希函数。哈希算法或哈希函数的设计方式使其表现得像一个单向...
阅读9分钟
Playfair密码由Charles Whetstone于1889年提出。但它以一位朋友Lord Lyon Playfair的名字命名,因为他推广了它的使用。它是最流行的对称加密技术之一,属于替换密码。它是一种编码程序,它...
阅读9分钟
在当前的计算环境中,最大化现代多核 CPU 的潜力对于提高 Java 应用程序的性能至关重要。多线程对于实现这一目标至关重要,因为它允许同时执行多个任务。但是,要在 Java 中实现有效多线程,...
阅读 3 分钟
基于模式的编程是编码的一个迷人方面,它允许开发人员使用字符和符号创建具有视觉吸引力的设计。在 Java 中,创建交替模式不仅可以磨练你的编程技能,还可以增强你对循环和控制的理解,这是一项令人振奋的练习...
5 分钟阅读
事件是 Java 中最重要的概念之一。对象状态或行为因执行操作而发生的变化在 Java 中称为事件。操作包括按钮单击、按键、页面滚动或光标移动。Java 提供了一个 java.awt.event 包...
7 分钟阅读
Java 编程语言一直在不断发展,以满足现代软件开发的需求。这次演进中的两个重要里程碑是 Java 8 和 Java 9。这些版本为语言、库和运行时环境带来了重大的变化和增强。Java 8 和...之间的主要区别
阅读 6 分钟
在不断发展的编程世界中,跟上编程语言的最新增强功能和特性至关重要。随着 Java 9 的发布,开发人员接触到了各种旨在提高语言功能并使编码更高效的新功能。其中一个...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India