![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和复杂度学习
文章平均质量分 55
暖仔会飞
这个作者很懒,什么都没留下…
展开
-
算法知识点总结:
文章目录复杂度非递归算法复杂度计算步骤排序算法selection sort 和 bubble sort暴力算法顺序搜索算法暴力字符串匹配哈希表避免冲突的方法:○ 链表法:○ 开放寻址法(open-addressing 法)=(closed hash 法):- 线性探测法:- 双重哈希法:Rehash主定理(master theorem)二叉树二叉搜索树插入删除叶子节点只有左孩子只有右孩子左孩子有孩子都有二叉树数据结构和抽象数据类型数据结构:基本数据结构抽象数据类型(结构)图树二叉树二叉树的高度二叉搜索树平衡原创 2021-06-11 17:05:59 · 836 阅读 · 0 评论 -
算法学习之:python实现插入排序并进行优化
普通的插入排序思路:将序列分为两个部分,第一部分是有序数列,第二部分是无序数列按顺序每次从无序数列里面取一个数字,插入到有序数列的合适位置,这一步的具体实现为:如果当前待插数字不断地与它前一个数字进行比较,如果比当前待插数字大,那么待插数字就和这个已经有序的数字交换位置;直到在有序数列中找到合适的位置为止。即,通过相邻元素的不断交换来达到无序数字插入到合适位置的目的普通思路的代码实现:def insertion_sort(a): n = len(a) for i in原创 2021-06-04 16:41:00 · 229 阅读 · 0 评论 -
算法学习之:python 通过递归和循环实现二分查找法
使用二元查找法的前提,就是必须针对的是有序数组二元查找使用递归和循环两种实现方法的复杂度都是 O(logn)O(logn)O(logn)def binary_search_recursive(arr,target): begin = 0 end = len(arr) - 1 result = search(arr, target, begin, end) return result## 在递归法中,递归的出口是当子问题的规模缩小到 0,那么代表整个过程没有解,返回.原创 2021-06-04 12:33:43 · 304 阅读 · 0 评论 -
算法学习之:python 完成二叉搜索树的创建,先序遍历,中序遍历和后序遍历
文章目录代码代码class Node: def __init__(self,value): self.value = value self.left = None self.right = None def add(self,value): if value >= self.value: if self.right == None: self.right = No原创 2021-04-30 20:54:01 · 254 阅读 · 1 评论 -
算法学习之:8种排序算法总结(稳定性,复杂度,使用场景)及 python代码总结
转发:https://www.cnblogs.com/ivyharding/p/11073182.html原创 2021-04-17 17:22:00 · 158 阅读 · 0 评论 -
算法学习之:Lomuto 分区算法 + 快速排序算法
文章目录算法原理代码基于 lomuto 的快速排序算法拓展:基于左右两边指针的快速排序算法建议算法原理分区就是通过确定一个基准值,把一组数分成两个部分。所有比基准值小的数据放在一边,另外的数据放在另外一边。Lomuto 算法将第一个数据设为基准值,然后向后比对,如果有比基准值小的数据,就交换到前面,当遍历完成后,把基准值插入到分界的位置。代码def LomutoPartition(A, lo, hi): p = A[lo] s = lo for i in range(l原创 2021-04-17 17:06:45 · 3254 阅读 · 0 评论 -
算法学习之:python 实现折半查找(binary search)
代码折半查找要求序列已经是有序的。def binsearch(a,k): ## 对于已经排好序的序列 alen = len(a) low = 0 hi = alen - 1 while low <= hi: mid = (low + hi) // 2 if a[mid] == k: return mid elif a[mid] > k: hi = mid原创 2021-04-16 18:01:30 · 673 阅读 · 0 评论 -
算法学习之:python 实现归并排序算法
代码:def merge(b,c,a): a_len = len(a) b_len = len(b) c_len = len(c) i = j = k = 0 while i< b_len and j< c_len: if b[i] < c[j]: a[k] = b[i] i += 1 else: a[k] = c[j]原创 2021-04-16 16:23:14 · 223 阅读 · 0 评论 -
一文清晰简单弄懂希尔排序,并且使用python实现
python 代码def shellsort(A): LEN = len(A) gap = LEN // 2 while gap>0: for i in range(gap,LEN): j = i while A[j] < A[j-gap]: A[j], A[j-gap] = A[j-gap],A[j] j -= gap gap原创 2021-04-15 22:06:48 · 173 阅读 · 0 评论 -
算法学习之:拓扑排序及其python实现
!!!先看算法分析,再看代码和解析算法分析部分建议看文章:https://www.cnblogs.com/bigsai/p/11489260.htmlpython 代码:def topLogical(adjacency_list): in_degree = dict((u,0) for u in adjacency_list) for u in ajacency_list: for v in adjacency_list[u]: in_degr原创 2021-04-12 18:31:50 · 852 阅读 · 0 评论 -
算法与复杂度学习--week3:求相邻最近的点;阶乘(递归法、循环法);斐波那契数列(递归法,循环法);汉诺塔问题(递归法);零钱问题(递归法);字符串匹配
文章目录○ 求相邻最近的点○ 阶乘递归法循环法○ 斐波那契数列递归法※ 循环法(这个思路牛逼)○ 汉诺塔(Hanoi)○ ※ 零钱问题(递归法)○ 字符串匹配○ 求相邻最近的点注意,在这里首先声明了 min=float("inf")min = float("inf")min=float("inf") 这句话的意思是,minminmin 初始化的值为正无穷。○ 阶乘递归法循环法使用 for 循环使用 while 循环○ 斐波那契数列递归法※ 循环法(这个思路牛逼)○原创 2021-03-19 16:43:51 · 202 阅读 · 0 评论 -
算法与复杂度学习笔记--week2:十进制二进制转换、求最大公约数、数组和链表的查找算法(递归)、排序算法、矩阵乘法、阶乘算法(递归)、斐波那契数列(递归)
文章目录涉及的算法二级制和十进制转化涉及的算法二级制和十进制转化输出是一个 tuple 元组,元组的第一个部分是每一次迭代完后的值;比如第一次是 20=12^0 = 120=1,第二次是 20+21=32^0 + 2^1=320+21=3, 第三次是 20+21+22=72^0 + 2^1 + 2^2=720+21+22=7,以此类推,元组的第二个部分表示的就是在这一次迭代中新增的一项,第一次迭代的新增项是 202^020,第二次是 212^121,以此类推...原创 2021-03-18 23:31:45 · 270 阅读 · 0 评论