应用算法的实际情况——简单就是美
应用算法的实际情况——简单就是美
应用算法的实际情况——简单就是美
实际上,高级算法未必是最优解,古典算法有时也不错。进一步说,与知名算法相比,简单算法更好的情况也不罕见。
Hatena Bookmark的Firefox扩展的搜索功能的尝试
介绍一个Hatena中的实际例子。Hatena Bookmark中有Firefox扩展这个工具,通过它可以将Hatena Bookmark与浏览器集成,十分方便。该扩展可以针对用户以前保存过的书签数据进行增量(incremental)搜索(如图7.1所示)。
我们团队讨论了该搜索功能的实现方法,最后结果是,由于增量搜索中搜索动作发生频率很高,而且又是在客户端计算,所以计算量必须少。一些人的数据量能达到一万条以上,所以选择了Suffix Array。
Suffix Array这个数据结构主要用于文本数据等的高速查找。查找本身很快,但必须事先花费很长时间创建数据结构。而且,要让Suffix Array在应用程序中达到实用程度,如何缩短这段时间,就成了要解决的课题。当时我们采用了刚刚发现的IS方法[1]解决。
多次尝试之后,我们用Firefox扩展中唯一可用的JavaScript语言实现了IS方法,但实际结合到应用程序之后并没有达到满意的效果。尽管速度有所提高,但预处理仍然需要花费很长时间,用户添加书签时进行的预处理会给机器造成很大负担。
经过痛苦的选择之后,我们放弃了Suffix Array,而是使用Firefox扩展内部的SQLite功能,用SQL的like进行部分查找(也就是线性查找)。这会让数据量大的人搜索速度降低,但也是没办法的事,只能妥协于这种方法了。
不过,实际完成后发现,使用上完全没有任何问题。曾经担心过的几万条数据量的问题,也由于现代计算机的性能提高,查找上完全没有问题……所以就这样了。
得到的经验
从这个例子中得到的经验就是,评测和估算非常重要,并且偶尔尝试一下简单的实现也很重要。为大规模数据进行优化固然很重要,但从本例中可见,数据较少时优化没有任何意义。而且它也说明,通过人的感觉来推断数据量多少是不可靠的。
以前面所说的IS方法为例,当时JavaScript上Suffix Array
并没有好的实现,所以不得不自己编写,但如果是Perl,那么CPAN上有大量各种算法的开源实现函数库,其他语言也一样。
灵活运用这一类实现,可以缩短开发时间。话虽如此,我们不建议在不了解其内容的情况下使用。必须适当了解它做了哪些操作,否则就可能做出错误的选择。
或者实现的功能过多。这时可以仅实现必要的地方,既能抑制工作量,单位成本获得的效果也更高。重点就是平衡性。
图书详细信息:http://www.cnblogs.com/broadview/archive/2011/08/17/2143341.html
转载于:https://www.cnblogs.com/broadview/archive/2011/09/01/2162191.html
应用算法的实际情况——简单就是美相关推荐
- 简单之美——系统设计黄金法则
最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自己的一些实践教训,让我觉得应该把这些资料汇总整理一下.如果要从讨论不同系统的众多资料中总结一条黄金法则的话,那只有一个词--&qu ...
- 系统设计黄金法则:简单之美
http://blog.sciencenet.cn/blog-414166-562616.html [注:本文已发表在2012年第5期<中国计算机学会通讯>.] 最近多次看到系统设计与实现 ...
- 转简单之美——系统设计黄金法则
作者: 包云岗 发布时间: 2012-05-19 13:06 阅读: 3036 次 推荐: 1 原文链接 [收藏] 最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自 ...
- 【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
[排序算法]冒泡排序.简单选择排序.直接插入排序比较和分析 写在前面: 本文简单介绍了冒泡排序.简单选择排序.直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时.进一步,我 ...
- 简单就是美--张小龙的产品的思路
什么才是简单--从腾讯微信说起 我相信男生都用了,女生用了也不会告诉我们.大家都用了吧?我摇到了一个TINA的三公里以外的.如果大家想加我的话可以一起摇一下,我们可以互加一下.但是深圳的同事,你们在1 ...
- 量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)(转)
量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python) 原文地址:http://blog.csdn.net/u012234115/article/details/728300 ...
- 《简单之美》摘录和读后感
<简单之美>之美一书,对于软件开发的过程,在很多地方可以启迪智慧.作者通过讲述软件开发中耳熟能详的种种问题,从思想层面深刻剖析,最后还是归结到以人为本这一核心思想.以人为本不是一句空话,核 ...
- 数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引
数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引 [建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页:建立快速有效的索引:根据相关性对网页进行公平准确的排序.我们在介绍 Googl ...
- [原创]linux简单之美(二)
原文链接:linux简单之美(二) 我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事: 1 section ...
- 转:ReLU激活函数:简单之美
纯粹学习收藏. 转载地址:https://blog.csdn.net/cherrylvlei/article/details/53149381 导语 在深度神经网络中,通常使用一种叫修正线性单元(Re ...
最新文章
- 实训C++语言设计——Date日期系统实现
- 从一个前端项目实践 Git flow 的流程与参考
- Docker 学习笔记之二
- 014_CSS伪类选择器
- linux 内核参数 杨,Linux 内核参数
- win7安装laravel
- finally块不被执行的情况总结
- java jxl 写 excel文件_java采用jxl写入一个Excel文件
- 学习Spark——那些让你精疲力尽的坑
- 原版英文书籍《Linux命令行》阅读记录6 | 重定向
- 思科、华为远程登录配置小结
- 【SpringMVC笔记】Ajax 入门(jQuery.ajax)
- 15muduo_base库源码分析(六)
- Go 2提上日程,官方团队呼吁社区给新特性提案提交反馈
- php匿名聊天室开源,[开源项目]基于WebSocket的匿名聊天室
- linux百度云下载脚本,百度网盘Linux版下载
- 网络编程工程实训(DVB+CentOS+libpcap+分析帧格式)
- 他发现了古老疟疾背后的元凶,也在质疑声中开创了致病生物的新时代
- 【图像处理算法常用数据集】整理第二弹
- unity塔防游戏怪物转向_英雄塔防物语游戏下载-英雄塔防物语官方版 v2.3.8最新版...