
Thinking In Algorithm
文章平均质量分 92
自己总结的一些数据结构与算法方面的基础知识
SpeedMe
这个作者很懒,什么都没留下…
展开
-
《Thinking in Algorithm》16.堆结构之斐波那契堆
前面的博客中我们讲到的堆的两种变体,二叉堆和二项堆,今天我们要讲的就是著名的斐波那契堆。二项堆和斐波那契堆对于search操作的支持均比较低效;可能花费一段时间才能找到关键字。为此,涉及给定元素的操作(如DECREASE-KEY和DELETE)均需要一个指针指向这个元素,并且指针作为输入的一部分。原创 2014-04-28 21:15:16 · 4961 阅读 · 1 评论 -
《Thinking In Algorithm》15.堆结构之二项堆
堆的变体:二叉堆二项堆斐波那契堆(下篇博客)上篇博客中我讲了下数据结构二叉堆,写那篇博客是除了很大的错误,单纯的以为数据结构堆就是二叉堆。产生这样错误的理解,首先因为自己还是初学者,其次是写博客的时候,看了很多人的博客(包括一些大神级别的)中,名字取的是数据结构堆,其实里面讲的都是二叉堆。结果今天我看算法导论的斐波那契堆的时候才恍然大悟,好吧,是我太水了。所原创 2014-04-27 16:13:15 · 3819 阅读 · 0 评论 -
《Thinking In Algorithm》14.由背包问题了解动态规划和贪心
上篇博客中我们详细的讲解了动态规划问题,但是呢,其实对动态规划的理解还不够深入,今天我就找了一个非常经典的背包问题来进一步的学习动态规划,顺带也把与动态规划类似的贪心算法学了下。本文讲解的顺序会是,先解决问题,再总结其算法的原理。先看第一个问题。1. 0-1背包问题给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品原创 2014-04-26 14:59:41 · 2879 阅读 · 0 评论 -
《Thinking In Algorithm》13.详解动态规划问题
1. 什么是动态规划-------------------------------------------dynamic programming is a method for solving complex problems by breaking them down into simpler subproblems. (通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法)原创 2014-04-23 16:51:17 · 4806 阅读 · 0 评论 -
《Thinking in Algorithm》12.详解十一种排序算法
排序算法在算法中占着很重要的地位,很多算法的实现都是基于排序算法的(如搜索算法和合并算法)。所以排序算法也是笔试面试中必考内容。但是不管他怎么考,也就是那几种算法,一般不会超出我接下来要讲的这11种,所以只要认真的掌握着11中就足够了。那么是哪11种呢,下面是wiki上总结的11种1 Simple sorts1.1 Insertion sort(插入排序)1.2 Sel原创 2014-04-10 01:32:38 · 17231 阅读 · 29 评论 -
《Thinking In Algorithm》11.堆结构之二叉堆
之前有篇博客(操作系统中堆和栈的区别)讲的是操作系统中的堆,顺带提了下数据结构中的堆。觉得比较简单就没详细讲解,不过这几天看排序算法看到堆排序时,感觉对堆都不怎么熟悉,有些细节问题没注意到。所以说不要小看任何一个知识点。而且经过细看才发现堆其实有很多精妙之处,怪不得很多算法都靠它来实现,如堆排序,1. 什么是堆?-----------------------------------原创 2014-04-08 10:51:56 · 4964 阅读 · 1 评论 -
《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原创 2014-03-21 21:54:30 · 4510 阅读 · 1 评论 -
《Thinking In Algorithm》09.彻底理解递归
递归真的非常非常重要!!!我们直接从例子开始吧!一:简单实例1.阶乘的实现写个函数实现 N! = N × (N-1) × (N-2) × ... × 2 × 1public static int factorial(int N) { if (N == 1) return 1; return N * factorial(N-1); }上面的程序虽然简原创 2014-03-20 23:20:04 · 14761 阅读 · 6 评论 -
《Thinking In Algorithm》08.B-Tree
1.定义According to Knuth's definition, a B-tree of order m is a tree which satisfies the following properties:Every node has at most m children.Every non-leaf node (except root) has at least ⌈原创 2014-02-10 20:27:00 · 2336 阅读 · 0 评论 -
《Thinking In Algorithm》06.Binary search tree(二叉查找树)
The search tree data structure supports many dynamic-set operations, includingSEARCH,MINIMUM,MAXIMUM,PREDECESSOR,SUCCESSOR,INSERT, andDELETE. Thus, we can use a search tree both as a dictionary and原创 2014-01-14 22:55:43 · 5724 阅读 · 2 评论 -
《Thinking In Algorithm》05.Hash Tables(哈希表)
1.Hash tableNot to be confused with Hash list or Hash tree.什么是hash table ?哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列原创 2014-01-13 19:56:56 · 4898 阅读 · 0 评论 -
《Thinking In Algorithm》04.单向链表和双向链表的区别
A node in a singly linked list has only a Next reference. Each node is referenced by a preceeding node (including the first node, which will be referenced by the list Head or from the last node in原创 2014-01-12 16:20:59 · 2746 阅读 · 0 评论 -
《Thinking In Algorithm》03.数据结构之数组
数组Array: 数组的存储在计算机内存中是一片连续的区域。而且数组中每一项所占内存的大小是一定的。因此,我们只需要知道数组第一项所处的位置,就能简单的知道其他任何项所在的位置,而不需要依次去查找。所以数组在知道索引时的访问是很快的。大O表示法 在讨论算法的优劣时,我们通常需要一个标尺来衡量。在计算机科学里,这个标尺就是:大O。在比较两种算法时,我们不会说:A比B快2倍。为何?因为随着原创 2014-01-12 12:34:50 · 8271 阅读 · 3 评论 -
《Thinking In Algorithm》02.Stacks,Queues,Linked Lists
1.StacksThe basic implementation of a stack is also called a LIFO (Last In First Out) to demonstrate the way it accesses data, since as we will see there are various variations of stack implementa原创 2014-01-09 20:49:43 · 2666 阅读 · 0 评论 -
《Thinking In Algorithm》01.Array与ArrayList的区别(java)
1)一句话概括: ArrayList想象成一种“会自动扩增容量的Array”,Array大小不能变。2)Array([]):最高效;但是其容量固定且无法动态改变; ArrayList: 容量可动态增长;但牺牲效率;3)建议:基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList!不过当你试着解决更一般化的问题时,Array的功能原创 2014-01-07 20:48:13 · 4005 阅读 · 1 评论