
数据结构与算法
龙兄你好呀
这个作者很懒,什么都没留下…
展开
-
回溯算法题解
回溯跟递归是相辅相成的,只要有递归就有回溯。 通常递归函数的下面就是回溯的逻辑。 回溯法实际上是一个纯暴力的搜索。 回溯法能解决哪些问题? 组合问题、切割问题、子集问题、排列问题、棋盘问题…… 这些问题用传统的for循环嵌套是很难解决出来的。 回溯法可以抽象为一个树形结构——n叉树。 树的宽度通常是我们需要处理的集合的大小。 树的深度通常是递归的深度——纵方向用递归解决。 回溯法的模板: void backtracking(参数){ if(终止条件){ 收集结果; return; } for(原创 2022-10-27 00:14:28 · 230 阅读 · 0 评论 -
选择排序思路及其分析
(1)时间复杂度:外层循环需要处理无序部分,内层循环则在无序部分中查找最小的元素,所以需要的时间复杂度是O(n^2)。首先将数组分为两个部分,一个有序的部分,一个无序的部分,然后每次从无序的部分中选择最小的元素,放到有序的部分中去。(2)空间复杂度:不需要使用额外的空间,所有的操作都是在原来的数组上修改,所以空间复杂度为O(1)。原创 2022-09-23 23:54:38 · 214 阅读 · 1 评论 -
插入排序思路及分析
首先将数组分为两部分,一部分是有序的,一部分是无序的。需要做的是每次从无序部分中选取第一个元素,然后插入到有序部分中的正确位置,插入之后,确保有序部分还是有序的。(1)时间复杂度:第一层循环为未排序的部分遍历,第二层循环在有序部分中查找到正确的位置。所以时间复杂度是O(n^2)。(2)空间复杂度:该排序在原数组内操作,不需要额外的存储空间,所以空间复杂度是O(1)。原创 2022-09-23 20:02:33 · 555 阅读 · 1 评论 -
二叉树基础知识
(1)满二叉树的底层是满的。 (2)满二叉树的节点数量:,其中k是层数(从根节点往下数,根节点为第一层)。(1)完全二叉树的底层不是满的,但是从左到右一定是连续的。(1)左子树的所有节点都小于根节点,右子树的所有节点都大于根节点,同时对于每一棵左右子树来说都满足这个规律。 (2)查找某个节点的时间复杂度是级别的。 (3)二叉搜索树对于节点的布局是没有任何要求的。(1)左子树和右子树的高度的差的绝对值不能超过1。通过指针来指向下一个节点。通过数组来存储节点,从左到右,从上到下,编号为0开始。 某一个节点的左孩原创 2022-06-18 22:29:12 · 422 阅读 · 0 评论