代码改变世界

0-1背包问题

2012-11-05 11:17 by jiutianhe, 264 阅读, 0 推荐, 收藏, 编辑
摘要:问题描述:给定n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是M,问如何选择装入背包中的物品总价值最大?可以这样理解:背包的背负有上限,因此在这个上限内尽可能多的装东西,并且价值越多越好。在这里我之想讨论动态规划解决这个问题的详细过程。问题的特点是:每种物品一件,可以选择放1或不放0。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}这个方程非常重要,据说基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以详细的查了一下这个方程 阅读全文

二叉树

2012-10-31 15:46 by jiutianhe, 275 阅读, 0 推荐, 收藏, 编辑
摘要:1求二叉树中相距最远的两个节点之间的距离2判断二叉树是否平衡二叉树3指定二叉树,给定两节点求其最近共同父节点4二叉树的广度遍历、逐层打印二叉树节点数据、只打印某层节点数据5在二叉树中找出和(叶子到根节点路径上的所有节点的数据和)为指定值的所有路径。6将二叉查找树转为有序的双链表7求二叉树的镜像8二叉树前序、中序、后序遍历的非递归实现9计算二叉树高度的非递归实现10连接二叉树同一层上的结点特别说明:本文中二叉树结构定义为:struct Node{Node* left;Node* right;int data;};定义:空二叉树的高度为-1,只有根节点的二叉树高度为0,根节点在0层,深度为0。1求 阅读全文

喝汽水问题

2012-10-31 15:37 by jiutianhe, 236 阅读, 0 推荐, 收藏, 编辑
摘要:喝汽水问题有1000瓶汽水,喝完后每3个空瓶能换1瓶汽水,问最后最多可以喝几瓶汽水,此时剩余几个空瓶?不妨假设,共有n瓶汽水,每a个空瓶能换b瓶汽水(a > b)。刚开始有n瓶汽水,喝完后就有n个空瓶,多喝的汽水是靠空瓶换来的,每进行一次空瓶换汽水,就能多喝b瓶汽水、空瓶数目就减少了a-b个(a个空瓶换了b瓶汽水,喝完后得到b个空瓶)。(下面用 [x]表示x的整数部分)1 如果允许从别处(老板或其他顾客处)借空瓶(当然,有借有还)空瓶换汽水次数: [n / (a - b)]最后剩余空瓶: n % (a - b)总共可以喝到汽水: n + [n / (a - b)] * b2 不允许借空瓶 阅读全文

计算字符串的相似度

2012-10-26 19:08 by jiutianhe, 186 阅读, 0 推荐, 收藏, 编辑
摘要:《编程之美》,参阅了其中的——计算字符串的相似度许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”)。 2.增加一个字符(如把“abdd”变为“aebdd”)。 3.删除一个字符(如把“travelling”变为“traveling”)。 比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g“的方式来达到目的。上面的两种方案,都仅需要一次操作。把这个操作所需要的次数定义为两个字符串的距离,给... 阅读全文

1. Java设计模式--单例模式

2012-10-19 21:56 by jiutianhe, 170 阅读, 0 推荐, 收藏, 编辑
摘要:概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、枚举式单例三种。 单例模式有一下特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,... 阅读全文

Eclipse 安装插件

2012-10-16 21:36 by jiutianhe, 139 阅读, 0 推荐, 收藏, 编辑
摘要:Eclipse 安装插件本文介绍Eclipse插件的安装方法。Eclipse插件的安装方法大体有三种:直接复制、使用link文件,以及使用eclipse自带的图形界面的插件安装方法。AD:做为当下最流行的开源IDE之一,Eclipse的一大优势就在于其无数优秀的插件。一个好的插件可以大大的提高我们的工作效率,学习如何安装Eclipse插件自然也是必修课了。下面介绍Eclipse插件的安装方法。Eclipse插件的安装方法大体有以下三种:第一种:直接复制法假设你的Eclipse的在(C:\eclipse), 解压你下载的 eclipse 插件或者安装eclipse 插件到指定目录AA(c:\AA 阅读全文

Java中十个常见的违规编码

2012-10-16 20:37 by jiutianhe, 141 阅读, 0 推荐, 收藏, 编辑
摘要:这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括CheckStyle,FindBugs和PMD检查出。一起来看下:一、Eclipse编译器提供源代码格式输入Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码)。你可以使用下面的这些快捷键进行操作。Ctrl + Shift + F——源代码格式Ctrl + Shift + O——组织输入并删除未使用的代码代替手动调用这两个函数,只需根据Eclipse自动格式和自动组织选项,可以随时保存文件。操作步骤,在Eclipse中进入Window -> Preferences -> Java -> Edit 阅读全文

每个程序员都应该知道的8个Linux命令

2012-10-16 20:07 by jiutianhe, 116 阅读, 0 推荐, 收藏, 编辑
摘要:每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对Linux命令行任务时,你应该能很熟练的完成。事实上,学会了下面8个命令,我基本上能完成任何需要完成的任务。注意:下面的每个命令都有十分丰富的文档说明。这篇文章并不是来详尽的展示每个命令的各种功用的。我在这里要讲的是这几个最常用的命令的最常见用法。如果你对linux命令并不是很了解,你想找一些这方面的资料学习,那这篇文章将会给你一个基本的指导。让我们从处理一些数据开始。假设我们有两个文件,分别记录的订单清单和订单处理结果。order.out.log 8:22 阅读全文

Trie树(字典树)

2012-10-16 13:56 by jiutianhe, 1403 阅读, 0 推荐, 收藏, 编辑
摘要:1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符都不相同。2. 字典树的构建 题目:给你100000个长度不超过10的单.. 阅读全文

传教士和野人问题(Missionaries and Cannibals)

2012-10-14 18:38 by jiutianhe, 1083 阅读, 0 推荐, 收藏, 编辑
摘要:传教士和野人问题(MissionariesandCannibals) 这是一个经常在有关讨论人工智能的书籍中见到的问题,其描述是这样的: 有N个传教士和N个野人来到河边渡河,河岸有一条船,每次至多可供k人乘渡。问传教士为了安全起见,应如何规划摆渡方案,使得任何时刻,河两岸以及船上的野人数目总是不超过传教士的数目(否则不安全,传教士有可能被野人吃掉)。即求解传教士和野人从左岸全部摆渡到右岸的过程中,任何时刻满足M(传教士数)≥C(野人数)和M+C≤k的摆渡方案。 我们此处举例, 只讨论N为3、k为2的乘渡问题,这样传教士和野人问题的描述就具体为如下: 三个传教士与三个野人来到河... 阅读全文