C
chensilly8888
求饥若渴,大智若愚。
展开
-
从GCC编译器来学习各类C标准及编译器使用
通过GCC编译器学习,了解C标准和C++标准,知道各个经典书籍采用的标准,以及各个编译器对标准的支持及配置。原创 2014-12-16 10:12:02 · 2434 阅读 · 0 评论 -
数据结构专题——栈
一、栈(stack)(可与队列对比进行学习)思想:栈实现的是一种后进先出(last-in,first-out,LIFO)策略。(《算法导论》)定义:栈是限定仅在表尾进行插入和删除操作的线性表(具有线性关系/前驱后继关系)。(《大话数据结构》)术语:栈的两端:栈顶(top):允许插入和删除操作的一端。栈底(bottom):不允许插入和删除的一端。(栈特点:栈底是固定的,最先进栈的只能原创 2015-01-21 15:31:39 · 667 阅读 · 0 评论 -
《编程之美》学习笔记——2.21只考加法的面试题
一、问题我们知道:1 + 2 = 3;4 + 5 = 9;2 + 3 + 4 = 9;等式两边都是两个以上的连续的自然数相加,那么是不是所有的整数都可以写成这样的形式呢?稍微考虑一下,我们发现,4、8等数并不能写成这样的形式。问题1:写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。问题分析:输入:Sum(64位正整数),可转化为:原创 2015-01-26 14:05:11 · 899 阅读 · 0 评论 -
《编程之美》学习笔记——2.19区间重合判断
一、问题 给定一个源区间[x,y](y>=x)和N个无序的目标区间[x1,y1],[x2,y2],...,[xn,yn],判断源区间[x,y]是不是在目标区间内。例: 给定源区间[1 6]和一组无须的目标区间[2 3][1 2][3 9],即可认为区间[1 6]在区间[2 3][1 2][3 9]内(因为目标区间实际上时[1,9])。问题分析: 输入:源区间[x,y],可原创 2015-02-03 15:23:10 · 764 阅读 · 0 评论 -
《算法导论》学习笔记——钢条切割,斐波那契数列(动态规划)
一、动态规划动态规划思想:通过子问题求解原问题,应用于子问题重叠的情况。动态规划特点:1.最优子结构2.重叠子问题动态规划步骤:1.刻画一个最优解的结构特征。2.递归地定义最优解的值。3.计算最优解的值,通常采用自底向上的方法。4.利用计算出的信息构造一个最优解。动态规划实现方法:1.带备忘的自顶向下法2,自底向上法分治法与动态规划法比较原创 2015-01-04 19:10:50 · 1636 阅读 · 0 评论 -
《算法导论》学习笔记——最大子数组(分治策略,动态规划)
一、分治策略分治法的思想 将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。递归式 递归式与分治方法是紧密相关的,因为使用递归式可以很自然地刻画分治算法的运行时间。在分治策略中,我们递归地求解一个问题,在每层递归中应用如下的三个步骤: 分解:将问题划分为一些子问题,子问题的形式与原问题一样,只原创 2015-01-04 10:42:51 · 2513 阅读 · 0 评论 -
《编程之美》学习笔记——2.5寻找最大的K个数
一、问题 有很多无序的数,假定它们各不相等,从中找出最大的K个数。问题分析: 输入:N个数;K。 输出:N个数中最大的K个数,这K个数并不需要是有序的,只需为数组中最大的K个数即可。二、解法 解法一 排序算法数组全部数排序:可以对数组进行快速排序(O(nlgn)),然后获得最大的K个数(O(k))。这种方法下总的时间复杂度O(nlgn + k)=O(原创 2015-02-04 13:27:21 · 599 阅读 · 0 评论 -
《编程之美》学习笔记——2.17数组循环移位
一、问题设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。问题分析: 输入:长度为N的原数组,K 输出:循环右移K位后的数组 约束:时间复杂度要求O(N),且只允许两个附加变量二、解法 版本一:数组中的每个元素一次移到位(利用数据移位的变化规律) 思考:既然时间复杂度要求时O(n),且只允许两个附加变量,原创 2015-01-13 15:57:37 · 822 阅读 · 0 评论 -
《算法导论》学习笔记——背包问题
一、背包问题(knapsack problem)(参考维基百科: http://en.wikipedia.org/wiki/Knapsack_problem)1. 0-1 背包问题(0-1 knapsack problem the most common problem):2. 有界背包问题(bounded knapsack problem BKP):3.原创 2015-03-03 16:11:07 · 1079 阅读 · 0 评论 -
《编程珠玑》学习笔记——第一章 位图数据结构
一、题目:输入:一个最多包含n个正整数的文件,每个数都小于n,其中n = 10^7。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数相关联。输出:按升序排列的输入整数的列表。约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化了。题目分析: 这里明确了输入,输出和约束条件三个原创 2014-12-29 20:21:48 · 760 阅读 · 1 评论 -
数据结构专题——树
一、树(Tree)定义(参考维基百科: http://en.wikipedia.org/wiki/Tree_%28data_structure%29):A tree is a (possibly non-linear) data structure made up of nodes or vertices and edges without having any cycle. Th原创 2015-01-22 16:49:19 · 494 阅读 · 0 评论 -
C语言注意事项——switch语句
关于switch语句需要注意的地方原创 2014-12-18 09:25:46 · 1549 阅读 · 0 评论 -
数据结构专题——队列
一、队列(queue)思想:队列实现的是一种先进先出(first-in,first-out,FIFO)策略。(《算法导论》)定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。(《大话数据结构》)原创 2015-01-22 15:55:38 · 847 阅读 · 0 评论 -
《编程之美》学习笔记——2.12快速寻找满足条件的两个数
一、问题 能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 问题分析: 输入:一个长度为N的数组和一个给定的数X。 输出:数组中的两个数字A和B。 约束:X = A + B,且A和B至少存在一组。 其他:题目中只说了数字,说明这些数可能为正整数、负整数、零或浮点数等,不太可能通过给原创 2015-01-18 19:27:39 · 558 阅读 · 0 评论 -
编译器、操作系统、CPU相关的预处理宏定义
跨平台代码开发。原创 2014-12-16 18:19:35 · 3473 阅读 · 0 评论 -
C语言注意事项——数据类型、操作符和表达式
与移植性有关的C语言数据类型、操作符和表达式注意事项。原创 2014-12-18 10:09:04 · 631 阅读 · 0 评论 -
排序专题学习笔记——插入排序
插入排序(Insertion sorts)专题 这类算法通过在序列内插入并批量移动元素对序列进行排序。 下面介绍的算法实现中,排序输出的结果均是由小到大排列,只要稍微修改下代码(主要是判断语句)都可以使得输出序列的结果由大到小排列。1.插入排序 Insertion sort算法(参考维基百科:http://en.wikipedia.org/wiki/Insertion_so原创 2015-01-10 23:12:44 · 764 阅读 · 0 评论 -
排序专题学习笔记——交换排序
交换排序(Exchange sorts)专题这类算法通过在序列内元素之间的进行比较并交换元素对序列进行排序:冒泡排序,鸡尾酒排序,奇偶排序,梳排序,侏儒排序/地精排序,快速排序原创 2015-01-07 11:29:17 · 771 阅读 · 0 评论 -
《编程之美》学习笔记——计算字符串的距离
一、题目摘自书中: 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:1.修改一个字符(如把“a”替换为“b”)。2.增加一个字符(如把“abdd”变为“aebdd”)。3.删除一个字符(如把“travelling”变为“traveling”)。 比如,对于“a原创 2014-12-31 08:52:35 · 757 阅读 · 0 评论 -
《编程之美》学习笔记——2.1求二进制中1的个数
一、题目: 求二进制中1的个数。对于一个字节(8bit)的无符号整型变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能的高。二、解法: 版本一(除法):最简单的思路,利用求余算法统计1的个数。 9 #include 10 #include 11 12 typedef unsigned char TYPE; 13 TYPE N = 234;原创 2014-12-28 20:38:17 · 942 阅读 · 0 评论 -
《编程之美》学习笔记——2.10寻找数组中的最大值和最小值
一、问题对于一个由N个整数组成的数组,需要比较多少次才能把最大值和最小值的数找出来呢?问题分析:输入:一个有限长度且为N的数组。输出:该数组的最大值max和最小值min。特点:最大值和最小值都要找到,可以考虑它们之间的关系;这个问题在《编程之美》中侧重解决尽可能减少算法内部比较次数的这个问题。结合学习:《算法导论》(第九章 中位数和顺序统计量 第一节 最小值和最大值) 文章给出了更精确的比较次数,因为这里给出了精确的比较次数(与数组长度奇数偶数相关),《编程之美》中的数据都是假设数组原创 2015-01-13 09:20:41 · 865 阅读 · 0 评论 -
《编程之美》学习笔记——2.2不要被阶乘吓倒
一、问题 1、给定一个整数N,那么N的阶乘N!末尾有多少个0? 例子:10!=3 628 800,则 N!的末尾有两个0。 2、求N!的二进制表示中最低位1的位置。二、问题1解法 版本一:(自己思考的方案)数学规律解法 首先,我们可以考虑的数学规律上去寻找末尾0的个数:对于个位数之间相乘能够给出0结尾的乘法有:5*(2/4/6/8),而二位数中10 = 2原创 2015-01-11 20:39:16 · 566 阅读 · 0 评论 -
《编程之美》学习笔记——2.7最大公约数问题
一、问题 求两个正整数的最大公约数。如果两个正整数都很大,有什么简单的算法吗?问题分析:什么是最大公约数? (参考维基百科:http://en.wikipedia.org/wiki/Greatest_common_divisor)最大公约数:Greatest Common Divisor (GCD); greatest common factor (gcf);highest原创 2015-01-14 19:45:07 · 943 阅读 · 0 评论 -
《编程之美》学习笔记——2.6精确表达浮点数
一、问题 在计算机中,使用float或者double来存储小数是不能得到精确值的。如果你希望得到精确计算结果,最好是用分数形式来表示小数。有限小数或者无限循环小数都可以转化为分数。比如: 0.9 = 9/10 0.333(3)= 1/3(括号中的数字表示是循环节) 当然一个小数可以用好几种分数形式来表示。如: 0.333(3)= 1/3 = 3/9原创 2015-01-18 15:12:53 · 860 阅读 · 0 评论 -
《编程之美》学习笔记——2.3寻找发贴“水王”
一、问题 Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗?问题分析: 输入:给入一个含有重复数据的ID数组 输出:重复次数最高的ID 约束:重复次数最高的ID个数超过总数的一半。原创 2015-01-12 11:21:58 · 584 阅读 · 0 评论 -
《编程之美》学习笔记——2.4 1的数目
一、问题(细节阅读《编程之美》): 给定一个十进制正整数N,统计从1开始,到N(含N)的所有整数中出现的所有“1”(包含各个位)的个数。原创 2014-12-28 13:53:35 · 590 阅读 · 0 评论 -
数据结构专题——线性表
一、线性表及其分类(定义部分参考自《大话数据结构》及维基百科)线性表(List / Linear List):零个或多个数据元素的有限序列。线性表的基本操作(涉及算法中方法实现): 线性表初始化; 求线性表长度; 获取元素操作; 查找元素操作; 插入元素操作; 删除元素操作;其他:判断线性表是否为空;清空线性表;线性表可以存储结构特点原创 2015-01-19 15:27:44 · 843 阅读 · 0 评论 -
查找专题——二分搜索及其拓展
一、二分查找(折半搜索)(binary search / half-interval search)思想:算法采用分治思想(divide and conquer algorithm),二分查找从表中间开始查找目标元素。如果找到一致元素,则查找成功。如果中间元素比目标元素小,则仍用二分查找方法查找表的后半部分(表是递增排列的),反之中间元素比目标元素大,则查找表的前半部分。输入:查找表必原创 2015-01-24 19:27:31 · 792 阅读 · 0 评论