随笔分类 - 数据结构与算法
磕磕绊绊学了一个星期C++,NOI的题目已经做到动态规划,但确实有很多难以通透的地方,于是拿起数据结构与算法第三版进行学习,边学边记录。
摘要:这是在NOI上看到的一个问题。题目是这样的: 这个问题前面一篇提到过,如果要找一个解用回溯就可以,如果要找最优解用BFS算法就可以了。不过这里有一点变化,如果是迷宫求最短路径那就直接四向入队就可以。但这个不是最短路径,是最少转折。所以算法上有一定的区别。让我们来分析一下怎么用最少转折来描述这个问题:
阅读全文
摘要:这是一个关于格式化输出目录结构的问题,感觉这类问题用堆栈做更顺手,不过题目在递归里面,那就用递归做。 在编码的时候,一直用的是string类,所以长度不超过30什么的就呵呵了。解码的思路就是遇到“]”的时候返回上级,遇到"d"开头(目录)的时候进入下级,遇到文件就在当前级。所以构建一个目录结构: 这
阅读全文
摘要:这个问题交了好几次,漏打了一个按址传递,漏了一种情况。简要分析一下,这个题的要点就是: 1、小数点对齐 2、结尾0的处理 结尾0的处理这里开始漏了一种情况,只考虑了小数点之后的不要了,小数点之前的占位0没考虑。例如:1.2+8.8这样。小数点对齐倒是没什么问题,但是处理整数部分对齐的时候忘了一个&,
阅读全文
摘要:这个问题是说给定一定数量(最多24根)的火柴棒,用全部这些火柴棒组成一个A+B=C的算式,其中每个数字拼法如下: 而加号和等号均为2根火柴。 这个问题题意没有明确说明负号问题,但从出题者传递的“意境”来看,其中A,B,C均大于等于0。 第一眼看到这个问题的时候就在想,是不是要把火柴棍数目-4然后看能
阅读全文
摘要:做了一个NOI上面的问题,叫blah集合,以a为基数,则2x+1和3x+1都在集合中,且集合中全部元素都由此计算得来。a∈[1,50],问升序排列后第n(n∈[1,1000000])个元素是多少。以输入示例a=1,n=100,b[n]=418为例: 依次计算时会发现每1个数据会变为2个,这些数又会发
阅读全文
摘要:哈希表即散列表,用于存储key-value对,key作用和数组下标相似,只是其key是经过一定加工(hashfunction)之后得出的。其目的主要是加速查找,也可以认为以散列函数的时间消耗换取了对数组空间的紧缩。一般说来,设计一个合理的散列函数是关键——好的散列函数可以使得存储空间被充分利用,亦即
阅读全文
摘要:约瑟夫问题的递推公式是f[1]=0,f[i]=(f[i-1]+m)mod i。不过是一个“数据结构之指针和链表”里面的问题,所以还是先用链表和指针解决。因为要移除中间元素,所以需要一个双向链表,这里用一个数组来模拟: 1、构建结构和数组: 2、初始化数组元素的id: 3、初始化数组元素的指针: 4、
阅读全文
摘要:先看两个示例: 这两个数组一个宽度是5,一个宽度是4。以左图为例如果要在数组里面蛇形输出,从1开始x递增,到达5时改为y递增,到达9时x递减,13时y递减(注意此时的miny)完成一圈进入内圈。这样就可以在数组里面输出这些数字。在NOI上做了一个小兔子捡金币的问题,如果在M*M的矩阵内,每个点有一个
阅读全文
摘要:这个问题在算法效率一节里面,是这样的: 如果把数据规模都缩小一下,那就是神奇的口袋1,在解这两个问题的时候,想了几种方法,其中最慢的一种就是遍历每种情况——对每一个都实行:取或不取: 这解决小规模数据的问题是可以用的一种直观做法。当然,也可以用动态规划。用动态规划时我们要考虑的就是:取当前数字时,能
阅读全文
摘要:这个问题我做了不少尝试,而最后使用的方法是BFS。开始尝试了带有启发和剪枝的DFS,带有重复路径检测贪心等一些思路,但是都超时了。思考了一下,主要问题在于这些算法对没有任何阻挡(或极少阻挡)的情况不够适应,当然,进一步改进采用多种算法结合的方式还是可以解决问题的,而后测试了B*的思路,能够完成题目。
阅读全文
摘要:把昨天看的第二章巩固一下,做一做编程习题。 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致。若按相同的递归思路分析,比那个问题要简单,因为从1次幂开始并且指数呈2^(n-1)分布,即1,2,3,4,16……所以没有对指数是奇
阅读全文
摘要:前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了。做了一些NOI的题目,这也是一个长期的目标中的一环。做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习。学习的第一本是《数据结构与算法C++描述》第三版,边学边做一些笔记。所以这些笔记中的代码有很多将会非常简单,甚至可
阅读全文

浙公网安备 33010602011771号