
数据结构与算法
Flood_Dragon
勇者无所畏惧 强者自强不息
展开
-
KMP字符串模式匹配详解[转]
个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数 f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]这种表示法好理解啊:转载 2012-11-21 14:38:37 · 350 阅读 · 0 评论 -
Java 多叉树的实现,完成树的初始化和遍历
Java 多叉树的实现,完成树的初始化和遍历。包括两个文件(TreeNode.java和TreeHelper.java) TreeNode类完成树节点的数据结构,TreeHelper类通过输入一个TreeNode列表,生成一颗有一个树根的树!其它函数接口自己看看就明白了,希望对你有帮助。package com.tree;import java.util.List;import j转载 2013-09-16 16:24:15 · 1076 阅读 · 0 评论 -
凯撒密码加解密的方法
public class test {public static void main(String[] arr) { execmod(jtf.getText().trim(), -4);}private void execmod(String abc, int n) { String eec=""; for (int i = 0; i转载 2013-10-30 14:09:28 · 3816 阅读 · 0 评论 -
K-Means算法
在数据挖掘中,K-Means算法是一种cluster analysis的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。问题K-Means算法主要解决的问题如下图所示。我们可以看到,在图的左边有一些点,我们用肉眼可以看出来有四个点群,但是我们怎么通过计算机程序找出这几个点群来呢?于是就出现了我们的K-Means算法(Wikipedia链接)转载 2014-04-02 10:35:48 · 595 阅读 · 0 评论 -
原码, 反码, 补码 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式转载 2014-09-18 15:10:45 · 572 阅读 · 0 评论 -
字母组合算法
a、b、c三个字母,得到这样一组组合集合: a、b、c、ab、ac、ba、bc、ca、cb、abc、acb、bac、bca、cab、cba 算法源码如下: public class Comb{ public static void main(String[] args){ comb();转载 2014-09-03 14:06:32 · 1501 阅读 · 0 评论 -
NoSql中的B-tree、B+tree和LSM-tree
首先来回答一个问题:为什么在磁盘中要使用b+树来进行文件存储呢?原因还是因为树的高度低得缘故,磁盘本身是一个顺序读写快,随机读写慢的系统,那么如果想高效的从磁盘中找到数据,势必需要满足一个最重要的条件:减少寻道次数。我们以平衡树为例进行对比,就会发现问题所在了:先上个图 这是个平衡树,可以看到基本上一个元素下只有两个子叶节点 抽象的来看,树转载 2014-09-30 11:03:40 · 849 阅读 · 0 评论 -
数据结构中各种内部排序算法的比较
http://blog.itpub.net/15203236/viewspace-6165821 快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支原创 2014-12-05 16:38:06 · 896 阅读 · 0 评论 -
最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)
堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树。最小堆便是每个节点的值都 设有n个元素的序列{k1,k2,...,kn},当且仅当满足下列关系时,称之为堆。 堆的三种基本操作(以下以最大堆为例): ⑴最大堆的插入 由于需要维持完全二叉树的形态,需要先将要插入的结点x放在最底层的最右边,插入后满 足完全二叉树转载 2015-01-22 12:09:48 · 1076 阅读 · 0 评论 -
红黑树
红黑树之前看了很多写红黑树的博客,但是感觉都讲的不太清楚!没说这样操作如何使他保持平衡的,于是疑惑重重,就看不下去了,一次不经意看到一个人说维基百科的红黑树讲的好,我就随便点了一下一看——这下疯了~,怎么讲的这么好!可以说是把一个复杂的问题,讲得简单化!这太幸福了! 于是我就慢慢学会了!强烈推荐维基的这个讲解,再也找不到比这还好的讲解了!不知道它上边其它的怎么样,反正这个很好!!既然学会了转载 2015-06-29 17:19:53 · 606 阅读 · 0 评论 -
很高效的用于调度的最小堆
摘自于Hadoop大量文件调度合并public abstract class PriorityQueue { private T[] heap; private int size; private int maxSize; protected abstract boolean lessThan(Object a, Object b); @Suppr原创 2015-07-08 17:28:13 · 853 阅读 · 0 评论 -
DES加密、解密字符串算法(java版)
package com.des;import java.security.*;import javax.crypto.*;import com.sun.crypto.provider.SunJCE;public class DESPlus { private static String strDefaultKey = "national"; private Cipher encr转载 2013-02-25 18:35:09 · 617 阅读 · 0 评论 -
使用Box2D制作AS3游戏——2.1a版本——Hello World Box2D
想要制作一个像纸上怪物一样酷的基于物理学的flash游戏吗? 最好的方式就是使用一个叫做Box2D的很好的flash开源类库。现在有很多关于flash的物理引擎,但是Box2D就属于这些引擎中的战斗机。很多开发人员选择使用Box2D,并且现在Box2D有许多个语言版本(C++,java,xna,iphone,android),这使得Box2D成为了一款炙手可热的开发引擎。 但是转载 2013-05-30 18:47:22 · 2262 阅读 · 0 评论 -
计算几何算法概览——算法篇之位置关系
一。位置关系:4.折线段的拐向判断: 折线段的拐向判断方法可以直接由矢量叉积的性质推出。对于有公共端点的线段p0p1和p1p2,通过计算(p2 - p0) × (p1 - p0)的符号便可以确定折线段的拐向: 若(p2 - p0) × (p1 - p0) > 0,则p0p1在p1点拐向右侧后得到p1p2。 若(p2 - p0) × (p1 - p0) 若(p2 -转载 2012-11-21 14:41:59 · 831 阅读 · 0 评论 -
点、线、面相关的算法(1)
转载原文:http://xuejx.blog.sohu.com/62019268.html/* 需要包含的头文件 */#i nclude /* 常用的常量定义 */ const double INF = 1E200 const double EP = 1E-10 const int MAXV = 300 const double PI =转载 2012-11-21 14:43:42 · 757 阅读 · 0 评论 -
点、线、面相关的算法(2)
可用射线法来判断一个点是否在多边形的内部: 射线法就是以这个要判断的点作一射线(为了方便,直接作一水平向右的射线),数一下线段与 多边形边的交点数,奇数时就是在多边形内,偶数时就是在多边形外。 /* 判断线段是否在简单多边形内(注意:如果多边形是凸多边形,下面的算法可以化简) 原理: 必要条件一:线段的两个端点都在多边形内; 必要条件二:线段和多边形的转载 2012-11-21 14:45:03 · 850 阅读 · 0 评论 -
JAVA经典算法40题
JAVA经典算法40题【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... public class exp2{public static void main(String args[转载 2013-02-07 15:19:44 · 538 阅读 · 0 评论 -
游戏算法整理
算法一:A*寻路初探 From GameDev.net 译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的开始。这 篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的锻炼。经过努力,终于完成了文档,也明白的A*原创 2013-02-25 18:21:20 · 1873 阅读 · 0 评论 -
贝塞尔曲线 --匀速贝塞尔曲线运动的实现
二次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点P0,P1,P2,用B(t)表示该条曲线用一个动画来演示,可以更加清楚的表明这条曲线的构建过程如果t变量本身线形变化的话,这条贝塞尔曲线本身的生成过程是并不是匀速的,通常都是两头快中间慢。如何想要得到匀速的贝塞尔曲线运动呢?比如我们在某款游戏中设计了一条贝塞尔曲线的路径,如何实现玩家匀速在这条路径上运动呢?转载 2013-04-10 11:24:29 · 4402 阅读 · 0 评论 -
AS3中的数据结构排序算法
一、概论对于数据的处理工作,排序是其最基本的运算之一。在当今的计算机系统中,花费在排序上的时间占系统CPU运行时间的很大比重。有资料表明,在一些商用计算机上,在排序上的CPU时间达到20%至60%。为了提高计算机的工作效率,人们提出了各种各样的排序方法和算法。这些算法有力地发展、并充分地展示了算法设计的某些重要原则和高超技巧。因此,对于计算专业人员来说掌握排序算法是十分重要的。 二、排转载 2013-04-27 22:21:24 · 709 阅读 · 0 评论 -
“AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (上)
一提到“A*算法”,可能很多人都有"如雷贯耳"的感觉。用最白话的语言来讲:把游戏中的某个角色放在一个网格环境中,并给定一个目标点和一些障碍物,如何让角色快速“绕过障碍物”找出通往目标点的路径。(如下图)在寻路过程中,角色总是不停从一个格子移动到另一个相邻的格子,如果单纯从距离上讲,移动到与自身斜对角的格子走的距离要长一些,而移动到与自身水平或垂直方面平行的格子,则要近一些。为了描述转载 2013-05-21 14:02:29 · 1401 阅读 · 0 评论 -
“AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (中)
上节提到了节点(Node),代价(Cost),估价公式等基本概念,有了这些知识铺垫 就可以正式开启寻路之旅了!如上图,这是一个5行8列的网格,黄色节点为起点,红色节点为终点,黑色节点为障碍物(节点)。寻路过程可以这样考虑:1、先以起点为中心,向周边扩张一圈,同时计算出周边节点(最多有8个)的单步代价g(即从中心点移动到相邻格子的代价:水平或垂直为1,对角为1转载 2013-05-21 14:08:18 · 1676 阅读 · 0 评论 -
“AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
在上节的最后,我们给出了一个寻路的示例,在大多数情况下,运行还算良好,但是有一个小问题,如下图:很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑了出来!问题在哪里:我们先回顾一下AStar.as中用于判断的if语句//如果是当前节点,或者是不可通过的,则跳过if (test == node || !test.walkable){ continue;转载 2013-05-21 14:15:38 · 1359 阅读 · 1 评论 -
日志结构的合并树 The Log-Structured Merge-Tree
近年来,随着互联网数据的日益增长,管理分布式数据需求的日益增加,Bigtable[1]等一系列NoSQL数据库开始涌现。Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据,其在提供Tablet服务时使用内存中的memtable和GFS[2]中的SSTable来相互配合着来存储数据更新,其中存储和更新的方法与日志结构的合并树[3](Log-Structured Merge转载 2016-01-13 10:42:37 · 1049 阅读 · 0 评论