随笔分类 -  算法

摘要:http://www.ccf.org.cn/sites/ccf/xytsnry.jsp?contentId=2774505979501P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这个方程非常重 阅读全文
posted @ 2013-12-19 17:15 blockcipher 阅读(125) 评论(0) 推荐(0)
摘要:奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。集束搜索(又名定向搜索,Beam Search 阅读全文
posted @ 2013-08-03 10:44 blockcipher 阅读(174) 评论(0) 推荐(0)
摘要:http://bigocheatsheet.comKnow Thy Complexities!Hi there! This webpage covers the space and time Big-O complexities of common algorithms used in Computer Science. When preparing for technical interviews in the past, I found myself spending hours crawling the internet putting together the best, averag 阅读全文
posted @ 2013-05-24 21:15 blockcipher 阅读(222) 评论(0) 推荐(0)
摘要:BloomFilter–大规模数据处理利器转自下面两篇文章http://www.dbafree.net/?p=36http://www.sigma.me/2011/09/13/hash-and-bloom-filter.html Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。一.实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络爬虫程序(web crawler)。由于网络间的链接错综复杂,爬虫在网络间爬行很可能会形成“环”。为... 阅读全文
posted @ 2013-02-27 13:47 blockcipher 阅读(449) 评论(0) 推荐(0)
摘要:大数据量的问题是很多面试笔试中经常出现的问题,比如 google、淘宝、百度、 腾讯 这样的一些涉及到海量数据的公司经常会问到。下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。1.Bloom filter适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集基本原理及要点:对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash 阅读全文
posted @ 2013-02-27 13:39 blockcipher 阅读(166) 评论(0) 推荐(0)
摘要:英特尔® 多线程应用开发指南目录: 应用线程化 本章节将涵盖并行性能领域的常见主题,同时也会偶尔涉及针对 API 的问题。 1-1 - 预测与测量并行性能 1-2 - 循环修改增强数据并行性能 1-3 - 粒度与并行性能 1-4 - 负载平衡与并行性能 1-5 - 避免或消除人为相依性有利于揭示并行性 1-6 - 任务取代线程工具 1-7 - 发掘有序数据流的数据并行性 同步处理 本章节将主要谈论采用哪些技术来降低同步处理对性能的负面影响。 2-1 - 管理锁争用:大、小关键代码段(Critical Section) 2-2 - 采用线程化 API 提供的同步例程替代手工编码 2-3 阅读全文
posted @ 2010-09-23 12:03 blockcipher 阅读(1054) 评论(0) 推荐(1)
摘要:使用英特尔编译器进行自动向量化 自动向量化是英特尔编译器提供的一个可以自动的使用SIMD指示的功能。 在处理数据时, 编译器自动选择MMX™, Intel® Streaming SIMD 扩展(Intel® SSE, SSE2, SSE3 和SSE4)等指令集, 对数据进行并行的处理。 使用编译器提供的自动向量化功能是提高程序性能的一个非常有效的手段。自动向量化在IA-32和Intel® 64的平台上均提供很好的支持。英特尔编译器提供的自动向量化相关的编译选项如下所示。”/Q”开头的选项是针对Windows平台的, “-“开头的选项是针对Linux*和Mac平台的 阅读全文
posted @ 2010-09-17 06:58 blockcipher 阅读(1080) 评论(0) 推荐(0)