哈希表即散列表,用于存储key-value对,key作用和数组下标相似,只是其key是经过一定加工(hashfunction)之后得出的。其目的主要是加速查找,也可以认为以散列函数的时间消耗换取了对数组空间的紧缩。一般说来,设计一个合理的散列函数是关键——好的散列函数可以使得存储空间被充分利用,亦即 Read More
约瑟夫问题的递推公式是f[1]=0,f[i]=(f[i-1]+m)mod i。不过是一个“数据结构之指针和链表”里面的问题,所以还是先用链表和指针解决。因为要移除中间元素,所以需要一个双向链表,这里用一个数组来模拟: 1、构建结构和数组: 2、初始化数组元素的id: 3、初始化数组元素的指针: 4、 Read More
先看两个示例: 这两个数组一个宽度是5,一个宽度是4。以左图为例如果要在数组里面蛇形输出,从1开始x递增,到达5时改为y递增,到达9时x递减,13时y递减(注意此时的miny)完成一圈进入内圈。这样就可以在数组里面输出这些数字。在NOI上做了一个小兔子捡金币的问题,如果在M*M的矩阵内,每个点有一个 Read More
这个问题在算法效率一节里面,是这样的: 如果把数据规模都缩小一下,那就是神奇的口袋1,在解这两个问题的时候,想了几种方法,其中最慢的一种就是遍历每种情况——对每一个都实行:取或不取: 这解决小规模数据的问题是可以用的一种直观做法。当然,也可以用动态规划。用动态规划时我们要考虑的就是:取当前数字时,能 Read More
这个问题我做了不少尝试,而最后使用的方法是BFS。开始尝试了带有启发和剪枝的DFS,带有重复路径检测贪心等一些思路,但是都超时了。思考了一下,主要问题在于这些算法对没有任何阻挡(或极少阻挡)的情况不够适应,当然,进一步改进采用多种算法结合的方式还是可以解决问题的,而后测试了B*的思路,能够完成题目。 Read More
做了一段时间NOI,做到动态规划看了几天算法书籍。还是没有深入,学了基本的动态规划,稍有一点体会,记录到这里。 背包是这样一类问题:在限定总质量前提下,从若干质量\价格对中,取哪些能使得价格最大。 动态规划是一种思想,简单的说,动态规划思想就是充分利用对子问题的计算结果来递推父问题结果。所以,动态规 Read More
解:设:a=k1*x+r;b=k2*x+r;c=k3*x+r,消去r: a-b=(k1-k2)*x b-c=(k2-k3)*x a-c=(k1-k3)*x 现在有3个数n1,n2,n3求它们的最小公约数。可以继续把它们互相做减法,得到一系列数m1,m2,m3……集合n中的数和m中的数都能被最小公倍数 Read More
把昨天看的第二章巩固一下,做一做编程习题。 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致。若按相同的递归思路分析,比那个问题要简单,因为从1次幂开始并且指数呈2^(n-1)分布,即1,2,3,4,16……所以没有对指数是奇 Read More
前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了。做了一些NOI的题目,这也是一个长期的目标中的一环。做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习。学习的第一本是《数据结构与算法C++描述》第三版,边学边做一些笔记。所以这些笔记中的代码有很多将会非常简单,甚至可 Read More
今天上午完成了“迷宫”问题,也思考了“2.5基本算法之搜索”的另外几个问题:小游戏(就一连连看),马走日,红与黑等。我所关注的这几个问题都可以用回溯算法来进行解决。回溯算法简单说就是当运行到叶子节点证明不是解时回到上一层节点继续遍历,如此循环直到找到一个解;如果需要全部解,可以继续遍历,如果不需要可 Read More