![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美读书笔记
文章平均质量分 68
flyinghearts
这个作者很懒,什么都没留下…
展开
-
《编程之美》读书笔记01: 1.2中国象棋将帅问题
《编程之美》读书笔记01: 1.2中国象棋将帅问题 刚看到题时,首先想到的是除法计算除数的商和余数(eax和edx)。后来才想到C/C++中需要动态多维数组时,new一维数组来模拟多维数组时所进行的多维数组的下标和实际偏移量的转换,我想很多人学习C或C++时都做过这种事吧。 本以为题目要求输出将帅在棋盘上的具体位置,如d10、f1,但书中的解法给的是相对位置,解决起原创 2010-05-18 12:50:00 · 1780 阅读 · 0 评论 -
《编程之美》读书笔记08:2.9 Fibonacci序列 —— O(log n)求Fibonacci数列(非矩阵法)
《编程之美》读书笔记08:2.9 Fibonacci序列 计算Fibonacci序列最直接的方法就是利用递推公式 F(n+2)=F(n+1)+F(n)。而用通项公式来求解是错误的,用浮点数表示无理数本来就有误差,经过n次方后,当n相当大时,误差能足够大到影响浮点数转为整数时的精度,得到的结果根本不准。用矩阵来计算,虽然时间复杂度降到O(log n),但要用到矩阵类,相当麻烦。观察:原创 2010-05-18 23:49:00 · 1966 阅读 · 1 评论 -
编程之美读书笔记_3.10 分层遍历二叉树
3.10 分层遍历二叉树 看到Milo写的这篇文章,又翻了下书,发现书的代码(P253)有个瑕疵,每个节点值后面都会显示一个空格,如果将间隔字符改为“-”,输出的每行最后都有一个“-”,不能达到要求。不过,只要将 cout data 这行改为:if (cur==last-1) cout data else cout data 即可修正这个问题。 书上的代码用了原创 2010-05-25 23:55:00 · 1964 阅读 · 0 评论 -
编程之美读书笔记_3.8 求二叉树中节点的最大距离 和 3.10分层遍历二叉树 相关代码
//3.10_tree.cpp by flyinghearts#qq.com//3.8_求二叉树中节点的最大距离 和 3.10_分层遍历二叉树 测试例子#include#include#include#includeusing namespace std;struct Node { Node *left; Node *right; int原创 2010-05-25 23:58:00 · 1572 阅读 · 0 评论 -
编程之美读书笔记_1.9 高效率的安排见面会
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 1.9 高效率的安排见面会原创 2010-05-25 22:48:00 · 2322 阅读 · 2 评论 -
编程之美读书笔记_2.16 求数组中最长递增子序列
2.16 求数组中最长递增子序列思路:每处理一个数,都可以将这个数插入到已经找到的某个递增子序列(假设包含无限个长度为0的空序列)后,使其长度增加1,处理完毕后,这些长度最大值即为所求。具有相同长度i+1的递增子序列,若这些序列的最后一个数最小值为min_v[i],其所在的序列为A,则若某个数能插入到序列A,必然能插入到其它相同长度的递增子序列,而能否插入到序列A,仅由min_v[i]值决定,因而只要维护min_v[i]值就够了。当前数必然可以插入到某个长度为j(0具体过程:用min_v[i]保存当前已找到原创 2010-05-31 23:07:00 · 1417 阅读 · 0 评论 -
编程之美读书笔记_3.7_队列中取最大数操作问题
3.7_队列中取最大数操作问题若不使用C++新标准的右值引用,DeQueue的实现是低效的,因为要返回的元素,只能通过赋值操作,而不能通过引用。(书上的实现代码,竟然少了对EnQueue的实现!)思路:用一个辅助队列来记录最大元素(为节省空间,只记录其地址),当有一个元素入队,就将辅助队列尾端不大于该元素的全部出队后(注意相等的也要出队),再将该元素压入辅助队列,这样就保证,辅助队列从头到尾的元素是递减的,辅助队列头元素是当前队列的最大值。当有一个元素出队时,就与辅助队列的头部第一个元素所指的元素比较,如果原创 2010-05-31 23:12:00 · 1839 阅读 · 0 评论 -
编程之美读书笔记_3.9_重建二叉树
3.9_重建二叉树对根节点a以及先序遍历次序P和中序遍历次序I,查找a在I中的位置,将I分为两部分,左边部分的元素都在a的左子树上,右边的元素都在a的右子树上,因而可以确定a的左子树节点数和a的右子树节点数,再结合P,可以确定a的左孩子和右孩子,以及各个孩子的先序和中序遍历次序。由于已经知道节点数,可以事先分配好内存,可以按先序遍历次序连续存放节点。struct Node { Node* left; Node* right; char data;};void rebuild(c原创 2010-05-31 23:21:00 · 1517 阅读 · 0 评论 -
编程之美读书笔记_2.5 寻找最大的K个数 测试代码
<br />//2.5_nth.cpp by flyinghearts#qq.com #include <iostream>#include <vector>#include <queue>#include <set>#include <utility>#include <algorithm>#include <ctime>#include <cassert>#include <cstdlib>using namespace std;const int原创 2010-05-31 23:59:00 · 1688 阅读 · 0 评论 -
《编程之美》读书笔记21: 2.4 1的数目
<br />《编程之美》读书笔记21: 2.4 1的数目<br /> <br />问题:<br /> 给定一个十进制正整数N,写下从1开始,到N的所有整数,<br /> 然后数一下其中出现的所有“1”的个数。<br /> 例如:<br /> N=2,写下 1,2。这样只出现了 1 个“1”。<br />N=12,我们会写下 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12。这样 1 的个数是 5。<br /> <br /> 1. 写一个函数f(N)原创 2010-08-01 22:45:00 · 881 阅读 · 0 评论 -
编程之美读书笔记22 1.16 24点游戏
<br />编程之美读书笔记22 1.16 24点游戏<br /> <br />给定4个数,能否只通过加减乘除计算得到24?由于只有4个数,弄个多重循环,就可以。如果要推广到n个数,有两种思路:<br />①采用前缀/后缀表达式。相当于将n个数用n-1个括号括起来,其数目就是一个catlan数。最多可得到f(n) = (1/n * (2*n - 2)! / (n-1)! / (n-1)!) * n! * 4^(n-1) = 4^(n-1) * (2*n-2)! / (n-1)! 种表达式,当n=4时原创 2010-08-01 22:49:00 · 1419 阅读 · 0 评论 -
3.1_计算字符串移位包含问题
<br />3.1_计算字符串移位包含问题<br /> <br />这是一道字符串匹配题。不知道C库的strstr采用什么算法。<br />对字符串匹配,最低效的是暴力搜索。稍好的是KMP算法,效率最高的则是BM算法。<br />该题特殊在于:目标串长度是匹配串的两倍。Sunday算法虽然在实际应用中效率很高,但仅限于匹配串比较短时。BM的某一变种算法(基于suffix automaton)倒是实现了预处理和搜索都是0(n)的,但是实现起来有点复杂。<br /> 既然是判断是否移位包含,可以用两个数组,分原创 2010-06-15 23:13:00 · 1340 阅读 · 0 评论 -
编程之美读书笔记_1.3 一摞烙饼的排序 (补充)
<br /> 几个月前写了 编程之美读书笔记_1.3 一摞烙饼的排序 , 对书上的例子{3,2,1,6,5,4,9,8,7,0},将搜索次数由原来的172126次降到29次,本以为要进一步降低搜索次数,要强化剪枝条件,要添加大量的代码,而实际上只要改动一处,就能将搜索次数降到11次。遍历所有可能的排列求第1个……第10个烙饼数所用的总时间,也由原来的38秒降到21秒。<br /> <br /> <br />改动:<br />1.3_pancake_final第148行<br /> for (int pos原创 2010-08-21 23:45:00 · 1688 阅读 · 1 评论 -
编程之美读书笔记_1.8 小飞的电梯调度算法
1.8 小飞的电梯调度算法 假设电梯有n层,上楼要消耗能量k1,下楼要消耗能量k2,用a[i]表示要在第i层下的人数,Si为到i层时已经下(包括i层)的总人数,则总人数S=Sn。若用F(i)表示电梯在i层停时要消耗的总能量,则电梯在i+1层停时,有Si人要多下一层,(S-Si)人少上一层。则: F(i+1) = F(i) + k2*Si - k1*(S-Si) = F(i) + (原创 2010-05-18 23:49:00 · 3188 阅读 · 6 评论 -
《编程之美》读书笔记02: 1.3 一摞烙饼的排序
《编程之美》读书笔记02: 1.3 一摞烙饼的排序 问题: 星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:“我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,原创 2010-05-18 23:45:00 · 2053 阅读 · 4 评论 -
编程之美读书笔记_1.3 一摞烙饼的排序_程序源代码
1.3_pancake.cpp //1.3_pancake.cpp by flyinghearts#qq.com#include#include#include#includeusing namespace std;class Pancake{ vector cake; //当前各个烙饼的状态 vector cake原创 2010-05-20 00:38:00 · 1632 阅读 · 0 评论 -
编程之美读书笔记_2.18 数组分割
<!--v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}--> Normal 0 7.8 磅 0 2原创 2010-05-18 23:49:00 · 1344 阅读 · 0 评论 -
编程之美读书笔记_2.17 数组循环移位
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty原创 2010-05-18 23:49:00 · 1200 阅读 · 0 评论 -
编程之美读书笔记——目录
最初看《编程之美》时,总觉得有些解法与自己的最初想法差得太多,于是就有了将自己的想法记下来的冲动。三个月下来,也才弄了十几篇,这些笔记都发给了该书的编辑。静下心来,翻翻自己所做的笔记,总觉得写得很杂乱,有不少错处,现将这些笔记贴出来,希望能得到大家的指正。 目录: 编程之美读书笔记_1.2_中国象棋将帅问题 编程之美读书笔记_1.3 一摞烙饼的排序 编程原创 2010-05-18 23:49:00 · 3245 阅读 · 2 评论 -
编程之美读书笔记_1.4 买书问题
1.4 买书问题 ㈠ 简要说明感觉写的很乱,这里先做个简单的说明。对于共有m种书进行打折,总共要买n本。先将原来的折扣,转换成相对折扣(=最大折扣-原折扣)。用F(n)表示买n本书时,能得到最小相对折扣值,此时原折扣和=n*最大折扣-F(n),必然最大。显然,F(m)=0。贪心算法要能成立,就是要证明F(n)=F(n-m),或者找出, F(n)=F(n-m)在什么条件下才成立。如原创 2010-05-18 23:49:00 · 1982 阅读 · 0 评论 -
编程之美读书笔记_1.13 NIM(3)两堆石头的游戏
1.13 NIM(3)两堆石头的游戏 记得初中时在学校门口的书店,买到一本《智力游戏中的数学方法》,当时如获至宝。书中提到一个“皇后登山”游戏,就是在空的围棋棋盘上放一个棋子,该棋子每次只能向上或向右或沿对角线向右上方向移动(和国际象棋中的皇后移动相似),可以移动任意格,但不能不移动,两人轮流移动棋子,先将棋子移动到右上角者赢,问先移棋者的必胜策略。书中还提到这个捡石子游戏,并原创 2010-05-18 23:49:00 · 2256 阅读 · 0 评论 -
编程之美读书笔记_4.4_是否在三角形内
<! v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}--> Normal 0 7.8 磅 0 2原创 2010-05-19 00:13:00 · 1596 阅读 · 0 评论 -
编程之美读书笔记_3.8 求二叉树中节点的最大距离
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Style原创 2010-05-19 00:13:00 · 3888 阅读 · 6 评论 -
编程之美读书笔记_3.3_计算字符串的相似度
3.3_计算字符串的相似度 和计算两字符串的最长公共子序列相似。设Ai为字符串A(a1a2a3 … am)的前i个字符(即为a1,a2,a3 … ai)设Bj为字符串B(b1b2b3 … bn)的前j个字符(即为b1,b2,b3 … bj)设 L(i , j)为使两个字符串和Ai和Bj相等的最小操作次数。当ai等于bj时 显然L(i, j)=L(i-1, j-1)当ai原创 2010-05-19 00:13:00 · 4995 阅读 · 0 评论 -
编程之美读书笔记_2.5 寻找最大的K个数
2.5 寻找最大的K个数从n个数中寻找最大的k个数,两种思路:1 保存目前找到的最大k个数,每访问一个数,就与这k个数中的最小值比较,决定是否更新这k个数。储存k个数的数据结构可采用:败者树、二叉查找树、最小堆。C++ STL提供了multiset和priority_queue容器,另外还提供了make_heap,push_heap,pop_heap方便手动构建堆结构。(测试发原创 2010-05-20 00:21:00 · 2603 阅读 · 0 评论 -
编程之美读书笔记_4.5_磁带文件存放优化
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Style原创 2010-05-19 00:13:00 · 1291 阅读 · 0 评论 -
编程之美读书笔记_4.1_金刚坐飞机问题
4.1_金刚坐飞机问题 对问题一,每个人都是随机选择座位,任意一个人坐在指定座位的概率相同,因而第i个乘客坐在其座位的概率是 1/n。 对问题二,答案和金刚的原来座位编号有关。不妨先去除金刚的座位,将乘客(根据机票号)和剩下的座位,按原大小顺序从1开始重新编号。用F(i,n)表示在新排列中(共有n-1个乘客座位和金刚原来的座位),新的第i个乘客坐在其原来座位的概率,则在n个座位中,原创 2010-05-19 00:13:00 · 2306 阅读 · 0 评论 -
编程之美读书笔记_杂项
编程之美 读书笔记 1.1 让CPU占用率听你指挥P7页的那个汇编代码(16位)有点过时。另外,对32位汇编,空循环,常用到的寄存器是eax或ecx。 1.5 快速找出机器故障看了好几遍,还是看不懂题目,尽管猜到了要考什么。问题一问的有点莫名其妙,没说明为什么有个ID会只出现一次,只出现一次的ID是否只有一个;问题二的两个小问题本意都是要求找丢失的ID,但却把这个要求原创 2010-05-19 00:13:00 · 1142 阅读 · 0 评论 -
编程之美读书笔记_1.1_让CPU占用率曲线听你指挥
<br />题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:<br /> <br />1. CPU的占用率固定在50%,为一条直线;<br />2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);<br />3. CPU的占用率状态是一个正弦曲线。<br /> <br />控制CPU占用率,不仅仅是出于好玩而已。以前的某些程序,特别是某些老游戏,原创 2010-12-02 23:17:00 · 1522 阅读 · 0 评论