算法的点点滴滴
文章平均质量分 68
ddppqq
这个作者很懒,什么都没留下…
展开
-
基数排序简介及LSD、MSD实现
一、简介 基数排序(Radix Sort)属于“分配式排序”(Distribution Sort)。基数排序法是属于稳定性的排序。设待排序列为n个记录,d个关键码,关键码的取值范围为Radix,则进行基数排序的时间复杂度为O(d(n+Radix)),其中,一趟分配时间复杂度为O(n),一趟收集时间复杂度为O(Radix),共进行d趟分配和收集。 二、算法基本思想 基数排序的原创 2013-11-03 13:07:21 · 3888 阅读 · 0 评论 -
神奇算法小集合
整理一些今天看到的比较神奇的算法,可以拓宽下自己的思维和视野。一、一个Float类型的绝对值 一个数值的绝对值可以通过与符号位的按位与操作来实现,对于IA32 32bit处理器,符号位是0x80000000,对于IA32 64bit来说,符号位是0x8000000000000000。下面代码为double类型的取绝对值操作。double x;/* make x = abs(原创 2013-10-20 19:49:03 · 1433 阅读 · 0 评论 -
随机从长度未知的数组中抽取数字,且保证每个元素被抽到的概率相同
一、题目简介 这个题目出自一道面试题,题目描述如下: 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N平均分布的,也就是说V[N]里面任意一个数都有1/N的机会被取出,要求空间复杂度为O(1原创 2013-10-19 18:00:48 · 1946 阅读 · 0 评论 -
并查集与十度好友
一、问题简介 首先说下问题吧,这里就不做广告了,在社交网络中,假设A和B是好友,B和C是好友,如果A和C不是好友,那么就说C是A的二度好友,在一个有10万人人际网络中,如何在时间O(n)时间里,找到某个人的十度好友。 查了下网上人们对这个问题解法的思路,大致有两种观点:(1)BFS;(2)并查集。对BFS解法的解释挺多,思路都比较相近,现总结如下: (1)设要查找十度原创 2013-10-18 22:06:55 · 1058 阅读 · 1 评论 -
在线算法和离线算法的概念
一、在线算法 在计算机科学中,一个在线算法是指它可以以序列化的方式一个个的处理输入,也就是说在开始时并不需要已经知道所有的输入。相对的,对于一个离线算法,在开始时就需要知道问题的所有输入数据,而且在解决一个问题后就要立即输出结果。例如,选择排序在排序前就需要知道所有待排序元素,然而插入排序就不必。 因为在线算法并不知道整个的输入,所以它被迫做出的选择最后可能会被证明不是最优的,对在线算原创 2013-10-08 20:27:00 · 4515 阅读 · 0 评论 -
说说双调排序
一、简介 双调排序(Bitonic Sort)属于排序网络(Sorting Network)的一种,它是一种可以并行计算的排序算法。 要理解双调排序,首先需要理解双调序列,双调序列定义如下: 如果序列满足以下两个条件之一,则称之为双调序列: 存在一个0≤k≤n-1,使得为升序序列,为降序序列;或存在一个标号的循环移位,使得条件1)满足。 如果n为原创 2013-11-10 19:23:03 · 2992 阅读 · 0 评论 -
一道有关hash的POJ题目:POJ1200 Crazy Search
一、题目描述 这里把题目粘过来吧,网页是在http://poj.org/problem?id=1200,题目描述如下: Description: Many people like to solve hard puzzles some of which may lead them to madness. One such puzzle could be finding原创 2013-12-27 21:39:13 · 1835 阅读 · 0 评论 -
判断无向图和有向图是否有回路
一、无向图回路的判断 对于无向图,判断其是否有回路有两种方法,如下所示: 1、利用深度优先搜索DFS,在搜索过程中判断是否会出现后向边(DFS中,连接顶点u到它的某一祖先顶点v的边),即在DFS对顶点进行着色过程中,若出现所指向的顶点为黑色,则此顶点是一个已经遍历过的顶点(祖先),出现了后向边,若完成DFS后,则图中有回路;另外,无环图中变的个数E 2、在图的邻接表表原创 2014-03-06 00:22:47 · 31321 阅读 · 4 评论