有哪些算法惊艳到了你?
Reservoir Sampling(
这是我在今年求职过程中面试的时候被问到的,因为之前很少接触Streaming的算法,在听到这个题目的时候被惊呆了,根本不能理解:
给一个Streaming的Data,未知长度,要求在Streaming结束后返回N个Data,且是等概率的。
在听到这个问题的时候简直惊呆了。如果Streaming长度已知为L,当然对于每一个Data,我生成一个N/L的概率即可。但是长度未知,也即概率未知,怎么可能在Data来的时候判断要不要保留这个Data,还能保证是等概率的……百思不得其解。
事后一番研究,才发现了这类算法,算法之简单令人惊叹:
首先保留前N个Data,对于后面来的Data以N/i的概率选择是否保留,i为当前Data序号,保留的话在原来保留的N的Data中随机剔除一个。最后返回这N的即可。
证明也很容易,奇妙得地方在于在计算概率的时候,出现了很长的,可以前后上下不断约掉的分式。相互约去之后剩下的概率刚好是N/L,L为总长度。简直美妙极了!
显然这类算法也非常有用,因为在实际问题中会出现大量需要在Streaming的数据中进行Sample,为下一步处理数据做准备的情形。而这竟然有一个O(L)的算法,真是太惊艳了!
继续阅读
全部内容当前AI大模型哪家最好用?各家主要擅长哪些领域?普通人使用,推荐哪个?
作为一个日常工作中有超过 50% 时间都在与各种大模型对话的人,想跟大家分享一下我在使用各个主流模型时的一些体验和感受。 Google Gemini 系列 优点: 1. 极其便宜:无论是免费额度还是付费使用,价格都非常有优势。 2. Context Window 超级大:1-2M 的上下文长度,基本能覆盖绝大部分任务场...
编程的难点在于哪里?是逻辑、数学、算法,还是模块、框架、接口的掌握?
编程最大的难点其实都不在这些技术层面上,而是在于如何把一个复杂的现实问题转化为计算机可以理解和执行的形式。 我之前中提到过一个观点:"部署、运维等工具的逐渐标准化使得重复造轮子的需求越来越弱,越来越多的工程师核心任务并不是研发,而是整合(Integration)。"这背后的深意是:现在的编程工作,难点已经从"如何实现"...
Docker 的应用场景在哪里?
Docker for Data Science at Trulia 和一点感悟 - Hello陈然! - 知乎专栏 我们在Trulia Data Science Team 里面推行了Docker。一方面是搭建API做SOA,另一方面也在帮助每一个Data Scientist 都可以直接从最开始算法分析、开发一直做到部署...
