自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小刀

不断学习

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 编程之美2.21 只考加法的面试题

问题1:写一个程序,对于一个64位整数,输出所有的连续自然数之和的算式。问题2:哪些数字不能这样表示。问题3:64位整数范围内,哪个数字的子序列数目最多。     问题1好说,求平均数就可以得到了。研究一下问题2,我们可以列一个表格:          项数     特点     2      奇数,至少3     3      3的倍数,至少6 

2014-02-16 21:04:59 1917

原创 编程之美1.7 光影切割问题

问题描述:     不少人很爱玩游戏,例如 CS ⑨。 游戏设计也成为程序开发的热点之一,我们假设要设计破旧仓库之类的场景作为战争游戏的背景。仓库的地面会因为阳光从屋顶的漏洞或者窗口照射进来而形成许多光照区域和阴影区域。为了简单起见,假设不同区域的边界都是直线 ⑩, 我们把这些直线都叫做“光影线”,并且不存在三条光影线相交于一点的情况。     那么,如果我们需要快速计算某个时刻,在

2014-02-14 18:44:53 1781

原创 编程之美1.4 买书问题

在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五卷,用编号 0, 1, 2, 3, 4 来表示。假设每一卷单独销售均需要 8 欧元。 如果读者一次购买不同的两卷,就可以扣除 5% 的费用,三卷则更多。     在一份订单中,根据购买的卷数以及本书,就会出现可以应用不同折扣规则的情况。但是,一

2014-02-14 16:43:41 1461

原创 编程之美1.6 饮料供货

问题描述:     在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件? No, 是去水房拿饮料:酸奶,豆浆,绿茶、王老吉、咖啡、可口可乐……(当然,还是有很多同事把拿饮料当做第二件事)。管理水房的阿姨们每天都会准备很多的饮料给大家,为了提高服务质量,她们会统计大家对每种饮料的满意度。一段时间后,阿姨们已经有了大批的数据。某天早上,当实习生小飞第一个冲进水房并一次拿了五瓶酸奶、四瓶王

2014-02-14 16:26:00 1572

原创 编程之美1.5 快速找出故障机器

关心数据挖掘和搜索引擎的程序员都知道,我们需要很多的计算机来存储和处理海量数据。然而,计算机难免会有硬件故障而导致网络联系失败或死机。为了保证搜索引擎的服务质量,我们需要保证每份数据都有多个备份。     为了简单起见,我们假设一个机器仅储存一个标号为 ID 的纪录(假设 ID 是小于 10 亿的整数)假设每份数据保存两个备份,这样就有两个机器储存了同样的数据。       1. 在某个时

2014-02-12 13:14:52 1203

原创 编程之美1.3 一摞烙饼的排序(Python)

问题:     星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:“我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,把它们上下颠倒个个儿,反复几次之后,这摞烙饼就排好序了。我

2014-02-10 19:03:41 2177

原创 经典乱码“烫烫烫”和“屯屯屯”

经典乱码“烫烫烫”和“屯屯屯”     程序猿有个经典的内部笑话:手持两把锟斤拷,口中疾呼烫烫烫。     写过代码的人都碰到过。最近从Google搜索页调到百度的网页上大量出现锟斤拷,不知怎么回事。     烫烫烫和屯屯屯产生自VC,这是debug模式下VC对内存的初始化操作。VC会把栈中新分配的内存初始化为0xcc,而把堆中新分配的内存初始化为0xcd。0x

2014-02-09 18:06:58 53099

原创 堆栈内存分配

栈:局部变量,函数参数。由操作系统负责调度和安排,并收回不再需要的空间堆:自行分配的内存,操作系统不会管,只有当程序结束时才会释放自由存储区:和堆相似,不同的是malloc分配,free释放全局/静态存储区:全局变量,静态变量常量存储区:比如说字符串之类的

2014-02-09 17:31:21 700

原创 C和C++的数据类型所占的空间

C和C++的各种数据类型所占据的字节数挺混乱的,因为没有一个明确的标准,不像Java和C#之类的语言,标准和编译器都是一家做的,自然很明确。C的编译器由各个商业公司或组织自行针对各自平台环境进行开发,产生了很多的差异。这边做个大概的不完全的总结。      32位机器下大多数的编译器:指针:由于32位需要2^32的地址,因此指针需要32位空间,也就是4个字节char:1字节

2014-02-09 16:08:03 1048

原创 编程之美1.2 中国象棋将帅问题

象棋中,将和帅不能在同一条直线上。将和帅分别在自己的3×3的空间内活动。要求写出一个程序求出全部的合法的将帅位置,要求只能使用一个变量。     分析:将和帅分别有9种位置,需要判断9*9个情况下是否位置合法。问题在于仅有一个变量存储空间。我们可以给将帅的位置编号分别为1-9,存储两个数仅用一个变量,解决方法是将一个变量拆分成两段进行存储。由于存储的数很小,每个数仅需4bit即可存储,

2014-02-03 20:33:36 1253

原创 数据结构与算法18:快速排序法QuickSort

数据结构与算法18:快速排序法QuickSort    快速排序法的基本步骤:    1. 选定一个key    2. 将比key小的放到左边,比key大的放到右边    3. 对key左右两端分别快排C语言代码:void quicksort(int start, int end, int data[]){ int key

2014-01-21 18:10:00 834

原创 数据结构与算法17:最小生成树克鲁斯卡尔Kruskal算法

数据结构与算法17:最小生成树克鲁斯卡尔Kruskal算法    Kruskal算法和prim算法的出发点是一样的,都是要选择那些尽可能权值小的边来组成最小生成树。不同点在于,prim算法是从一个点出发,不断扩张,直到整个树包含了全部点为止。而Kruskal算法则是从边的角度出发,选择尽可能小的边连接点,直到选择的边能够组成一颗包含全部点的树为止。    Kruskal算法

2014-01-21 17:48:59 1068

原创 数据结构与算法16:最小生成树普利姆prim算法

数据结构与算法16:普利姆prim算法    Prim算法是一个计算图的最小生成树的算法。图的最小生成树指的是一个图中去掉一些边,使得剩余的边仍然保持连通,包含全部的点,并且权值之合最小。经过这样的处理后得到的肯定是一颗树。    Prim算法和Dijkstra算法有着很相似的地方。Prim算法的大概思想是,把点划分为两个集合S和V,先放任意一个点到S中(因为随便放哪个得到

2014-01-21 15:05:11 1137

原创 数据结构与算法15:单源最短路径弗洛伊德Floyd算法

数据结构与算法15:单源最短路径弗洛伊德Floyd算法    Floyd算法是另一种经典的最短路径算法,不同的是,dijkstra算法仅计算了一个起点出发的最短路径,而floyd算法可以计算全部节点到其他节点的最短路径。相比之下,Floyd算法复杂度为n3,而dijkstra算法为n2。Floyd算法的基本思想也是松弛。这是一个动态规划的经典例子,在求解各个点到其他点的最短路径的过程中

2014-01-20 22:27:19 1961

原创 数据结构与算法14:线性索引查找

数据结构与算法14:线性索引查找    线性索引查找是在待查询序列比较大,或者不方便排序的情况下的一种措施,通过一个较小的索引来实现快速查找。比如汉语字典,我们需要先在前面的索引中找到这个字,然后再到后面去查找这个字的详细资料,那么前面的这个索引起到的作用就是这个作用了。线性索引查找在实际应用中有多种形式,适合不同的情况。    1. 稠密索引    稠密索引是

2014-01-20 21:12:04 1132

原创 数据结构与算法13:折半查找、差值查找和斐波那契查找

数据结构与算法13:折半查找、差值查找和斐波那契查找    1. 折半查找(二分查找)    折半查找也叫二分查找。是在一个已排序的序列中寻找一个目标key的简单有效方式。折半查找每次对查找区域寻找中间位置的值并进行比较,随后舍弃不符合的区域,然后对剩下区域继续折半,直到遇到key相等的目标元素。折半查找的复杂度为O(lgn)。    2. 差值查找

2014-01-20 20:36:39 1206

原创 数据结构与算法12:单源最短路径Dijkstra算法

数据结构与算法12:单源最短路径Dijkstra算法    Dijkstra算法是一种经典的贪心算法例子。单源最短路径是指如何在一个图中,从某一点出发计算出这个点到其他点的最短距离。    Dijkstra算法的主要思想是贪心算法和松弛。计算中该算法不求一次得到某个点的最优解,而是给出一个该点距离的上界。通过不断降低上界的过程,使得最终达到最优解。该算法的主要步骤如下:

2014-01-20 19:19:22 2181

原创 数据结构与算法11:拓扑排序

数据结构与算法11:拓扑排序    拓扑排序是指在一个AOV网络(http://baike.baidu.com/view/1475661.htm)中找到一种节点的排序序列,使得序列中的任意一个节点在它的所有前置节点的后面,满足AOV所表示的依赖关系,这样的一个序列就叫拓扑序列。而寻找这样一个序列的过程叫拓扑排序。拓扑排序往往不是唯一的,可能存在多种满足同一个AOV网络的拓扑序列。

2014-01-20 17:01:03 828

原创 数据结构与算法10:马踏棋盘问题(骑士周游问题)

问题描述:在一个国际象棋的棋盘上,一个马按照它的规则如何才能从一个点出发遍历每一个位置,且每个点只访问一次。    问题分析:这是一个深搜的问题,沿着一条路前进直到遍历全部的点,那就完成了整个的过程。如果不行,就回退一步,换个方向继续前进。这可以用递归很方便地实现。注意到马在某个位置最多有8个方向可以走,因此需要对这8个方向进行试探。当然这8个方向不一定都存在,比如在边缘可能就会少一些

2014-01-20 16:36:10 2684

原创 数据结构与算法9: 图的广度优先搜索

数据结构与算法9: 图的广度优先搜索    图的广度优先搜索是指每次都访问完一个节点的全部未被访问过的相邻节点,再去访问其中一个相邻节点的全部相邻的未访问节点。广度优先搜索是一个不断扩大范围的过程。广搜可以使用队列实现。    使用邻接表表示图。C++。#include #include #define MAX 100using namespace st

2014-01-20 14:14:04 968

原创 数据结构与算法8:图的深度优先搜索

图的深度优先遍历的基本思想就是沿着一个方向走到底,发现无路可走后退一步接着走,再退一步接着走,直到退回到起点。如果图是连通的,那么一定可以遍历全部节点。这种方式很容易想到递归的方式去实现。    下面是C语言代码,图以邻接表的方式表示。#include #include #define MAX 100typedef struct ptr{ int pos; s

2014-01-20 13:50:20 738

原创 数据结构与算法7:哈夫曼树,二叉查找树,平衡二叉查找树,B树,B+树

这篇文章讨论一些常用的树结构和它们的一点相关性质和算法。    1. 哈弗曼树    哈弗曼树的主要目的是压缩。比如对一系列频率不同的字符,分别给它们不同长度而没有歧义的编码,使得期望的总编码长度降到最低。哈弗曼树比较好理解,不多说,具体过程大概是先选择频率最低的两个字符,分别作为树的最底层两个节点,然后给它们一个父节点,父节点的频率记为它们的合,考察当前剩余的节点和当前没有父节点

2014-01-19 18:37:37 1236

原创 数据结构与算法6:二叉树的存储结构与遍历

1. 二叉树的存储结构    二叉树的存储结构主要有两种。相对一般的树而言,二叉树比较特殊,存储也相对更简单明确。二叉树也是最常用的树。    如果二叉树接近满,那么可以使用顺序存储,因为二叉树的特殊性质,我们根据位置可以直接推算出它在树中的位置。如果是一般的二叉树的话,最常用的的还是二叉链表,即每个节点有两个指针,分别指向左子树和右子树。    2. 二叉树的遍历   

2014-01-19 16:46:37 717

原创 数据结构与算法5:图的存储结构

图的存储方式主要有邻接矩阵,邻接表,十字链表,邻接多重表,边集数组等。        1. 邻接矩阵    邻接矩阵是通过一个二维表格的形式存放图的关系的。D[i][j]表示图中i节点到j节点是否有边或者边的权值。如果两个点没有边,那么D[i][j]=∞。这是很直观的方式,但是不方便节点的加入删除,对于稀疏图而言比较浪费空间。    2. 邻接表    邻接表的形式和树

2014-01-18 21:11:03 877

原创 数据结构与算法4:树的基本存储结构

树的存储结构主要由双亲表示法和孩子表示法,以及它们的各种改造版本。    由于计算机内存是线性的,而线性关系不能直接表示树的存储结构,因此我们需要设计一种能够在线性环境下表示树的数据结构的存储方式。可以存储树的数据结构很多,每种结构有自己的特点和适用的场景,根据实际需要来使用。    双亲表示法:    双亲表示法是指在每个节点中表示它的父节点的位置。整个树的节点作为一

2014-01-18 18:40:00 740

原创 数据结构与算法3:KMP

数据结构与算法3:KMP    KMP算法是一个经典的字符串匹配的高效算法,虽然实际不常用。    KMP是对朴素算法的改进。它的思路的关键在于,当发生失配的情况的时候,我们不一定只往后移动一位。由于我们已经匹配了一部分,那么我们就可以根据已匹配的那一部分模式的特点,来确定往后移动多少位。    具体来说,比如ababs,模式abas,发现第四位不匹配,那么就需

2014-01-17 17:20:50 659

原创 数据结构与算法2:八皇后问题

问题描述:八皇后问题是在一个国际象棋的棋盘上(8乘8)摆放8个皇后,使得相互无法攻击。国际象棋中,皇后的攻击范围是同一行、同一列或者同一对角线上。这个问题总共有92个解(包括对称、旋转都算)。    问题分析:这个问题解法基本上就是尝试不同的情况,留下符合要求的,具体做法很多,这边只是我的做法。考虑到一个事实:每一行有且仅有一个皇后,否则不成立。因此,我们可以把全部的解空间看做一棵树,

2014-01-17 00:54:16 1324

原创 数据结构与算法1:汉诺塔

数据结构与算法1:汉诺塔    汉诺塔问题。这是一个经典的递归问题,直接考虑求解很难,但是考虑递归的做法就会容易很多。设三个棍子分别为X,Y,Z。我们的目标是把X上的64个盘子移动到Z上,且遵守小盘在上的规定。    思路可以是这样的,假设有个神告诉我们如何把63个盘子从一个棍子移动到另一个棍子(只是假设),那我们需要做的就是三步:        1. 把上面63个盘子移动到Y

2014-01-16 16:59:42 809

原创 KMP算法简述

1  算法目的       KMP算法是模式匹配算法的一种高效方式,即在一个字符串中查找是否包含目标的匹配字符串。2  算法分析       对于在字符串中查找子串的方法,我们会很自然地想到一种方式。首先把被查找的字符串和要查找的子串对齐,看第一位是否匹配,如果匹配就看第二位是否匹配。否则,就把子串整体向右滑动一位,再从子串的第一位开始和父串匹配,直到查找到子串为止。2.1  简单

2013-09-18 21:22:57 1492

原创 数据结构与算法知识点整理(一)数据结构概述

数据结构概述1.数据结构的研究内容:研究的是数据之间的彼此抽象的关系,不涉及具体的数据内容。2.基本数据结构分为:线性表、树和图。3.数据结构分为逻辑结构和物理结构。逻辑结构是抽象出来的理论模型,而物理结构是指实际存储在磁盘、内存等介质上的结构。前者是数学模型,后者是实际的。后者分为顺序存储结构和链式存储结构。这些也没有什么太多可讲的,简单写一下概念。ADT抽象数据

2012-12-06 14:01:30 1524

原创 概率论与数理统计知识点整理(二)条件概率和独立性

1. 条件概率 乘法原理条件概率的定义:P(AB)/P(B)称为在B的条件下A的概率,记为P(A|B)乘法原理:P(AB)=P(A|B)P(B)=P(B|A)P(A)2. 全概率公式P(A)=其实这个也是没有太多好解释的地方,很好理解。把S分成很多种情况,在每种情况下,A都有发生的可能性,而全概率就是计算在这样的情况下,A总体的概率。3. 贝叶斯公式

2012-12-06 13:57:53 2503

原创 概率论与数理统计知识点整理(一)随机事件与概率

1.写在前面概率论的第一章内容主要是一些基本的概念,并没有太多的新的概念。主要就是对高中接触过的一些基本概率模型的进一步规范化和体系化,以及对我们日常生活中的习以为常却非常模糊的“常识”进行了符号化,为整个概率论体系的建立起一套规范。2.一些基础性的概念这些概念不需要过多的解释,但还是应该清楚。随机试验:在相同情况下可重复进行的,结果具有随机性不可准确预测的试验。但是,

2012-12-06 13:50:10 3574

原创 Windows下Git与TortoiseGit使用教程(Github为例)(四)

正式开始建立github仓库建立仓库的操作需要在网站上进行。我们通常是在服务器上建立仓库(repository),然后克隆(clone)到本地。如果你想在本地直接建立仓库(init),那么通常是本地的单人代码库,或者是局域网内部共享的库,或者你就是代码服务器的管理员。Github上建立仓库的操作很简单,打开网站,右上角右数第三个按钮就是了(看图)。你只需要输入项目名字,以及建立“.gi

2012-12-04 15:37:29 20859 3

原创 Windows下Git与TortoiseGit使用教程(Github为例)(三)

Git工作流程不要着急,我们在正式使用之前,需要对Git的基本工作流程有一个清晰的理解。从本地库单一分支开始Git是分布式的,因此,服务器上的库和你本地的库其实是同等的,两边的库都是具有完整的历史版本信息的。事实上,如果没有服务器,那么成员之间也是可以直接进行代码同步的,只不过这样会很混乱。这一点和SVN与CVS这样的集中式系统是很不同的。我们先研究本地的单一分支库。文件状态

2012-12-04 15:34:20 4749 1

原创 Windows下Git与TortoiseGit使用教程(Github为例)(二)

准备工作软件安装我指的是Windows下。由于Git从来没有官方的windows版(可以理解,linus做的嘛),windows下有两种非官方使用途径,一个是Cygwin,另一个是msysGit。Cygwin比较凶残,直接把Gnu工具集转移到了windows上,不过不推荐,cygwin这个东西,如果不做嵌入式,不需要交叉编译,用不着这么凶残,msysGit就足够了,也更简单。目前是1.8.

2012-12-04 15:33:22 2908

原创 Windows下Git与TortoiseGit使用教程(Github为例)(一)

写在前面为什么会有这篇文章因为正在准备好几个比赛项目,另外也算是为了以后接项目,或者是自己的项目做一些准备,所以版本控制系统还是很有必要的。顺便吐槽一下百度,这两天由于种种原因,不得不切换成百度,结果各种资料查不到,不说了,还是切换回Google,虽然翻墙麻烦一点,但是起码可以找到需要的资料。中文的开发资料还是相当不全面,对Git和TortoiseGit的介绍几乎就是简单地提提几个命令

2012-12-04 15:31:57 5147

Windows下Git与TortoiseGit使用教程 PDF

Windows下Git与TortoiseGit使用教程 PDF

2014-03-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除