12 2013 档案
数据结构之二叉树
摘要:二叉树的实现:public class Node { T date; public T Date { get { return date; } set { date = value; } } Node lChild; public Node LChild { get { return lChild; } set { lChild = value; } } Node rChild... 阅读全文
posted @ 2013-12-26 10:29 higirle 阅读(386) 评论(0) 推荐(0)
动态规划之01背包问题和三角形问题
摘要:01背包问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。状态:用f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值,其状态转移方程为f[i][v]=max{ f[i-1][v], f[i-1][v-c[i]]+w[i] }。复杂度分析:状态数:O(NV), 迁移:O(1)总复杂度:O(NV)状态f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。对于“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策 阅读全文
posted @ 2013-12-24 13:32 higirle 阅读(592) 评论(0) 推荐(0)
算法一:动态规划
摘要:动态规划一.动态规划含义:在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都要做出决策,从而使整个过程达到最好的活动效果.因此,各个阶段决策确定后,组成一个决策序列,因而也就确定了整个过程的一条活动路线.这种把一个问题看作是一个前后关联具有链状结构的多阶段过程,就称为多阶段决策过程,这种问题称为多阶段决策问题. 在多阶段决策问题中,各个阶段采取的决策,一般来说是和时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有"动态"的含义,我们称这种解决多阶段决策最优化的过程为动态规划.二 阅读全文
posted @ 2013-12-20 13:22 higirle 阅读(699) 评论(0) 推荐(0)
编程之美2.16 求数组中最长递增子序列
摘要:编程之美2.16 最长递增子序列:写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中的最长递增子序列的长度。例如:在序列1,-1,2,-3,4,-5,6-7中,其最长的递增子序列为1,2,4,6分析:利用动态规划分析。用A[i]来更新maxLen和MaxV:,从A[0]~A[i-1]可能存在多个存在多个子问题的最优解,所以需要将他他们合并为一个。1. 当A[i]>MaxV[maxLen](即子问题最优解的最小值)时,maxLen++ && MaxV[maxLen] = a[i] A[i]>MaxV[maxLen]时,A[i]必然比MaxV[0]-MaxV[ 阅读全文
posted @ 2013-12-19 16:49 higirle 阅读(412) 评论(0) 推荐(0)
编程之美:常见面试题思想方法整理
摘要:对于很多精妙的题目,常常在想这些出题的童鞋是怎么想到的,因为这些题目确实能够很深入的考察出一个面试者的逻辑,算法和思维功底。本文章主要是总结自己在做这些面试题和了解相应解法的过程中思考的一些东西,感觉这些东西在很多题目中都出现过,非常值得抽象出来专门理解。 一 双指针遍历 所谓双指针,是利用两个指针对一个有序数组进行遍历,查找出符合要求的数据集合。相信大家都接触到了这种思维模式的解题方法,只是没有注意到罢了。下面举几个例子吧。 例1:给定一个数组a[n],求数组中是否存在两个数的和等于给定值sum并输出?编程之美 2.12 快速寻找满足条件的两个数 这个问题很常见,我当年在面试微软实习... 阅读全文
posted @ 2013-12-19 12:55 higirle 阅读(3509) 评论(0) 推荐(1)
编程之美:2.14 求数组的子数组之和的最大值和最小值(动态规划)
摘要:问题一:一个有N个整数元素的一维数组(A[0],A[1]....,A[n-2],A[n-1]),求子数组之和的最大值是什么?方法一:动态规划问题描述符合动态规划最优子结构的要求。设b[i]表示以a[i]结尾 的子数组的最大子段和(a[i]一定包含在b[i]中,即:b[i]=max{sum(a[j~i])},其中0Max{sum, Max{a[i], b[i-1]+a[i]}}1. 包含a[i],即求b[i]的最大值,在计算b[i]时,可以考虑以下两种情况,因为a[i]要求一定包含在内,所以 1) 当b[i-1]>0,b[i] = b[i-1]+a[i] 2) 当b[i-1]sum ,即b 阅读全文
posted @ 2013-12-19 12:43 higirle 阅读(1112) 评论(0) 推荐(0)
编程之美:2.21只考加法的面试题
摘要:《编程之美》 2.21只考加法的面试题我们知道:1+2 = 3;4+5 = 9;2+3+4 = 9。等式的左边都是两个或两个以上连续的自然数相加,是不是所有的整数都可以写成这样的形式呢?问题1: 对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。问题2: 大家在测试上面程序的过程中,肯定会注意到有一些数字不能表达为一系列连续的自然数之和,例如32好像就找不到。那么,这样的数字有什么规律呢?能否证明你的结论?问题3: 在64位正整数范围内,子序列数目最多的数是哪一个?问题一解法:双指针遍历这题有两种解法, 其中一种便是双指针法,还有一种比较巧妙,利用了数学方法,简单来说是求 阅读全文
posted @ 2013-12-18 10:13 higirle 阅读(637) 评论(0) 推荐(1)
编程之美的2.17,数组循环移位 & 字符串逆转(反转) Hello world Welcome => Welcome world Hello
摘要:代码如下:(类似于编程之美的2.17,数组循环移位) static void Main(string[] args) { string input = "Hello World Welcome"; char[] tempArray = input.ToCharArray(); string result = RightShift(tempArray, 0, tempArray.Length-1); } public static string Rig... 阅读全文
posted @ 2013-12-17 12:28 higirle 阅读(691) 评论(0) 推荐(0)
编程之美:求字符串距离
摘要:public static int CalculateStringDistance(string strA, int pABegin, int pAEnd, string strB, int pBBegin, int pBEnd) { if (pABegin > pAEnd) { if (pBBegin > pBEnd) { return 0; } else ... 阅读全文
posted @ 2013-12-12 16:54 higirle 阅读(301) 评论(0) 推荐(0)
堆排序算法的实现 (冒泡排序)
摘要:方法一:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication3{ class Program { static void Main(string[] args) { List seqlist = new List { 42, 20,17, 27,13,8,17,48}; HeadOrder... 阅读全文
posted @ 2013-12-11 13:54 higirle 阅读(438) 评论(0) 推荐(0)