算法
清风明月coder
这个作者很懒,什么都没留下…
展开
-
动态规划之钢筋切割问题
目录一 问题描述二 原理三 代码四 输出结果一 问题描述二 原理三 代码四 输出结果原创 2016-07-07 23:43:28 · 2410 阅读 · 0 评论 -
堆排序
转载地址 : http://blog.csdn.net/xiaoxiaoxuewen/article/details/7570621堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶原创 2016-06-18 22:55:57 · 434 阅读 · 0 评论 -
平衡二叉树理解
转载:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右转载 2016-08-04 09:39:55 · 1046 阅读 · 0 评论 -
贪心算法 - 哈夫曼编码 Huffman
转载地址 : http://blog.csdn.net/xuefeng0707/article/details/7844834哈夫曼编码:一种字符编码方式,常用于数据文件压缩。压缩率通常在20%~90%。主要思想:采取可变长编码方式,对文件中出现次数多的字符采取比较短的编码,对于出现次数少的字符采取比较长的编码,可以有效地减小总的编码长度。例如,在转载 2016-08-04 10:34:47 · 4368 阅读 · 0 评论 -
B树和B+树原理
转载地址 : http://blog.csdn.net/tonyxf121/article/details/8393545#t4B+/-Tree原理B-Tree介绍B-Tree是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结转载 2016-08-04 14:45:52 · 3803 阅读 · 0 评论 -
一 冒泡排序
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子例子为从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |第一趟排序(外循环)第一次两两比较6原创 2017-12-14 00:25:05 · 209 阅读 · 0 评论 -
二 选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。java代码/** * 选择排序 * */public class原创 2017-12-14 00:33:15 · 278 阅读 · 0 评论 -
三 插入排序
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。插入排序非常类似于整扑克牌在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。如果输入数组已经是排好序的话,插入排原创 2017-12-16 23:36:46 · 326 阅读 · 0 评论 -
动态规划之最长公共子串
一 问题引入在生物学中,经常需要比较两个不同生物的DNA,一个DNA串由由一串称为碱基的的分子组成,碱基有鸟嘌呤,腺嘌呤,胞嘧啶,胸腺嘧啶四中,我们用英文字母的首字母表示四种碱基,那么DNA就是在有限集{A,C,G,T}上的一个字符串。例如某种生物的DNA序列为:S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA,S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA,我原创 2016-07-17 00:06:32 · 16842 阅读 · 6 评论 -
归并算法理解
例如有如下向量: 25,10,7,19,3,48,12,17,56,30,21对此序列进行归并排序的步骤为: 归并算法函数为public void MergerSort(int[] v, int first, int last) { if (first + 1 < last) {原创 2016-06-18 23:10:00 · 476 阅读 · 0 评论 -
约瑟夫环 猴子选大王的问题
问题:有M只猴子围成一圈,按序每只从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王代码如下package Joseph.Ring;import java.util.Scanner;public class JosephRing原创 2015-10-29 18:15:18 · 1359 阅读 · 0 评论 -
一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛
1 题目描述一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛。假设每次生的都是母牛,并且也遵守4年才生育并生母牛的原则。且所生的牛都不会死问20年之后共有多少头牛2 采用递归实现,代码如下package arithmetic.cowNumber;public class CowNumber { /* * years表示多少年后原创 2015-11-02 23:34:17 · 7205 阅读 · 2 评论 -
背包问题
题目描述有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?原理如下图,假设背包承重为 0 到 10 ,所选物品关系图首先要明确这张表是至底向上,从左到右生成的。为了叙述方便,用e2单元格表示e行2列的单元格,这原创 2016-07-12 22:31:00 · 2911 阅读 · 2 评论 -
算法导论->算法基础->2.1插入排序 (从小到大)
1 伪代码2 执行过程图3 c语言实现完整代码#include#includetypedef struct MyArray{ int *pbase; int length;}MyArray,*PMyArray;PMyArray initMyArray();void traverse(PMyArray pMyArray);void原创 2015-08-25 22:28:39 · 594 阅读 · 0 评论 -
快速排序
快速排序采用的思想是分治思想。快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准原创 2015-11-09 18:23:11 · 412 阅读 · 0 评论 -
希尔排序理解
转载地址: http://blog.csdn.net/cjf_iceking/article/details/7951481 插入排序的算法复杂度为O(n2),但如果序列为正序可提高到O(n),而且直接插入排序算法比较简单,希尔排序利用这两点得到了一种改进后的插入排序。一. 算法描述希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量原创 2016-06-18 22:53:58 · 10616 阅读 · 3 评论 -
四 希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因原创 2017-12-17 02:15:22 · 350 阅读 · 0 评论