- 博客(47)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注
原创 迭代加深搜索、启发式搜索、A*、IDA
迭代加深搜索(IDDFS)是深度优先搜索,与普通的dfs不同的是,每次深搜都会有搜索的最大深度限制,如果没有找到解,那么就增大深度,再进行深搜,如此循环直到找到的解为止,这样可以找到最浅层的解。IDDFS适和求解:搜索深度较深,但正确的解再较浅的深度的问题。IDDFS的使用前提是:一定要有解。A*算法,A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法。IDA*算法是:基于迭代加深的A*算法。
2024-10-31 13:42:44 917
原创 深搜优化、深搜进阶题目(A、和为K)
给定一个含 N 个不同数的数列,任意从数组中选出若干不同的数(也可以选 1 个),使其和为 K ,请问有多少种不同的方案。
2024-10-24 12:58:47 386
原创 搜索优化、搜索进阶
搜索算法的时间复杂度大多都是指数级的,难以满足对程序时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法——剪枝。搜索的进程可以看做是从树根出发,遍历一棵搜索树的过程,所谓剪枝,就是通过某些判断,避免一些不必要的遍历过程,形象的说:就是减去搜索树中的某些枝条。如:下图是4个数选3个数的组合的搜索树。所谓双向搜索指的是搜索沿两个方向同时进行:正向搜索:从初始节点向目标结点方向搜索:逆向搜索:从目标结点向初始结点方向搜索:当两个方向的搜索生成同一子结点时终止此搜索过程。
2024-10-17 13:29:15 780
原创 初识JAVA
什么是JAVA呢,让我们来看看百度百科的介绍:Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、、平台独立与可移植性、、动态性等特点。[2]Java可以编写、Web应用程序、和应用程序等。——百度百科。
2024-10-14 13:38:35 794
原创 倍增、RMQ、LCA及树上差分
倍增法(英语:binary lifting ),顾名思义就是翻倍。他能够使线性的处理转化为对数级的处理,大大的优化时间复杂度。这个方法在很多算法中均有应用,其中最常用的是:RMQ 问题和求 LAG(最近公共祖先)。倍增思想是一种十分巧妙的思想。“倍增”二字体现在它每次将当前的已知结果或考察范围扩大一倍。正是由于这个原因,它的时间复杂度降低了很多,一般是将一个系数 N 变为。
2024-10-12 13:03:04 490
原创 树形数组及应用
树状数组是一个查询和修改复杂度都为的数据结构。主要用于:数组的单点修改、区间求和。在使用前缀和求区间和的算法中,如果可以做到在的时间复杂度内查询任意的区间和,但是如果要修改其中一个点的值,那么需要修改一遍前缀和数组,修改的时间复杂度是。
2024-09-27 13:47:49 501
原创 Trie 字典树
Trie 字典树指的是:某个字符串集合构造的有根树。由于 Trie 字典树,较好的利用了字符串的公共前缀,因此有效的节约存储空间。Trie 树典型的应用是:用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无畏的字符串比较,查询效率比哈希树高。它有3个基本性质:A、根结点不包含字符,除根节点外每一个结点都只包含一个字符;
2024-09-26 13:29:45 359
原创 KMP算法
next[ j ] 代表字符串 p 中前 j 个字符的最大相同前缀和后缀的值。特别注意:这个值不含本身,比如字符串“ ABABA ” 最大相同前缀和后缀的值是 3,而不是 5,因为任何字符串如果取自身,那么从前缀和后缀必定相等。因此 next[ 0 ] = next[ 1 ] = 0。
2024-09-26 13:01:44 908
原创 哈希——离散化
离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如:原数据:1,999,100000,15:处理后:1,3,4,2;原数据:{100,200},{20,50000},{1,400};处理后:{3,4},{2,6},{1,5};离散化本质上可以看成是一种特殊的哈希,其保证数据在哈希以后仍保持原态的全偏序关系,用于解决:影响最终结果只有元素之间的相对大小关系这一类的问题。
2024-09-25 12:27:32 403
原创 并查集——基础篇
并查集是一种树型的数据结构,用于处理不相交的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的结点唯一标识了一个集合,我们只要找到的某个元素的树根,就能确定它在哪个集合里。
2024-05-20 13:12:49 825
原创 CSP备考---2023CSP-S错题整理
题目要求的范围是100到1A0,其中满足f(n)=9的有108,117,126,135,144,153,162,171,180这9个数。满足f(f(n))=9,即f(n)=的有1E9,1F8这两个数,100到1A0范围内不存在计算3次以上f函数后得到9的数,因此答案为9+2=11。【解析】选第一个数字时,可以从1,2,3,4中挑选一个,有4种方案,第二个数字可以从0,以及1,2,3,4中剩余的3个数中挑选一个,有4种方案,依此类推,第三、四个数分别有3种和2种方案,总方案数为4*4*3*2=96。
2024-05-19 10:44:00 1351
原创 CSP备考---CSP-j2023错题整理
对于每条从根节点到叶子节点的路径,用 0表示向左走,用 1表示向右走,得到对应字符的哈夫曼编码a(1111),b(1110),c(101),d(100),e(110),f(0)【解析】只选一个练习时间段的有7种,选2个练习时间段的有10种,选3个联系时间段的有1 种,故总数为18 种。3.将原序列中的a和b删除,并将新生成的节点插入到序列中,得到新的字符序列{c,d,e,f,ab}。1.将所有字符按照出现频率从小到大排序,得到字符序列 {a,b,c,d,e,f}【解析】逢8进1,对齐计算就好了。
2024-05-17 17:12:14 1790
转载 C++常见十种排序方式
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。每次从待排序列中选出一个最小值,然后放在序列的起始位置,直到全部待排数据排完即可。实际上,我们可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。
2024-05-13 17:51:44 1561
原创 2022CSP-S易错题解析
i的取值分别是0、5、6、7、8、13,其中i=5时,j++运行3次;i=6时,j++运行2次;i=7时,j++运行1次;i=13时,j++运行4次。共10次。
2024-05-11 13:10:50 344
原创 CSP-j 计算机硬件
计算机系统由计算机硬件和软件两部分组成。硬件包括中央处理器、存储器和外部设备等;软件是计算机的运行程序和相应的文档。计算机系统具有接收和存储信息、按程序快速计算和判断并输出处理结果等功能。
2024-05-10 12:06:57 910 1
原创 CSP-j/s 原码 补码 反码
补码加法:在计算机中,凡是带符号数一律用补码表示,运算结果自然也是补码。其运算特点是:符号位和数值位一起参加运算,并且自动获得结果(包括符号位与数值位)。缺点:0有两个表示,分别为正零(00000000)和负零(10000000),各计算机计算带来不便。反码:首位为符号位,其它位分正数和负数两种情况。补码正数:所有位和反码一样,当然也和原码一样。反码负数:除了符号位和原码一样,其它位相反。补码:分正数和负数两种情况。数在机器中的表示有以下几种:原码、反码、补码。即:两数补码的和等于两数和的补码。
2024-04-29 17:06:46 225
原创 CSP-j2023提高组
16、17、TT本题算是计算量不大的计算题,如果了解f是计算三角形面积的海伦公式,会更容易做,因为19和20都是直角三角形;不知道是计算面积,也可以硬算。
2024-04-29 12:52:36 140
原创 STL---vector(四)/STL---迭代器(一)
我们应该都学过swap函数的用法。就是将n和m两个数值交换,在vector中也可以使用swap函数。这期我们将学习其余的相关函数的用法(我们可以发现n和m的值全部交换了。vector的使用及相关函数讲解。
2024-03-14 17:21:32 291 1
Windows 7,、8、10、11版的VS Code
2022-03-19
[Error] expected ';' before '}' token
2021-12-04
问一下int的范围是多少
2021-11-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人