2012年5月7日

【算法】代码运行时间的三种测量方法

摘要: 一,返回单位为毫秒#include<windows.h>DWORD dwStart = GetTickCount();// 测试代码DWORD dwTime = GetTickCount() - dwStart;二,返回时间为秒#include<time.h>unsigned long start,stop;start=time(NULL); //取值为秒//你的程序stop=time(NULL);printf("运行时间:%ld",stop-start);三,精确计时法QueryPerformanceCounter()这个函数返回高精确度性能计数器 阅读全文

posted @ 2012-05-07 23:23 小田的专栏 阅读(874) 评论(0) 推荐(0) 编辑

2012年5月6日

【算法复习四】计算复杂性与算法分析---组合数学知识汇总

摘要: 一,组合数学问题 1)排列定义 • 从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。 •排列的全体组成的集合用P(n,r)表示。当r=n时称为全排列。 组合定义 • 定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。 • 组合的全体组成的集合用C(n,r)表示。 2)例题一:某车站有6个入口处,每个入口处每次只能进一人,一组9个人进站的方案有多少? 【解法】一进站方案表示成:00011001010100 其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。给“1”n个门只用n-1个门框.. 阅读全文

posted @ 2012-05-06 21:08 小田的专栏 阅读(548) 评论(0) 推荐(0) 编辑

【算法复习三】算法设计技巧与优化----算法设计技巧之中位数

摘要: 题目:设计一个高效算法,求两个等长为L的升序序列A和B的中位数。 例如:S1=(11,13,15,17,19) S2=(2,4,6,8,20) 则S1和S2的中位数是11。1)问题分析1: 简单的算法是将两个升序序列归并排序,然后求其中位数算法的时间复杂度和空间复杂度均为0(n)2)问题分析2: 利用归并排序的思想对A和B的元素逐个访问,同时计数,当访问到第L个元素时即为所求。 算法时间、空间复杂度分别为O(n), O(1)3)问题分析3: 分别求A和B的中位数a和b。 (1)若a=b,则a或b即为所求。 (2)若a<b,舍弃a所在序列A中的较小一半,同时舍弃b中所在序列B较大一半,两者 阅读全文

posted @ 2012-05-06 16:56 小田的专栏 阅读(356) 评论(0) 推荐(0) 编辑

【算法复习三】算法设计技巧与优化----算法设计技巧

摘要: 一,例题:找出n个自然数(1,2,3,…,n)中r个数的组合。 •例如,当n=5,r=3时,所有组合为: 12 3 1 2 4 12 5 13 4 13 5 14 5 23 4 23 5 24 5 34 5 total=10 {组合的总数} •算法设计1)n个数中r的组合,其中每r个数中,数不能相同;2)任何两组组合的数,所包含的数也不应相同。例如,5、4、3与3、4、5。为此,约定前一个数应小于后一个数。将上述两条作为约束条件;3)当r=3时,可用三重循环进行枚举。 【解法一】穷举法 #include <iostream>using namespace s... 阅读全文

posted @ 2012-05-06 16:12 小田的专栏 阅读(351) 评论(0) 推荐(0) 编辑

【面试】面试经典问答和回答思路

摘要: 面试过程中,面试官会向应聘者发问,而应聘者的回答将成为面试官考虑是否接受他的重要依据。对应聘者而言,了解这些问题背后的“猫腻”至关重要。 问题一:“请你自我介绍一下” 思路: 1、这是面试的必考题目。 2、介绍内容要与个人简历相一致。 3、表述方式上尽量口语化。 4、要切中要害,不谈无关、无用的内容。 5、条理要清晰,层次要分明。 6、事先最好以文字的形式写好背熟。 回答要点:用10秒钟简单说说个人资料即可。用一分半钟左右时间介绍你以前从事的工作,和所获得的经验。再用一分钟左右时间描述你以前的工作经验对应聘的这份职位来说有那些帮助。 问题二:“谈谈你的家庭情况” 思路: ... 阅读全文

posted @ 2012-05-06 14:09 小田的专栏 阅读(389) 评论(0) 推荐(1) 编辑

2012年5月5日

【人生】程序员装逼指南----速成篇

摘要: 一.准备工作“工欲善其事必先利其器。”1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好。一个用来查资料,一个用来写代码。总之要显得信息量很大,效率很高。2.椅子不一定要舒服,但是一定要可以半躺着。3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善。沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子。4.工具书,orelly的,机械工业,电子工业什么的都可以,能英文就英文,不行影印版的也可以,反正越厚越好,而且千万不要放在书架上,一定要堆在桌上,半打开状。二.从进门开始1.着装!着装!不管你是去实验室,或者去公司的大楼,在或者是小公司的民宅,或是自己创业的 阅读全文

posted @ 2012-05-05 22:08 小田的专栏 阅读(298) 评论(0) 推荐(0) 编辑

【算法复习三】算法设计技巧与优化----各种背包问题总结

摘要: 一,算法策略应用 1)关于背包问题 按与利润关系划分 •与利润无关的背包问题 •与利润有关的背包问题 按物体装入背包的多少 •部分背包问题•0-1背包问题 2)背包问题的求解策略,根据不同的需求 •贪心法、回溯法、分支限界法、动态规划 • 递归或非递归求解二,背包问题展示 1)背包问题1 • 问题描述:给定n种物品,从中选出m件,使其重量之和与T之差的绝对值为最小。 例如:n=9,m=3,T=500克。• 问题分析1:采用三重循环,枚举法。 数据变化过程: (1,2,3) (1,2,4) …(1,2,9) (1,3,4) (1,3,5) …(1,3,9)…(1,8,9) (2,3,4)... 阅读全文

posted @ 2012-05-05 21:45 小田的专栏 阅读(875) 评论(0) 推荐(0) 编辑

2012年5月4日

【算法复习二】传统基本算法(贪心、动态规划、回溯和分支限界)

摘要: 一,贪心算法的设计思想 •从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解。当达到某算法中的某一步不需要再继续前进时,算法停止。二,贪心算法的基本性质 1)贪心选择性质所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心法与动态规划法的主要区别。 2)最优子结构性质 该问题解的整体最优性依赖于其局部子问题解的最优性。这种性质是可以采用贪心算法解决问题的关键特征。例如,活动安排问题,在选择了一项活动后,它必须是最优的,否则不能得到全局的最优。三,贪心算法... 阅读全文

posted @ 2012-05-04 17:08 小田的专栏 阅读(5166) 评论(0) 推荐(0) 编辑

【算法复习二】八皇后问题 ---- 回溯

摘要: 一,问题描述 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。二,分析 采用逐步试探的方式,先从一个方向往前走,能进则进,不能进则退并尝试另外的路径。首先我们来分析一下国际象棋的规则,这些规则能够限制我们的前进,也就是我们前进途中的障碍物。一个皇后q(x,y)能被满足以下条件的皇后q(row,col)吃掉 1)x=row(纵向不能有两个皇后) 2) y=col(横向不能有两个皇后) 3)col + row = y+x;(斜向正方向) 4)col - row = y-x;(斜向反方向) 遇到上述问题之一的时候,说明我们已经 阅读全文

posted @ 2012-05-04 16:49 小田的专栏 阅读(420) 评论(0) 推荐(0) 编辑

【算法复习二】货郎担(旅行售货商)动态规划

摘要: 一,问题由来 货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。 二,问题描述 1)货郎担问题提法:有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短? 2)旅行商问题的提法:假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。三,问题求解 1)动态规划解 例题:设... 阅读全文

posted @ 2012-05-04 15:25 小田的专栏 阅读(1297) 评论(1) 推荐(1) 编辑

2012年5月3日

【算法复习二】0-1背包问题总结

摘要: 一 ,问题描述: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二,解决方案: 考虑使用dp问题 求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。opt[i][v] = max(opt[i-1][v] , opt[i-1][v-c[i]] + w[i]) 解释如下:opt[i-1][v] 表示第i件物品不装入背包中,而opt[i-1][v-c[i]] + w[i] 表示第i件物品装入背包中。花费如下: 时间复... 阅读全文

posted @ 2012-05-03 23:40 小田的专栏 阅读(495) 评论(0) 推荐(0) 编辑

【算法复习二】传统基本算法(分治----残缺棋盘问题)

摘要: •问题描述: 残缺棋盘是一个有2k×2k(k≥1)个方格的棋盘,其中恰有一个方格残缺。如图给出k=1时各种可能的残缺棋盘,其中残缺的方格用阴影表示。• 残缺棋盘问题就是要用这四种三格板覆盖更大的残缺棋盘。在此覆盖中要求: 1)两个三格板不能重叠 2)三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。小格子数(2k×2k -1)三格板中小格子数3。所以所需要的三格板总数为(2k×2k -1 )/3。•例如,一个4*4的残缺棋盘2k*2k以k=2时的问题为例,用二分法进行分解,得到的四个k=1的棋盘。但要注意这四个棋盘,并不都是与原问题相似且独立的子问题。 因为当如图 阅读全文

posted @ 2012-05-03 18:51 小田的专栏 阅读(2348) 评论(0) 推荐(0) 编辑

【算法复习二】传统基本算法(迭代、递归、分治)

摘要: 一,迭代与递推 1)迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。迭代算法一般用于数值计算。迭代法应该是我们早已熟悉的算法策略,程序设计语言课程中所学的累加、累乘都是迭代算法策略的基础应用。例如:斐波那契数列 例子:兔子繁殖问题 一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少只兔子。 •问题分析 因为一对兔子从出生后第三个月开始每月生产一对小兔子,则每月新下生的小兔子的对儿数显然由前两个月的小兔子的对儿数决定。则繁殖过... 阅读全文

posted @ 2012-05-03 16:55 小田的专栏 阅读(1220) 评论(1) 推荐(0) 编辑

【算法复习一】常见的算法策略汇总

摘要: 一,概述 算法策略和算法是有区别的,它们是算法设计中的两个方面,算法策略是面向问题的,算法是面向实现的; 但二者又是不可分的,首先是通过算法策略才找出解决问题的算法,其次对于用不同算法求解的问题算法策略是自然不同的。二,算法策略 1)递推策略:“递推法”和贪心算法一样也是由当前问题的逐步解决从而得到整个问题的解,只是依赖的是信息间本身的递推关系,每一步不需要策略参与到算法中,它们更多地用于计算。 2)递归策略:递归法是利用大问题与其子问题间的递归关系来解决问题的。每次找出大问题与小的子问题之间的关系,直到小的子问题很容易解决,再由小的子问题的解导出大问题的解。。例如:... 阅读全文

posted @ 2012-05-03 09:51 小田的专栏 阅读(965) 评论(0) 推荐(0) 编辑

2012年5月2日

【编译原理】第三章 词法分析

摘要: 一,词法分析器的作用 词法分析是编译的第一阶段。词法分析器主要任务是读入源程序的输入字符、将他们组成词素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。 分析部分:词法分析、语法分析(简化编译器设计、提高编译器效率、增强编译器可移植性) 1)词法单元:词法单元名和可选的属性值组成。关键字、操作符…… 2)模式:词法单元词素可能具有的形式,当词法单元是关键字时,模式就是这个关键字的字符序列 3)词素:源程序中的一个字符序列,它和某个词法单元模式匹配。 4)词法错误:识别出某个错误词素,继续判断下一个词素二,输入缓冲 1)我们至少向前看一个字符,才... 阅读全文

posted @ 2012-05-02 11:03 小田的专栏 阅读(6848) 评论(0) 推荐(0) 编辑

2012年4月30日

【编译原理】第一章 引论

摘要: 一,语言处理器1)一个集成的软件开发环境,其中包括很多种类的语言处理器,比如编译器、解释器、汇编器、连接器、加载器、调试器以及程序概要提取工具。2)编译器:把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 包括编译器,反编译器,交叉编译器3)解释器:能够执行用其他计算机语言编写的程序的系统软件,它是一种翻译程序。它的执行方式是一边翻译一边执行,因此其执行效率一般偏低,但是解释器的实现较为简单,而且编写源程序的高级语言可以使用更加灵活和富于表现力的语法 编译器产生的机器语言目标程序,比解释器快很多。解释器的错误诊断通常比编译器更 阅读全文

posted @ 2012-04-30 20:52 小田的专栏 阅读(546) 评论(0) 推荐(1) 编辑

2012年4月28日

【算法】组合数学——排列数生成算法详解(一)

摘要: http://www.newsmth.net/pc/pccon.php?id=10001420&nid=273678&pid=0&tag=0&tid=18452组合数学中的全排列深成算法历来是组合数学考试的重要考察点,因此在这里我简单的介绍一下6种全排列生成算法的详细过程,并借此比较它们之间的优劣之处。不论是哪种全排列生成算法,都遵循着“原排列”→“原中介数”→“新中介数”→“新排列”的过程。其中中介数依据算法的不同会的到递增进位制数和递减进位制数。关于排列和中介数的一一对应性的证明我们不做讨论,这里仅仅给出了排列和中介数的详细映射方法。相信熟练掌握了方法就可以 阅读全文

posted @ 2012-04-28 15:28 小田的专栏 阅读(3992) 评论(0) 推荐(0) 编辑

2012年4月25日

【计算机网络】TCP关闭连接问题及注意

摘要: TCP状态: LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接中断请求 CLOSE-WA IT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对连接中断的确认 LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT:等待足够的时间以确保远程TCP接收到连接 阅读全文

posted @ 2012-04-25 11:37 小田的专栏 阅读(279) 评论(0) 推荐(0) 编辑

2012年4月24日

【100题】第三十六 比赛淘汰问题(谷歌笔试)

摘要: 一,题目:(谷歌笔试) n支队伍比赛,分别编号为0,1,2……n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。.......胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名编程实现,给出二维数组w,一维数组order 和 用于输出比.. 阅读全文

posted @ 2012-04-24 09:09 小田的专栏 阅读(321) 评论(0) 推荐(0) 编辑

2012年4月23日

【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)

摘要: 一,题目:求一个矩阵中最大的二维矩阵(元素和最大).如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码二,分析:假设最大子矩阵的结果为从第r行到k行、从第i列到j列的子矩阵,如下所示(ari表示a[r][i],假设数组下标从1开始): | a11 …… a1i ……a1j ……a1n | | a21 …… a2i ……a2j ……a2n | ..... | ar1 …… ari ……arj ……arn |第r行 . . . .......... | V | ak1 …… aki ……akj ……a 阅读全文

posted @ 2012-04-23 18:44 小田的专栏 阅读(3694) 评论(0) 推荐(1) 编辑

导航