文章分类 -  Java 数据结构和算法

1 2 3 下一页

动态规划 解TSP 旅行商问题 经典实现
摘要:原文地址: http://blog.csdn.net/gfaiswl/article/details/47497131.问题定义 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。 假设现在有四个城市,0,1,2,3,他们之间的代价 阅读全文

posted @ 2016-10-16 13:36 1130136248 阅读(1101) 评论(0) 推荐(1) 编辑

棋盘覆盖问题
摘要:在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,称该棋盘为一特殊棋盘。显然特殊方格在棋盘上出现的位置有 4^k 种情形。因而对任何 k>=0 ,有 4^k 种不同的特殊棋盘。下图所示的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。 在棋盘覆盖 阅读全文

posted @ 2016-10-10 12:30 1130136248 阅读(155) 评论(0) 推荐(0) 编辑

【经典算法】——KMP,深入讲解next数组的求解
摘要:前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起 阅读全文

posted @ 2016-10-09 11:55 1130136248 阅读(147) 评论(0) 推荐(0) 编辑

KMP算法的next[]数组通俗解释
摘要:摘要: KMP算法的next[]数组通俗解释 前言 本文是对KMP核心部分NEXT数组的构建方法说明,KMP整体分析的文章可以参考下面的链接。 http://my.oschina.net/u/572632/blog/277548 概述 我们在一个母字符串中查找一个子字符串有很多方法。KMP是一种最常 阅读全文

posted @ 2016-10-09 11:54 1130136248 阅读(164) 评论(0) 推荐(0) 编辑

字符串匹配的KMP算法
摘要:字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著 阅读全文

posted @ 2016-10-09 11:28 1130136248 阅读(67) 评论(0) 推荐(0) 编辑

静态链表和动态链表
摘要:动态链表与静态链表一. 静态链表在某些语言中指针是不被支持的,只能使用数组来模拟线性链表的结构.在数组中每个元素不但保存了当前元素的值,还保存了一个”伪指针域”,一般是int类型,用于指向下一个元素的内存地址. #define MAXSIZE 100; typedef struct{ ElemTyp 阅读全文

posted @ 2016-09-23 14:31 1130136248 阅读(2026) 评论(0) 推荐(0) 编辑

Dijkstra(迪杰斯特拉)算法
摘要:Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专 阅读全文

posted @ 2016-09-20 23:14 1130136248 阅读(237) 评论(0) 推荐(0) 编辑

哈夫曼树
摘要:一、哈夫曼树的概念和定义 什么是哈夫曼树? 让我们先举一个例子。 判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来: [cpp] view 阅读全文

posted @ 2016-09-08 22:15 1130136248 阅读(137) 评论(0) 推荐(0) 编辑

三大线性排序之基数排序
摘要:一.概念 基数排序也不是基于比较和元素移位的,又称桶子法;数据结构课本上首先由扑克牌的排序引入,继而引出多关键字比较。 本文是基于计数排序的基数排序,只介绍最低位优先(Least Significant Digit First),谷歌之发现就几乎没有介绍MSD的,所谓LSD就是从数字的最低位逐个比较 阅读全文

posted @ 2016-03-24 10:58 1130136248 阅读(437) 评论(0) 推荐(0) 编辑

三大线性排序之计数排序
摘要:一.算法简介 通过统计元素出现的次数进而排序,需要一个辅助数组,大小是最大元素值(想想计数的过程),为了更好的理解计数排序,我们先来想象一下如果一个数组里所有元素都是非负整数(数组下标是整数),而且都在0-max(由于内存的原因,这个值要小一些)以内,那对于数组里每个元素来说,如果我能知道数组里有多 阅读全文

posted @ 2016-03-24 10:58 1130136248 阅读(156) 评论(0) 推荐(0) 编辑

三大线性排序之桶排序
摘要:一.概念引入 有作者把计数排序也称为桶排序(各个桶中元素的排序采用计数排序),得到数组C后直接从前往后遍历,输出数组值次数组下标,为0就不输出(或者存入原数组,不稳定),不过笔者认为这种说法不严谨(一个很明显的问题是输出会是双重for循环,不过也有那个意思,叫鸽巢排序也未尝不可),因为桶排序要求输入 阅读全文

posted @ 2016-03-24 10:57 1130136248 阅读(156) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》15.堆结构之二项堆
摘要:堆的变体: 上篇博客中我讲了下数据结构二叉堆,而今天讲的二项堆与他最大的不同是它可以快速的合并成两个堆,通过一个特殊的树结构完成的。 下面列出了三种堆的时间复杂的比较。 次那个上面我们可以看出与二叉堆的差别在于找到最小元素和合并。 二叉堆查找最小元素的时间复杂度为O(1),而二项堆: O(lgn) 阅读全文

posted @ 2016-03-22 21:11 1130136248 阅读(285) 评论(0) 推荐(0) 编辑

《Thinking in Algorithm》16.堆结构之斐波那契堆
摘要:堆的变体: 前面的博客中我们讲到的堆的两种变体,二叉堆和二项堆,今天我们要讲的就是著名的斐波那契堆。 依然首先列出了三种堆的时间复杂的比较。 从上面能发现斐波那契堆的时间复杂度在很多操作上有优化,如insert, minimum, union , decrease-key,而extreact-min 阅读全文

posted @ 2016-03-22 21:11 1130136248 阅读(235) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》14.由背包问题了解动态规划和贪心
摘要:上篇博客中我们详细的讲解了动态规划问题,但是呢,其实对动态规划的理解还不够深入,今天我就找了一个非常经典的背包问题来进一步的学习动态规划,顺带也把与动态规划类似的贪心算法学了下。 本文讲解的顺序会是,先解决问题,再总结其算法的原理。 先看第一个问题。 给定n种物品和一个背包。物品i的重量是Wi,其价 阅读全文

posted @ 2016-03-22 21:10 1130136248 阅读(111) 评论(0) 推荐(0) 编辑

《Thinking in Algorithm》12.详解十一种排序算法
摘要:排序算法在算法中占着很重要的地位,很多算法的实现都是基于排序算法的(如搜索算法和合并算法)。所以排序算法也是笔试面试中必考内容。但是不管他怎么考,也就是那几种算法,一般不会超出我接下来要讲的这11种,所以只要认真的掌握着11中就足够了。 那么是哪11种呢,下面是wiki上总结的11种 下面我就对这1 阅读全文

posted @ 2016-03-22 21:09 1130136248 阅读(585) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》13.详解动态规划问题
摘要:dynamic programming is a method for solving complex problems by breaking them down into simpler subproblems. (通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法) 咦,这不就是分而治 阅读全文

posted @ 2016-03-22 21:09 1130136248 阅读(164) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》11.堆结构之二叉堆
摘要:堆的变体: 之前有篇博客(操作系统中堆和栈的区别)讲的是操作系统中的堆,顺带提了下数据结构中的堆。觉得比较简单就没详细讲解,不过这几天看排序算法看到堆排序时,感觉对堆都不怎么熟悉,有些细节问题没注意到。所以说不要小看任何一个知识点。而且经过细看才发现堆其实有很多精妙之处,怪不得很多算法都靠它来实现, 阅读全文

posted @ 2016-03-22 21:08 1130136248 阅读(88) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》10.树的三种遍历(递归与非递归实现)
摘要:1:深度优先 1.1:前序遍历 Visit the root. Traverse the left subtree. Traverse the right subtree. 如下图: Pre-order: F, B, A, D, C, E, G, I, H 伪代码: preorder(node) if node == null then return visit(n... 阅读全文

posted @ 2016-03-22 21:07 1130136248 阅读(163) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》08.B-Tree
摘要:According to Knuth's definition, a B-tree of order m is a tree which satisfies the following properties: B-树又称为多路平衡查找树。 一棵度为m的B-树称为m阶B_树。一个结点有k个孩子时,必有 阅读全文

posted @ 2016-03-22 21:06 1130136248 阅读(146) 评论(0) 推荐(0) 编辑

《Thinking In Algorithm》09.彻底理解递归
摘要:递归真的非常非常重要!!! 我们直接从例子开始吧! 写个函数实现 N! = N × (N-1) × (N-2) × ... × 2 × 1 上面的程序虽然简单,但我们要了解他运行的步骤,以factorial(4)为例。 也可以表示为 求p和q的最大公约数 首先我们复习一下欧几里得算法 定理:gcd( 阅读全文

posted @ 2016-03-22 21:06 1130136248 阅读(171) 评论(0) 推荐(0) 编辑

1 2 3 下一页
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示