随笔分类 - 数据结构与算法
摘要:有趣的位运算 计算机的终极程序其实只有0和1,转化成集成电路的低电压和高电压来进行存储和运算。如果你是计算机相关专业出身或者是一名软件开发人员即使不对计算机体系结构如数家珍,至少也要达到能够熟练使用位运算的水平,要不然还是称为代码搬运工比较好:),位运算非常简单,非常容易理解而且很有趣,在平时的开发
阅读全文
摘要:等概率不重复的生成随机数应该是在平时开发中常见的,也是面试中常问的基础之一。有多种实现方式,有人人都可以想到的,也有不容易想到的巧妙算法,那么当有人问你哪个实现方式更好的时候你该怎么回答呢?回答巧妙的算法比普通算法好?答案显而易见,首先要搞清楚应用场景和要解决的问题。这样才能判断一个算法或者方案的合
阅读全文
摘要:前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序
阅读全文
摘要:最近在复习基础知识,下面是二分查找算法的递归和非递归实现: package sortandsearch; /** *@Description:<p>二分查找的递归和非递归算法</p> *@author 王旭 *@time 2016-3-3 上午10:36:29 */ public class Bin
阅读全文
摘要:上次解0-1背包问题用的是动态规划法:http://www.cnblogs.com/wxisme/p/4898057.html这次用回溯法来解。01背包问题:给定n种物品和一背包。物品i的重量是wi其价值为vi,背包的容量为c。问如何选择装入背包的物品,使得装入背包中物品的总价值最大?在选择装入背包...
阅读全文
摘要:问题描述:有一个容量为c的背包,有n种物品,第i种物品的重量是wi,价值是vi;可以拿走一种物品的全部或者部分。怎样才能使背包装入的物品价值最大?分析:与0-1背包不同的是可以装入一种物品的一部分,在0-1背包只能用动态规划的方法来解,具体证明见《算法导论》,完全背包问题可以用动态规划来解也可以用贪...
阅读全文
摘要:最优二叉查找树:给定n个互异的关键字组成的序列K=,且关键字有序(k1= i时,需要从ki,...,kj中选择一个根kr,然后分别构造其左子树和右子树。下面需要计算以kr为根的树的期望搜索代价。然后选择导致最小期望搜索代价的kr做根。子树中每个节点深度都增加1.期望搜索代价增加量为子树中所有概率的总...
阅读全文
摘要:最长公共子序列:给定一个序列X={x1,x2,x3...xm},另一个序列Z={z1,z2,z3...zk}满足如下条件时称为X的子序列,即存在一个严格递增的X的下标序列对所有j=1,2...k满足xi=zj。给定两个序列X,Y,如果既是X的子序列又是Y的子序列,那就称为X,Y的公共子序列。最长公共...
阅读全文
摘要:最大子段和问题:给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},10时b[j]=b[j-...
阅读全文
摘要:01背包问题:给定n种物品和一背包。物品i的重量是wi其价值为vi,背包的容量为c。问如何选择装入背包的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i只有两种选择,即装入或者不装入。不能将物品i装入背包多次也不能只装部分的物品i。因此成为01背包问题。01背包问题的经典解...
阅读全文
摘要:LRU(Least Recently Used)算法是缓存技术中的一种常见思想,顾名思义,最近最少使用,也就是说有两个维度来衡量,一个是时间(最近),一个频率(最少)。如果需要按优先级来对缓存中的K-V实体进行排序的话,需要考虑这两个维度,在LRU中,最近使用频率最高的排在前面,也可以简单的说最近访
阅读全文
摘要:字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。(From baik...
阅读全文
摘要:常见的前序、中序、后序都很常见,最近用到了按层遍历,记录一下:思路:用一个队列来作为辅助空间。依次存储头结点,左节点和右节点。每次循环输出节点的值,直到队列为空这样一来就利用了队列先进先出的性质实现了非递归按层遍历二叉树。具体实现:void levelOrderTraverse(const BiTr...
阅读全文
摘要:二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的
阅读全文
摘要:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个...
阅读全文
摘要:package algorithm01;import java.util.Scanner;/** * 给出先序遍历和中序遍历序列求出二叉树的后续遍历序列 * @author wxisme * */public class ToReverse { public static void main(Str...
阅读全文
摘要:主要参考资料:数据结构(C语言版)严蔚敏 ,http://blog.chinaunix.net/uid-25324849-id-2182922.html 代码测试通过。package 图的建立与实现;import java.util.*;public class MGraph { final int...
阅读全文
摘要:实现二叉树 并先序遍历之。package 二叉树的实现;public class BinaryTree { class Node { int value; // 该节点存储的值。 Node leftChild; // 指向左子节点的引用。 Nod...
阅读全文
摘要:不用十字链表也可以稀疏矩阵相加时间复杂度最坏情况达到O(tuA + tuB);思路比较简单就不赘述了,代码如下:三元组:package 行逻辑链接的顺序表实现稀疏矩阵的相乘;public class Triple { int row,col; T v; public Triple(){} publi...
阅读全文
摘要:行逻辑链接,带行链接信息。程序有空指针BUG,至今未解决。还是C/C++适合描述算法数据结构。以后复杂的算法还是改用C/C++吧。有BUG的代码,总有一天会换成没有BUG的。package 行逻辑链接的顺序表实现稀疏矩阵的相乘;public class Triple { int row,col; T...
阅读全文