
算法基础
文章平均质量分 88
Dear_Xuan
如需留言,请前往我的主页(随便点进一篇文章就有),在CSDN的留言没有通知
展开
-
算法基础-算法分析
算法什么是算法算法是对特定问题求解步骤的一种描述,是执行的有限序列,其中每个指令都表示一个或多个操作。如果想要从一个数组中查找指定的数字key并返回位置,只需要从第一个位置开始遍历整个数组,直到找到给定的key并返回位置。这就是一种算法。为什么要用算法算法无处不在。为了走出迷宫,你可能需要DFS,即深度优先搜索算法来寻找出路。 为了找到最短路径,你可能要用到A*算法来高效查找。 为了将一串数字排序,你需要用更快的快速排序算法,而不是一个一个比较。显然,上面的三个问题都有许多种不原创 2022-01-20 20:48:47 · 4332 阅读 · 6 评论 -
算法基础-随机过程
未婚夫问题假如现在有n个求婚者,被分别标记为1,2,3...N,她们将按顺序被你面试,你每次都必须选择接受或不接受,一旦你接受了其中一个,那么就无法面试后面的人。因此你必须在无法面试后面的人的情况下选出当下最优者。由于无法预知这些求婚者的平均情况,所以我们必须先面试前k个人,从第k+1个人开始,一旦发现更优者就立即选择她。...原创 2022-01-21 14:29:43 · 983 阅读 · 1 评论 -
算法基础-排序方法
比较排序顾名思义,比较排序就是通过比较数组里的每个数来排序的算法的统称,经典的比较排序有:冒泡排序,插入排序,快速排序等。它们都是通过逐一比较各个元素,从而得知每个元素应该待的位置。渐进时间复杂度为了寻找最佳比较排序算法,我们需要得知比较排序的渐进时间复杂度。但是实际上排序算法通常会受到数组的实际值的影响,因此这里我们先考虑最坏情况。在一个长度为 n 的数组A里,欲得知 A[0] 应该待的位置,就需要知道 A[0] 是第几小的数,如果它是第3小的数字,那么他就应该出现在第3个位置。只需要原创 2022-01-22 19:51:03 · 386 阅读 · 0 评论 -
算法基础-函数渐近
渐近等价考虑函数: f(x)=x²+4x当x→∞时,该函数可以看作x平方与它的高阶无穷小o(x²)之和,即于是我们称f(x)和x²是渐近等价的。用符号表示为更一般地,如果存在两个函数f(x)和g(x),使得你也可以用极限的方法来判断两个函数是否渐近等价我们可以轻而易举地得到一个结论:f(x)总是跟自己渐近等价渐近上界若对于函数 f(n),g(n),存在c和k,使得即从k开始,f(n)永远无法超过cg(n),则称g(n)为f(n)的渐近上界,写作..原创 2022-01-24 17:30:44 · 3028 阅读 · 0 评论 -
算法基础-顺序统计量
顺序统计量将长度为 n 的数组升序排序后,则第 i 个位置的数字是该数组的第 i 小的量,称之为第 i 顺序统计量数组最小值是第1个顺序统计量,最大值是第n个顺序统计量,中位数(又称下中位数)是第⌊(n+1)/2⌋个顺序统计量⌊n⌋ 表示对 n 向下取整,⌈n⌉表示对 n 向上取整最大值和最小值若想要寻找n个数字里的最大值或最小值,只需要进行(n-1)次比较int min = a[0];for(int i=1;i<n;i++){ if(a[i] > min原创 2022-01-30 20:42:31 · 1975 阅读 · 0 评论 -
算法基础-线性结构
数组内存结构数组是一种顺序存储的结构,他所占用的空间是固定的,不能随意增加或减小,其中所有元素以特定的方式按顺序排列下来,各个元素的位置都是固定的。因此数组是一种有序的线性结构数组的随机访问性能优秀,因为只需要对首地址进行加减运算就能得到任意位置处的值int a[100];for(int i=0;i<100;i++){ a[i] = i + 1;}cout << a[50] << endl;除此之外,我们也可以使用地址直接获取元素的值i原创 2022-02-15 17:27:16 · 430 阅读 · 0 评论 -
算法基础-字符串与模式匹配
串和字符串串是由零个或多个单独的元素组成的有限长序列。在计算机中,串的最广泛的用处是字符串,因此一般情况下,串和字符串是等价的,字符串也简称为串,串就是字符串串的结构串实际上是一个特殊的数组,它的元素一定是字符类型的,因此他也具有数组所拥有的特性读取字符串中的一个字符的时间复杂度是O(1),因为可以直接使用地址准确定位,修改字符串当中的一个字符也非常快,但是字符串无法动态地延长或减短,因为数组的长度是固定的实际上在C语言中,字符串是一个char[]类型的变量,并且以“\0”为结尾,你原创 2022-02-18 12:06:54 · 535 阅读 · 0 评论 -
算法基础-非线性结构
非线性结构的概念线性结构是指逻辑上各个结点一一对应的关系,例如链表,即使它在储存上可能并不是顺序储存非线性结构是指逻辑上存在一对多关系的结点的结构,例如树,图等。它们的任何结点都可能对应着其它多个不同的结点有根树二叉树二叉树在逻辑上是一种树状结构,最顶上的结点被称为根结点,每个结点都有 key, lChild和rChild值,分别记录该结点的值,左子树指针和右子树指针,当key为空(NULL)时,该结点为根结点。二叉树的左右子树可能为空,也可能根本就没有左右子树,但是除了左右子树以外原创 2022-02-22 16:03:17 · 831 阅读 · 0 评论 -
算法基础-散列表与开放寻址
散列表散列表是一种动态的集合,它支持插入,检索,删除等字典操作。散列表是数组的扩展,一般的数组可以在 O(1) 的时间复杂度内进行随机读取,而散列表则使用一个特殊的函数来为各个元素分组在查找元素,只需要用特殊函数计算一次,就可以知道元素存放的位置散列表的基本结构是一个关键字数组和链表,任意元素通过哈希函数计算出一个关键字,通过关键字可以直接定位到一个具体链表,然后往链表末尾添加该元素struct HashTable{ int length; Node* keyList;};原创 2022-02-27 20:52:57 · 432 阅读 · 1 评论 -
算法基础-二叉搜索树
二叉搜索树的概念二叉搜索树是一种特殊的二叉树,对于其中的任意结点 x,其左子树中的任何结点的值都小于结点 x 的值,其右子树中的任何结点的值都大于结点 x 的值struct Node{ int value; Node* lChild; Node* rChild;};因此只需要对二叉搜索树进行中序遍历,就可以升序输出所有元素查询为了查找二叉搜索树中是否存在value为key的项,我们可以采用递归的方法,如果当前结点不是要查找的项,则比较value和key的大原创 2022-03-09 21:23:28 · 313 阅读 · 0 评论 -
算法基础-RSA公钥体系
公钥加密系统在一个公钥加密系统中,任何人参与者都拥有独自的公钥和密钥,通常用P表示公钥,用S表示密钥,公钥用于加密,密钥用于解密。并且公钥可以公开,任何人都可以使用这个公钥发送一段密文,而只有私钥的持有者才可以用私钥解密公钥和私钥对应的函数互为反函数RSA公钥加密体系基于一个数论事实:把两个大质数相乘很容易,但是分解大数为两个质数的乘积很难RSA加密在RSA公钥加密系统中,可以通过以下过程创建一对公钥和私钥任意选取远大于信息 M 的大质数 p 和 q,且 p != q 令 n原创 2022-03-11 21:25:43 · 929 阅读 · 0 评论