
数据结构与算法
chengmaoning
这个作者很懒,什么都没留下…
展开
-
直接插入排序java描述
插入排序算法是一个对少量元素进行排序的有效方法。时间复杂度O(n^2),空间复杂度比较好,为O(1)。算法描述:第一个元素认为已经是排好的。取出下一个元素,在已经排序的元素中从后向前扫描。如果该元素(已排序)大于新元素,将该元素移到下一位置。重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。将新元素插入到下一位置中。重复步骤2.插入排序跟我们打扑克牌时,手牌的排序方原创 2013-03-14 18:33:53 · 827 阅读 · 1 评论 -
消息摘要算法及md5
消息摘要算法介绍:消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。(摘要可以比方为指纹,消息摘要算法就是要得到文件的唯一职位)特点:无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同原创 2015-03-28 23:18:37 · 5173 阅读 · 0 评论 -
希尔Shell排序
package com.chengmaoning.shellsort;public class ShellSort { public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; /** * @param args */ public static void main(String[] args) { // T原创 2013-09-23 13:24:44 · 555 阅读 · 0 评论 -
树、二叉树、满二叉树、完全二叉树概念分清
自由树自由树是一个连通的,无回路的无向图。令G=(V,E)为一个无向图。下面的表述是等价的。1) G是自由树。2) G中任意两个顶点由唯一一条简单路径得到。3) G是连通的,但从E中去掉任何边后得到的图都是非连通的。4) G是无回路的,且|E|=|V|-1。5) G是连通的,且|E|=|V|-1。原创 2013-09-09 23:00:00 · 3204 阅读 · 0 评论 -
C实现bitmap位图
转载:点击打开链接所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。例如对于号码89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.基本的操作:#define WORD 32#defin转载 2013-08-28 21:58:10 · 1678 阅读 · 0 评论 -
堆排序java语言描述
堆排序综合了插入排序和合并排序的优点。堆排序的运行时间为O(nlgn),并且是原地排序(像插入排序一样,在同一数组内排序)。这里用到了一种堆数据结构,堆二叉树又叫二叉堆,分为两种:最大堆和最小堆。在最大堆中,最大堆特性是指除了根以外的每个节点i,有array[parent[i]] >= array[i];最小堆相反。下面采用最大堆排序进行数组排序(也可以采用最小原创 2013-03-18 18:54:13 · 891 阅读 · 0 评论 -
冒泡排序java语言描述
思路:将第一个数依次与所有后面数据比较,若后面数据较小,与第一个数交换,直到这一轮比较完毕,这样结果第一个数就是数组里最小的数;从第二个数开始,依次与后面所有的数比较,方法跟上面一样,这样一轮下来第二个位子存放了第二小的数,以此类推。经过n-1轮比较,小的数就被依次排到最前,像冒泡一样,故名为冒泡排序Bubble Sort。 public class BubbleSort原创 2013-03-30 14:56:58 · 758 阅读 · 0 评论 -
动态规划学习笔记
一、 动态规划概述动态规划(dynamicprogramming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划是通过组合子问题的解进而解决整个问题的。动态规划适用于问题包含子问题,各子问题又包含公共的子子问题。动态规划对每个子子问题只求解一次,将其结果保存在一张表(或者说是一个二维矩阵)中,在求解子问题的过程中查表递归调用子子问题原创 2013-08-22 21:56:23 · 841 阅读 · 0 评论 -
合并排序 java语言描述
合并排序Merge Sort是一种有效的排序算法,最坏情况运行时间为Θ(nlgn)。用到了分治法以及递归思想,下面先对这两者做简单介绍。分治法(divide and conquer),无论 从汉语还是英文字面上,你都能轻易理解它的意思,把大问题分解成小问题,然后一个一个治理解决,各个击破!递归(recurrence):就是方法可以不停的调用自己,一层一层进行下去,直到条件不满足原创 2013-03-15 16:16:29 · 936 阅读 · 0 评论 -
约瑟夫问题
约瑟夫环问题笔试中比较常遇见的一道算法题:由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,下一个人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.下面给出java面向过程的实现方法,读起来可能比较绕,大家参照注释并放到eclipse运行哈应该可以明白:-)import java.util.Scanner;public转载 2013-05-24 16:25:32 · 640 阅读 · 0 评论 -
红黑树java实现
红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间转载 2013-05-08 16:22:51 · 715 阅读 · 0 评论 -
二叉查找树——java语言描述
二叉查找树上执行基本操作的时间 与树的高度成正比。二叉查找树中关键字的存储方式满足以下二叉查找树性质:设x为二叉查找树中的一个节点。如果y是x的左子树中的一个节点,则key[y] 如果y是x的右子树的一个节点,则key[x] 下面转载一篇二叉查找树java 实现的代码,供参考学习。api的实现方式不只一种,比如查找,可以用循环遍历的方式也可以用递归的 方式实现;节点删除也有更简转载 2013-04-28 13:10:28 · 552 阅读 · 0 评论 -
单链表java语言实现
java语言虽然没有指针,但是并不妨碍实现链表,因为java中的引用就相当于C或C++中的指针。并且 由于java的引用特性实现链表更为简洁 。 public class LinkList { public Link first; public int size; public LinkList() { first = null; size = 0; } /**转载 2013-03-22 10:37:15 · 654 阅读 · 0 评论 -
HashMap源码浅析
HashMap源码浅析此文档主要参考了网络上的介绍散列表的优秀文章和官方文档及源码,经过认真研读加以理解后写出了此篇小文,如有错误不足之处,欢迎大家指正~~一、 概念介绍1.1 什么是hash?Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这原创 2013-04-03 10:03:25 · 749 阅读 · 0 评论 -
java实现数据结构——栈Stack与队列Queue
栈(Stack)作为一个先进后出(FILO) 的线性结构,只支持在栈顶的插入和弹出。队列(Queue)作为一个先进先出(FIFO) 的线性结构,支持在队首获取元素,在对尾插入元素。 栈的实现:public class StackDemo { private Object[] data = null; private int capacity; private int top转载 2013-03-20 10:42:44 · 928 阅读 · 0 评论 -
快速排序java语言描述
快速排序是一种很好的排序算法 ,最坏运行时间为Θ(n^2),期望的运行时间为Θ(nlgn),并且是原地排序。像合并排序一样,快速排序用到了分治法和递归的思想。数组nums[start,end]被划分为两个(可能为空)子数组nums[start,q-1]和nums[q+1,end],使得nums[start,q-1]中的每个元素都小于nums[q],nums[q+1,end]中的原创 2013-03-19 14:14:17 · 1085 阅读 · 2 评论 -
优先级队列
优先级队列是一种用来维护一组元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字key。最大优先级队列支持一下操作:inset(S,x):把元素x插入到集合S。maximum(S):返回S中具有最大关键字的元素。EXTRACT_MAX(S):去掉并返回S中的具有最大关键字的元素。INCREASE_KEY(S,x,k):将元素x的关键字的值增加到k(k大于等于x的原原创 2013-03-19 09:57:06 · 525 阅读 · 0 评论 -
base64编码
base64准确的说是一种编码方式,而不是加密方式。那为什么要用base64编码或者说其应用场景?某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。比如中文邮件等,比如可以用文本编辑器编辑二进制文件。采用base64编码可以达到隐藏明文的效果,微微起到了加密的作用。base64的原理base64是一种比较低级的对照原创 2015-03-28 18:33:53 · 629 阅读 · 0 评论