以合理有效的方式跟踪“在线”价值流的总体中值。

mediantracker的Python项目详细描述


合理有效地跟踪“在线”价值流的中值 时尚。

用法:

from mediantracker import MedianTracker
tracker = MedianTracker()
tracker.add(1)
tracker.add(2)
tracker.add(3)
tracker.add(4)
assert tracker.lower_median() == 2
assert tracker.upper_median() == 3

MedianTracker支持高效的中值查询和动态查询 添加到值列表中。它提供了上中位数和下中位数 到目前为止看到的所有价值观中。可以跟踪任何__cmp__()对象, 除了数字类型。add()tracker需要log(n)时间 使用n项;lower_median()upper_median()在常量中运行 时间。由于必须存储所有值,因此内存使用量与 添加值的数目(o(n))。

可以通过MedianTracker上的迭代来访问这些值, 尽管它们不是以任何特定方式订购的:

sum = 0.0
for val in tracker:
    sum += val
mean = sum / len(tracker)

如果要“在线”处理值,请使用此模块,一次一个,作为 它们到达后,需要知道每个新值之后的新中值(或 一批值)。如果你只想知道整个名单的中位数 更有效的线性时间中值(或更一般的第k次最小值 选择)算法。使用此模块需要o(nlogn)时间和 额外的o(n)空间来计算n项的中值。另一方面, 一个MedianTracker只需要o(nlogn+m)时间 n添加和m中间查询,而运行传统的 非增量中值算法m需要o(n*m)次。

最后,一些资料定义了偶数长度列表的中值为 中间两个值的平均值。这是容易和有效的计算 (恒定时间):

tracker = MedianTracker([1, 2, 3, 4])
median = (tracker.lower_median() + tracker.upper_median()) / 2.0
assert median == 2.5

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Google Billing Library:QueryPurchaseAsync:取消购买的订阅资源未返回   java转换列表mapsturct中的单个对象   java简单算法。我做不好   包含集合的@ManyToMany映射的java JPA2持久性   在Java中序列化和反序列化对象时发生BuffereImage错误   java使用ui:param传递值并在backingbean中访问它们   java从应用程序读取配置。yml至POJO列表地图   java中在while循环外部调用文件值   java如何与来自不同类的UI交互   java如何在jTable中显示2D数组?   在Java 8中,类为什么不从接口继承默认方法?   java类。getAnnotation和getAnnotations无法正常工作   java处理pagertabstrip上的触摸事件   java GWT和struts2异常   用Java解析HTTP查询字符串   java这段代码SQL注入安全吗?