
算法设计和数据结构
uestclr
这个作者很懒,什么都没留下…
展开
-
计数排序和基数排序
计数排序和基数排序是属于线性级时间复杂度的排序方式,虽然没有冒泡,选择,快排算法那些让人广为所知,但是这两种排序方式在某些场合非常适用。计数排序是基数排序的基础,最为关键的是:基数排序算法是后缀数组的的关键(当然后缀数组也可以用快排),后缀数组是用于处理字符串的一种非常优秀的数据结构,可以高效的处理很多字符串问题,比如重复子串,回文子串等等,这里不讨论后缀数组的问题。1、计数排序算法计数排原创 2015-11-30 09:40:11 · 2386 阅读 · 0 评论 -
洗牌算法
原文地址:http://blog.youkuaiyun.com/feixiaoxing/article/details/6860339/扑克牌洗牌是我们生活中比较喜欢玩的一个游戏。那么我们有没有什么办法自己设计一个扑克牌洗牌的方法呢?在c运行库当中有一个随机函数rand,它可以生成0~32767之间的任意数。那么有没有可能利用这么一个函数对我们扑克牌进行随即洗牌呢? 在这里我抛砖引玉转载 2016-05-08 16:43:34 · 531 阅读 · 0 评论 -
有序二叉树的实现
有序二叉树,二叉搜索树的实现。完成了二叉树有序插入,节点删除,中序遍历,树高,搜索,删除匹配数据等功能。三个文件,bt.h,bs.cpp,test.cpp.#ifndef _BT_H_#define _BT_H_#include using namespace std;typedef struct bstreenode{ int data; struct bstreenode *原创 2016-03-01 19:52:12 · 2745 阅读 · 0 评论 -
图的深度优先遍历
一、深度优先查找原理:深度优先搜索可以从图的任意顶点开始,然后把该顶点标记为已经访问,每次迭代的时候,深度搜索紧接着处理与当前顶点邻接的未访问顶点(如果有若干个顶点,则任意选择一个,也可以按自己的条件选择),让这个过程一直持续,直到遇到一个终点——该点的每个邻接点都被访问过了,然后在该终点上后退一条边,并继续搜索未访问的点,直到返回起点(就是开始搜索的点),直到发现起点的所有邻接点都已经访问过原创 2016-04-11 21:50:40 · 1984 阅读 · 0 评论 -
动态规划算法经典案例
动态规划的关键点:1、最优化原理,也就是最有子结构性质。这指的是一个最优化策略具有这样的性质,无论过去状态和决策如何,对前面的决策所形成的状态而言,余下的决策必须构成最优策略,简单来说就是一个最优化策略的子策略总是最优的,如果一个问题满足最优化原理,就称其有最优子结构性质。2、无后效性,指的是某个状态下的决策的收益,只与状态和决策相关,与达到该状态的方式无关。3、子问题原创 2016-02-29 20:14:52 · 60325 阅读 · 10 评论 -
两个字符串的最长公共子串-后缀数组
求解两个子串的最长公共子串一般常用的是动态规划算法,但是用后缀数组来处理这一类问题会非常简便,在很多刷题系统中基本都有最长公共子串的处理,所以这一类问题是比较重要的。c++版本的后缀数组处理最长公共子串问题。#include #include using namespace std;#define MAX 1000int ranked[MAX]={};int sa[MAX] ={原创 2016-02-03 19:55:55 · 1112 阅读 · 0 评论 -
逆波兰表达式
逆波兰表达式又称作后缀表达式,在四则混合运算的程序设计中用到。例如:1+2写成后缀表达式就是12+4+5*(3-2)的后缀表达式就是4532-*+后缀表达式在四则运算中带来了意想不到的方便,在生成过程中自动保持了优先级;生成逆波兰表达式的算法如下:我们首先的用两个栈结构来存储运算符和操作数,在java中有Stack类可以用;从做到右遍历我们输入的中缀表达式:1、如果原创 2016-02-03 19:27:13 · 9081 阅读 · 0 评论 -
单向线性链表的实现
用c实现的单向线性链表,支持追加,插入节点,删除节点,清空,删除匹配节点,链表反转,有序插入等操作。分为三个文件list.h包含链表结构和函数的声明。list.cpp是各种函数的实现,test.cpp包含测试代码。/*list.h*/#ifndef _LIST_H#define _LIST_H#include using namespace std;typedef stru原创 2016-03-01 17:15:03 · 1182 阅读 · 0 评论 -
递归程序设计心得与体会
用递归设计出来的程序总是简洁易读,极具美感。但是对于刚入门的学者来说,当遇到递归场景时,自己却难以正确的设计出合理的递归程序。博主曾经也是困惑不已,写的多了,也就渐渐的熟悉了递归设计。特谈一下自己的感受,有些术语是博主自己总结,有可能有不合理之处。学习递归程序设计,建议首先应该从小规模的递归开始研究,小规模就是说自己可以调试跟踪代码,且自己不会晕。这个过程完成之后,才能熟练掌握递归层次原创 2016-06-19 16:59:46 · 10961 阅读 · 11 评论