高性能算法与固定近似比算法

以前做研究写论文,总爱用高性能这一词来形容所提的算法,有点王婆卖瓜的感觉。当然,所研究的算法的性能是不错的,但是否是高性能,自己不敢说一定。最近翻读Vazirani的《Approximate Algorithms》一书,仔细重读了他的前言,发现他给出了高性能算法的一个定义,即高性能算法的解与最优解的误差只有2%或5%。2%的误差要求可能有点高,但5%应该还是不错的。如果以此为衡量,先前所做的算法少部分能达到这个要求,因为所做的算法大都在10%以内。但博士论文里的工作还是达到了5%的要求,主要是采用了改良的技术。多说一句,为了提高2%,花费了无数的日日夜夜的调试与总结,没办法,启发式的方法都带有这个特征,很多好的性质都是通过实验观察总结得到的。

另外,先前研究看不上所谓的带有固定近似比的算法,因为大多数近似比都在2或3/2左右,甚至有的是O(logN),因而人为不值深入研究。看了Vaziranni的解释,自己深感羞愧和无知,其实固定近似比的算法是值得研究的,具体的原因,可以看看Varizani如何理解的。

“对于寻找高性能算法的实践者来说,在最优解的因子2或者更坏的因子O(logn)以内的算法能有多好?更进一步,由此看来,近似保证的改进(比如从因子2到3/2)能有用到何种程度?

我们讨论一下这两个问题并指出这些论断中的一些谬误。近似保证仅仅反映算法关于大部分病态实例的性能。或许把近似保证看成促使我们更深入地研究问题的组合结构并发现利用这个结构的更强有力工具的一种度量更合适。已经注意到当得到有更好保证的算法的时候,构造紧例子的困难性明显增大。实际上,对于一些今年来的算法,得到紧例子已经独立成为一篇论文。实验已证实这些算法和其它复杂算法对于典型事例能达到想要的2%到5%量级的误差界限,虽然它们最坏情形误差界限要高得多。另外,应将已被理论证明的算法看成核心算法思想,这个思想需要很好地融入特定应用中所产生的事例。”

大师的见解入木三分。正所谓偏见比无知离真理更远,为自己以前的偏见深感惭愧。其实,固定近似比算法能让我们更好地认识和了解问题的结构和特点,这才是固定近似比算法的重要性。从自己的研究经历来看,基于固定近似比算法开发的一些算法实际效果也不错,最明显的就是并行机调度里面的WSPT算法。

做研究时,不能一路往前跑,有时需要停下来看看自己曾经走过的路。

时间: 2024-11-06 07:14:45

高性能算法与固定近似比算法的相关文章

近似直径算法的 GraphChi 实现

1. GraphChi 1.1 简介 GraphChi 是由卡耐基梅隆大学设计, 可以在单机上进行高效大规模计算的框架, 区别于将图的信息全部存储在内存当中, GraphChi 利用单机计算机海量的硬盘进行存储, 由于硬盘与内存的访问速度差距很大, 为了弥补使用硬盘存储带来的缺陷, 他们设计出并行滑动窗口技术, 用来减少硬盘的随机读写. 1.2 并行滑动窗口技术 将整个图谱划按照点的顺序分成不同的分片,每个分片能够完全在内存中进行 处理. 如下图所示: 对每个分片中的入边按照源点进行排序, 基于

7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有 codis,或者 twemproxy,都有.有一些 redis 中间件,你读写 redis 中间件,redis 中间件负责将你的数据分布式存储在多台机器上的 redis 实例中. 这两年,redis 不断在发展

算法导论——lec 13 贪心算法与图上算法

之前我们介绍了用动态规划的方法来解决一些最优化的问题.但对于有些最优化问题来说,用动态规划就是"高射炮打蚊子",采用一些更加简单有效的方法就可以解决.贪心算法就是其中之一.贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解. 一. 活动选择问题 [问题]对几个互相竞争的活动进行调度:活动集合S = {a1, a2, ..., an},它们都要求以独占的方式使用某一公共资源(如教室),每个活动ai有一个开始时间si和结束时间fi ,且0 ≤ si &

《算法之道》精华 算法设计部分

<算法之道>精华 算法设计部分 本书作者邹恒明,作者另有一本书<数据结构之弦>,以及<操作系统之哲学原理>都是非常好的书 这本书能够算得上是深入浅出.文笔非常好,作者加入了非常多自己的思考 本文仅包含算法设计部分,算法分析略去,并没有严格依照章节顺序来记录 附录 算法随想 有人喜欢遍历,希望踏遍千山万水,人生丰富多彩:有人一生贪婪,眼界不宽,及时行乐:有人注定穷搜,辛辛苦苦,收获有限:有人善用时空均衡,用最少的时间办最多的事情.十分精明:有人会分治,再难的问题也能解决.

【数据分析/挖掘底层算法】原创实现二项分布算法以及应用

7.2 二项分布算法 作者 白宁超 2015年8月15日22:51:38 摘要:本文继统计学几何分布.二项分布.泊松分布研究的深入,基于各种分布基础概念和核心知识介绍之后.就各种分布的实现和真实环境下应用方是目的.在进行一系列相互独立实验,每次既有成功,又有失败的可能,且单次实验成功概率相等.在一系列试验中求成功的次数.这种情况下适用于本算法.本算法中在n次伯努利试验中:试验n次得到r次成功的概率.二项分布的期望.二项分布方差的具体实现. 目录 统计学之离散概率分布的运用 统计学之几何分布.二项

从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法,”看毛片“算法)

转载请加上:http://www.cnblogs.com/courtier/p/4273193.html 在开始讲这个文章前的唠叨话: 1:首先,在阅读此篇文章之前,你至少要了解过,什么是有限状态机,什么是KMP算法,因为,本文是从KMP的源头,有限状态 机来讲起的,因为,KMP就是DFA(Deterministic Finite Automaton)上简化的. 2:很多KMP的文章(有限自动机去解释的很少),写得在我看来不够好,你如果,没有良好的数学基础就很难去理解他们(比如下图), 因为,你

scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处 ====================================================================== K-means算法分析与Python代码实现请参考之前的两篇博客: <机器学习实战>k

常见经典排序算法学习总结,附算法原理及实现代码(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了详解.每一种算法都有基本介绍.算法原理分析.算法代码. 转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/47280135 插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过

转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处 ======================================