基础算法学习
文章平均质量分 59
计算机 考试、考研中常遇到的各种小算法:
比如循环递归、各种排序策略、迷宫问题、背包问题、地图着色、问题八皇后问题详解
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
清水迎朝阳
多年windows下c++客户端开发,或多或少踩了很多坑,积累了一些经验
展开
-
树系列之二:树的存储结构
一:树的存储结构1 双亲表示法// 双亲表示法// 找双亲易,找孩子难template class TreeNode{public: TreeNode(Type i=0,int pa=0):data(i),parent(pa) { }private: Type data; int parent;};原创 2012-03-19 15:09:11 · 12510 阅读 · 1 评论 -
排序算法之 插入排序 直接插入排序 及 希尔插入排序
插入排序 By Yujian冒泡排序、选择排序、插入排序为...原创 2013-03-14 14:35:16 · 1707 阅读 · 0 评论 -
排序算法之 堆排序
堆排序 By yujian选择排序算法,是选择最值,然后将其调整到合适位...原创 2013-03-11 15:01:34 · 14981 阅读 · 3 评论 -
排序算法之 选择排序
选择排序 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 常用的选择排序方法有简单选择排序和堆排序。简单选择排序在介绍选择排序算法前,我们再回顾下冒泡算法。冒泡算法是通过两两比较,不断交换,逐个推进的方式,来进行排序的。一次遍历,得......原创 2013-03-11 14:17:32 · 33984 阅读 · 8 评论 -
基础算法系列--前言
怎样才能学好程序?个人认为,一个好的程序员必须具备两方便的素质: 一是知识,二是逻辑思维。知识需要不断积累,可能知识就是一个小小的问题,你知道了,就能方便的运用上,不知道的话,便可能花费时间查阅资料。相对于知识,逻辑更显重要。知识可以积累,而逻辑主要看程序员的分析问题、解决问题的能力,这种能力不仅仅要求积累,更要求懂得分析、推演与归纳,考验的逻辑思维。逻原创 2012-02-15 17:33:00 · 998 阅读 · 0 评论 -
基础算法之一: 循环
循环是一种思维, 不是一种算法, 但它却是算法的基础。 几乎所有的算法中,都包含着循环,有一大部分算法就是以循环为主。而循环,又以FOR 循环常用,在此,主要介绍一下FOR循环。 FOR 循环,有什么好介绍的呢,大家司空见惯,熟悉的不能再熟悉了,岂不是浪费口舌? 我也曾经以为对于FOR循环,已经懂了,已经理解了。 但,有时,我却不能很好的应用,这说明:原创 2012-02-15 17:33:19 · 2171 阅读 · 0 评论 -
基础算法之二:递归
递归用处很广,可以将复杂问题简单化。很多问题都可以使用递归算法或结合递归算法得到解决。那么,设计递归算法的关键是什么? 其关键之处在于,正确分析出2种类型的节点:出口节点和入口节点一 算法关键: 出口节点 , 入口节点 递归问题可看做是由各个节点构成,而所有节点只能分为出口节点、入口节点两类。 1)出口节点: 可直接计算此节点的值,原创 2012-02-15 17:33:53 · 1280 阅读 · 1 评论 -
基础算法之三: 合并两个有序数组
算法思想: 将两个有序数组合并为一个有序数组,也就是对两个数组中的所有元素进行排序。 与一般排序所不同的是,各个数组都是排好序的,现在要做的是将各个排好序的数组进行归并,归并后,仍是有序的。 要设计这个归并数组的算法,须先找出其中蕴含的规律: 1) 对于同一个数组的各个元素,它们之间不用进行比较,因为它们是有序的原创 2012-02-17 16:01:27 · 20316 阅读 · 2 评论 -
基础算法之四--排序:之基数排序
本文 转载自网络, 偷个懒,因为原文程序很清晰 ,省的自己写了。如果,作为转载, 与前面的构不成一个系列, 因此就当做翻译吧 -----其实是转载 呵呵, 望见谅 基数排序是非比较排序算法,算法的时间复杂度是O(n)。 基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,翻译 2012-03-02 14:27:56 · 1020 阅读 · 0 评论 -
基础算法之四--排序:之桶排序
桶排序是迄今为止最快的一种排序,其时间复杂度仅为Ο(n),也就是线性复杂度。其主要思想在于: 建立有序的桶, 遍历待排序元素,在遍历此元素的同时,将其映射到对应的桶中。 这样,遍历一遍, 所有的元素就在桶中有了映射。 而桶是有序的, 再从有序的桶中,将数据重新置于数组中 , 这样就完成了排序。1. 最简单的桶排序算法示例:待排数字[6 2 4 1 5原创 2012-02-24 16:24:32 · 1236 阅读 · 0 评论 -
基础算法之四--排序:之堆排序
[本文内容主要摘自网上资料,本来想自己写的,可是看着有的资料已经写的很好了,就整理转载了过来,再此,谢过原作者了:》] 堆排序: 是一种选择排序,但它的效率比直接选择排序要高,因为,可以借助于树形结构来减少比较次数。 定义: n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质):原创 2012-02-24 13:17:52 · 987 阅读 · 0 评论 -
基础算法之四--排序:之希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种改进版本。希尔排序是基于插入排序的以下三点性质而提出改进方法的:当待排记录数n很小时, 直接插入排序效率较高当待排记录基本有序时,直接插入排序效率高, 可以达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位因此,希尔排序做出了对应的改进: 1)将整个待排记录分割成为若干子序列,分原创 2012-02-23 15:47:47 · 1093 阅读 · 0 评论 -
基础算法之四--排序:之快速排序
与简单排序不同,快序排序所需的比较次数较少,是内部排序中速度较快的一种排序方法。算法思想: 分-------------- 将待排序集合划分为2部分 (一部分小于准则值,一部分大于等于准则值)这个分的过程是不断迭代的,直到无法再分为止。 算法过程演示:原创 2012-02-23 12:55:18 · 1132 阅读 · 0 评论 -
基础算法之四--排序: 之选择排序
三种简单排序的区别:冒泡排序是 未排序部分,相邻元素之间两两比较移动,从而找出最值。 插入排序是 某个待排序元素与以排元素两两比较, 从而找到待排元素所应在的位置 选择排序是 在未排部分,一次遍历找到最大值,然后将其置于未排部分的末尾位置。选择排序、冒泡排序,都是遍历未排序部分, 所不同的是: 选择排序,遍历时,不进行移动原创 2012-02-22 15:00:32 · 1111 阅读 · 0 评论 -
基础算法之四--排序: 之插入排序
冒泡排序两两比较指的是: 未排序的相邻元素之间的两两比较,对于已排好的元素,它不再访问。 而插入排序中的比较则是: 在未排序的元素中,取出一个,将它与已排好的元素进行比较,从而确定其位置。 是某未排元素,与诸多已排元素的逐次比较。其排序原创 2012-02-22 12:50:19 · 1030 阅读 · 0 评论 -
基础算法之四--排序: 之冒泡排序
冒泡排序,是所有排序中用的最多和最易想起的一种排序算法。其排序思想: 对未排序的相邻元素进行两两比较,找出未排序元素中的最值,并将其置入应有位置。 算法特点: 1) 一次遍历,即可在未排序元素中,找到一个最值(最大值或最小值)2) 当进行第i次遍历...原创 2012-02-21 16:40:51 · 1339 阅读 · 0 评论 -
基于冒泡的重要性,再详谈冒泡算法
是不是觉得冒泡算法很简单?是的,确实很简单,中心思想是两两交换。那你能写出冒泡算法吗?你能解释冒泡算法中的各层含义是什么吗?你又能写出几种冒泡算法呢?曾经在面试中,遇到过冒泡算法,我能模糊的写出,却纠结于参数边界值的控制。为了不再继续模糊下去,为了不至于被人鄙视----硕士毕业3年了,连这个小算法也搞不好。于是趁此离职时期,好好的分析一下。原创 2013-01-02 10:37:12 · 7093 阅读 · 1 评论 -
基础算法之五-查找: 折半查找
折半查找 又称为二分查找。这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列。 折半查找(二分查找)是一种简单而又高效的查找算法,其查找长度至多为㏒2n+1(判定树的深度),平均查找长度为㏒2(n+1)-1,效率比顺序查找要高,但折半查找只能适用于顺序存储有序表(如对线性链表就无法有效地进行折半查找原创 2012-05-28 11:10:04 · 12290 阅读 · 3 评论 -
基础算之五排序: 二叉排序树
二叉排序数或者是一棵空树,或者是一棵具有以下性质的二叉树:(1)若它有左子树,则左子树上所有结点的数据均小于根结点的数据。(2)若它有右子树,则右子树上所有结点的数据均大于根结点的数据。(3)左、右子树本身又各是一棵二叉排序树。实际操作: 我们都知道,对一个东西进行操作,无非就是增删查改,接下来我们就聊聊其中的基本操作。 插入:相信大家对“排翻译 2012-05-28 14:44:54 · 1421 阅读 · 0 评论 -
回溯算法---迷宫问题
节点定义:class CNode {public: CNode(); virtual ~CNode(); int i;//该方块的横坐标 int j;//方块的纵坐标; int passable;//该方块是不是通道; bool ifhavepass;//是否已经走过了该方块 bool operator==(CNode&p);原创 2012-08-02 14:45:23 · 1285 阅读 · 0 评论 -
回溯算法---01背包问题
背包问题: 给定n种物品(每种物品仅有一件)和一个背包。物品i的重量是wi ,其价值为pi ,背包的容量为w。问应如何选择物品装入背包,使得装入背包中的物品的总价值最大? l 如果在装入背包时,物品可以切割,即可以只装入一部分,这种情况下的问题称为背包问题。 l 在装入背包时,每种物品i只有两种选择,装入或者不装入原创 2012-07-20 15:02:36 · 21252 阅读 · 2 评论 -
回溯算法---四色图着色
回溯算法基本思想: 判断第一个节点的各个候选值{ //当无未进行判断的候选者时,则退出 当将某候选值赋予第一个节点时,判断此时是否存在一个解路径。 若不存在,则继续判断下一个候选值。 } 具体算法思想如下: NUM : 解路径上节点的个数原创 2012-07-02 14:40:50 · 11455 阅读 · 0 评论 -
回溯算法
1 什么是回溯法 回溯法实际是穷举算法,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最优解,则返回上一种状态继续穷举。回溯法有“通用的解题法”之称,其采用了一种“走不通就掉头”思想作为其控制结构,用它可以求出问题的所有解和任意解。 它的应用很广泛,很多算法都用到回溯法,例如,迷宫,八皇后问题,图的m着色总是等都用到回溯法,当然其原创 2012-06-29 17:07:22 · 4805 阅读 · 2 评论 -
回溯算法---八皇后问题
采用上节回溯算法的思想,解决八皇后问题,先看执行结果: 当NUM=4时,有两个解: 当 NUM=5时,有10个解: 当NUM=6时,有4个解: 当NUM为7时,有40个解: 当NUM为8时,有92个解: 当NUM为16时, 其中的一个解如下: 当NUM为30时,其中的一个解如下: 源原创 2012-06-29 17:26:11 · 2533 阅读 · 0 评论