随笔分类 -  算法积累

摘要:1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <vector> 6 #include <stack> 7 using namespace std; 8 const int maxn=505; 9 const int INF=0x3f3f3f3f; 10 阅读全文
posted @ 2019-10-25 13:40 吉光一片羽 阅读(210) 评论(0) 推荐(0)
摘要:素数筛即埃氏筛法,找出小于等于给定数的所有素数个数。 大致思路就是空间换时间:首先建立数组将所有数设为true,从2开始,因为2为true,所以2为素数,然后将2的所有倍数设为false;再对3进行相同判定,以此类推。 然后进阶的就是欧拉筛,即给定一个区间[a,b),找出区间内所有素数个数。 在前面 阅读全文
posted @ 2019-09-18 21:14 吉光一片羽 阅读(247) 评论(0) 推荐(0)
摘要:基本原理: 迪杰斯特拉算法是一种贪心算法。 首先建立一个集合,初始化只有一个顶点。每次将当前集合的所有顶点(初始只有一个顶点)看成一个整体,找到集合外与集合距离最近的顶点,将其加入集合并检查是否修改路径距离(比较在集合内源点到达目标点中各个路径的距离,取最小值),以此类推,直到将所有点都加入集合中。 阅读全文
posted @ 2019-07-11 11:21 吉光一片羽 阅读(1559) 评论(0) 推荐(0)
摘要:基本原理: 从左到右扫描字符串:1、是操作数:压栈。 2、是操作符:出栈两个操作数,将运算结果压栈。 扫描字符串通过java.util.Scanner类实现,其next方法可以读取以空格(默认)或指定符号分割的元素。 算法代码: 阅读全文
posted @ 2019-07-10 22:28 吉光一片羽 阅读(864) 评论(0) 推荐(0)
摘要:思路: 枚举第一行所有状态,则第二行由第一行灯的状态决定,以此类推。(若要将上一行开着的灯关闭,在下一行只能拨动对应列的开关) 优化: 因第一列的状态数为2**6=64,因此可用一个整数表示所有情况,通过位运算来实现相应位的改变。 代码如下: 阅读全文
posted @ 2019-04-19 14:02 吉光一片羽 阅读(230) 评论(0) 推荐(0)
摘要:冒泡排序: 冒泡排序是相邻两节点进行比较,大的向后移一个,经过第一轮两两比较和移动,最大的元素移动到了最后,第二轮次大的位于倒数第二个,依次进行。这是最基本的冒泡排序,还可以进行一些优化。 优化一:如果某一轮两两比较中没有任何元素交换,这说明已经都排好序了,算法结束,可以使用一个Flag做标记,默认 阅读全文
posted @ 2019-04-13 16:17 吉光一片羽 阅读(170) 评论(0) 推荐(0)
摘要:分析: 将指数b看成二进制,b%2==1即判断当前b二进制最低位是否为1,是则将当前底数a与累积ans相乘,否则跳过。在每次循环中都将底数a扩大一倍,将指数b缩小一半。其中mod是针对幂运算求模。 阅读全文
posted @ 2019-04-12 12:42 吉光一片羽 阅读(166) 评论(0) 推荐(0)