FreeeLinux's blog

没有迷路的人

排序:
默认
按更新时间
按访问量
RSS订阅

Manacher算法总结

Manacher算法 算法总结第三弹 manacher算法,前面讲了两个字符串相算法——kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 “马拉车”算法。 相对于前面介绍的两个算法,Manacher算法的应用范围要狭窄得多,但是它的思想和拓展kmp算法有很...

2017-02-22 18:50:43

阅读数 241

评论数 0

单源最短路径复习--Dijkstra算法和Floyd算法

昨天复习了一下单源最短路径问题,今天总结一下。解决单源最短路径问题,我们熟知的算法首先就是Dijkstra算法了。Dijkstra算法的核心就是贪心思想。我在以前的博客中也写过这个算法:图的拓扑排序、关键路径、最短路径算法 – C++实现,现在看以前的博客,我的代码思路还是很清晰的。Dijkstr...

2017-02-09 12:06:32

阅读数 626

评论数 0

完全二叉树统计节点个数【使用二分搜索】

【题目】 给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。 给定树的根结点root,请返回树的大小。 ”打眼“一看,这是一道递归求解数的高度的题,于是我不到30秒敲了几行代码就解决: class CountNodes ...

2016-12-16 02:29:27

阅读数 1894

评论数 0

线性时间排序--计数排序、基数排序、桶排序

之前总结的都是通过比较方法进行排序的算法,我们知道,通过比较排序算法平均时间复杂度最多为O(lgN)。 这篇文章来分析一下非比较的线性时间排序方法,计数排序,基数排序,桶排序。 一:计数排序 正如它的名字,计数排序是通过计算待排序元素小于等于该元素的次数这个属性,然后利用该属性将元素以次...

2016-12-06 01:38:46

阅读数 322

评论数 0

SplayTree伸展树的实现

伸展树,久仰大名。以前知道天网的那个搜索引擎貌似就用了伸展树。今天特地来实现以下。 伸展树介绍 伸展树(Splay Tree)是特殊的二叉查找树,又叫自适应查找树。它有一项奇特的技能,它可以自调整,根据结点访问的情况自调整。伸展树当某个节点被访问时,伸展树会通过旋转使该节点成为树根。这样做的好...

2016-12-04 01:52:12

阅读数 445

评论数 0

KMP算法详细解读

PS:自从学会了写伪代码,现在算法水平大大的提升了。KMP看了别人的博客看懂了,然后自己写一次性就AC了。 KMP入门请参考这几位大神:http://www.cnblogs.com/yjiyjige/p/3263858.html http://www.ruanyifeng.com/blog/2...

2016-11-14 01:20:11

阅读数 331

评论数 0

UFSet并查集的定义与实现

上篇写到集合,干脆把并查集一块写了。 一:什么是并查集 并查集是一种用途广泛的集合,也称为disjoint set,它支持一下3中操作: 1. Union(Root1, Root2):把子集合Root2并入到集合Root1中。要求Root1和Root2互不相交,否则执行合并。 2.Find(x...

2016-11-13 17:40:57

阅读数 686

评论数 0

位向量实现的bitset集合

PS:停电了一天,唉,无语,昨天晚上特意9点多在实验室躺着休息了一会,等着他们说好的11.59来电,我11.50去厕所刷牙洗脸,坐在电脑旁,打算把一天的思路敲出来,结果确实窗外黑压压一片,依旧没有来电。 用位向量实现集合,采用16位无符号短整数数组bit_vector[]作为集合元素的存储,1...

2016-11-13 11:42:59

阅读数 1575

评论数 1

辗转相除法、埃拉托色尼筛选法、牛顿迭代法证明与C++实现

1.辗转相除法 辗转相除法是用来计算两个数最大公约数的。 对于m,n求最大公约数,公式为: gcd(m,n) = gcd(n, m mod n) 证明:    //最大公约数用e表示。 对于m=n时,显然e = m = n:        m>n时,有m = kn + m mod n 令r ...

2016-11-11 02:38:11

阅读数 2274

评论数 0

跳表的实现插入删除搜索算法详解

跳表久闻其名,以前写过AVL树,红黑树,都是平衡结构。但是跳表呢,它不是树形结构,它是通过链表实现的。 我们知道,在链表中查找一个元素的时间复杂度是O(n)。 在一个有序链表中,我们如果在链表中部额外增加一个结点,那么查找某个元素的次数将会是 n/2+1 次。类似于二分查找。 有了这个思想,那么现...

2016-11-10 13:51:30

阅读数 1390

评论数 0

MD5算法--C++实现

函数说明: update函数:这是一个可重入的函数。每次调用传进去的字符串都会和之前的字符串链接。当然,第一次调用update时,之前的字符串长度为0。count[]数组内部保存了字符串长度的位数,所以每次用count[]数组计算时要注意byte与bit的转化。 调用该函数时,首先会计算字符串长度...

2016-11-01 13:48:34

阅读数 2120

评论数 0

红黑树的插入与删除算法

一:旋转操作 将几种情况之前先看一下旋转操作。 1.rotate_left 代码如下: void rb_tree::rotate_left(node_type* x) //x is the rotate point { assert(x != nil_); nod...

2016-10-29 22:43:33

阅读数 556

评论数 0

归并排序递归及非递归实现(自然合并排序)

一:归并排序 普通的归并排序递归实现比较简单,就不在此赘述,一看就懂。下面贴上代码。 #include using namespace std; template void merge(T arr[], const int start, const int middle, const int...

2016-09-29 19:07:10

阅读数 2756

评论数 0

经典算法之棋盘覆盖问题 --分治法

一:算法分析 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖。 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如果该特殊点在某一部分,我们就去递归他,如果不在某一部分,我们假设一个点为特殊点,同样递归下去...

2016-09-29 11:44:51

阅读数 21332

评论数 1

全排列问题

一:全排列问题算法描述如下: 举例: 345的全排列分别为 345 354    435 453    534  543, 可见将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。 又举例:45的全排列有 45 54 可见将第一个数分别与后面的数交换后输出即为45的全排...

2016-09-28 20:26:03

阅读数 427

评论数 0

N皇后问题 --递归及回溯解决方案

一:介绍 n 皇后等价于要求在一个 n*n 的棋盘上放置 n 个皇后,使得任何两个皇后都不能被放在同一行或同一列或同一斜线上。 二:算法设计 对于 n 后问题,我们用 n 元组 x[1:n] 表示它的解。其中 x[i] 表示皇后放在棋盘的第 i 行的第 x[i] 列。 由于左上角到右下角的主对角线...

2016-09-28 17:34:52

阅读数 2059

评论数 0

求最大子序列长度及最大字段和 --动态规划法C++语言

证明我就不够出了,我参考了这位博主的博客点击打开链接,以及这是麻省理工算法导论关于该问题的讲解视频点击打开链接,我就是参看以上看明白的。 以下代码目的仅为记录和分享,采用C++语言描述 腾讯出的题目是这样的: 一:递归描述: #include #include #include using...

2016-09-23 13:46:15

阅读数 1988

评论数 0

单链表的逆置 --C语言泛型编程

本文章采用泛型算法实现了单链表的建立与逆置。代码如下: 一:头文件 #ifndef _LIST_H #define _LIST_H #include #include #include typedef struct list_node{ void *dat...

2016-09-22 15:56:07

阅读数 462

评论数 0

顺序表的实现--C语言泛型编程

一:顺序表代码实现 #ifndef _SEQ_LIST_H #define _SEQ_LIST_H #include #include #include #include #define ElemType float //以float类型测试算法通用性,而不是以惯用...

2016-08-21 20:48:20

阅读数 1178

评论数 0

图的拓扑排序、关键路径、最短路径算法 -- C++实现

一:拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)...

2016-08-20 14:11:21

阅读数 4782

评论数 1

提示
确定要删除当前文章?
取消 删除
关闭
关闭