数据结构和算法
文章平均质量分 74
aZhang_Code
这个作者很懒,什么都没留下…
展开
-
递归的时间复杂度(Master 公式)
和方法一唯一区别的地方是多加了一个 for 循环 每次循环数组的长度 a b 同方法一不变,但是 d 在三个常数操作外 额外增加了一个 O(N) 的操作 所以 d = 1。我们上面的两种方法都是每次求解子问题时求将问题对等的分成两份,倘若将数据分成三份,左边求三分一的数据右边求三分之二的数据,这样子的话不符合相同规模的划分,就不能使用 Master 公式来计算时间复杂度。这个是一个很简单的递归,将数组划分成左半部和右半部,求出左边最大值,在求出右边的最大值,最后比较左右的最大值,求出整个数组的最大值。原创 2024-03-12 20:32:44 · 1030 阅读 · 1 评论 -
认识基础的数据结构
使用数组实现栈功能,我们可以使用一个数组或者动态数组,然后用一个变量(动态数组有 size()) 来记录当前栈总共有多少个元素,然后每次入栈记录一下,出栈时我们通过数组长度弹出最后一个值。在Java中,泛型类不能直接创建泛型数组,因为泛型的类型信息在运行时会被擦除,导致编译器无法确定数组的确切类型。,我们只需要维护一个头节点,头节点指向向下的节点,每次出栈时维护头节点即可。例: 链表 1->2->3->2->4->6->7 删除链表中所有的 2。例:a->b->c 翻转后 c->b->a。原创 2024-03-09 14:00:22 · 469 阅读 · 0 评论 -
算法的额外空间复杂度常数项
如果两个时间复杂度一样的算法,你还要去在时间上拼优劣,就看谁的常数项更低了。在比较算法常数项时,一般不会取理论分析的值,而是直接通过数据测试性能,在上一节认识时间复杂度中,时间复杂度是忽略低阶项和所有常数系数的。如果你的流程只需要开辟有限几个变量,额外空间复杂度就是O(1)若两个时间复杂是一样的,那么在实际运行时那个效果更佳呢?需要开辟一些空间来支持算法的流程所需要的内存空间。作为输出结果的空间,也不算额外空间。作为输入参数的空间,不算额外空间。1. 在时间复杂度上尽可能做到低。2. 使用最少的额外空间。原创 2024-03-04 10:56:03 · 376 阅读 · 0 评论 -
认识时间复杂度
最坏情况(Worst Case):当输入数组是逆序排列的,每次插入操作都需要比较并移动前面所有的元素,因此总的比较次数是1 + 2 + 3 + ... + (N-1) = (N-1) * N / 2次。因此,冒泡排序的时间复杂度是 O(N2)。类似地,对于范围[0, N-3],重复上述过程,但在最后一步中,比较arr[N-4]和arr[N-3],并将较大的数置于位置N-3。接下来,在范围[0, N-2]内重复上述过程,但在最后一步中,比较arr[N-3]和arr[N-2],并将较大的数置于位置N-2。原创 2024-03-01 14:48:57 · 373 阅读 · 0 评论