![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
gy_98
python后端开发
展开
-
深度优先算法---二叉树
二叉树回顾1,二叉树的类型性质1:在二叉树的第i层上至多有2^(i-1)个结点性质2:深度为k的二叉树至多有2^k - 1个结点性质3:对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;性质4:具有n个结点的完全二叉树的深度必为 log2(n+1)性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子...原创 2019-06-05 11:27:08 · 654 阅读 · 0 评论 -
哈希算法--神奇的词根
词根匹配import collectionsdef replacewords(dict, sentence): d = collections.defaultdict(set) # 默认的字典类型 值的类型为set类型 s = collections.defaultdict(int) # 默认的字段类型 值的类型是int类型 sen = senten...原创 2019-06-04 20:21:47 · 506 阅读 · 0 评论 -
哈希算法----单词匹配模式
匹配模式:大大小小 --> 1122def wordpattern(wordpattern, input): word = input.split(' ') # 目标字符串的单词以空格隔开 if len(word) != len(wordpattern): # 判断目标字符串和 模式字符串的长度是否相等 return Fa...原创 2019-06-04 20:20:39 · 714 阅读 · 0 评论 -
哈希算法----两数之和
哈希算法又称散列函数算法,通过映射关系,映射成更简单的查找方式,但是会存在一个关键字多个值,所以就用到了哈希算法,可以实现在常数时间内存储和查找这些关键字数据查找算法: 二分法 深度优先 广度优先 哈希查找 顺序查找顺序查找: 最简单 对数据逐个匹配,效率低 不适合大数据哈希查找: 查找快 查询 操作 删除快 ---- 最好的查找算法二分法: 效率高 ...原创 2019-06-04 20:19:10 · 1249 阅读 · 1 评论 -
分治算法--连续子列表最大和
特点:子列表不为空,一个列表中找到连续子列表的最大和,列表数字可负可正解题思路最大子列表有可能在左子列表、右子列表、左子列表和右子列表之间。我们需要找到子列表的最大值列表的和、右子列表的最大子列表之和、左子列表和右子列表之间的子列表最大和,在进行比较"""连续子列表的最大和解题思路: 一个列表 使用分治算法的时候 递归形式下 将列表分为两个子列表【32, 43, 54, 1...原创 2019-06-04 20:12:42 · 1160 阅读 · 0 评论 -
分治算法--多项式
from cmath import pi, expdef FFT(A, w): """ 快速傅氏变换 要求将多项式的系数表示长度为2的次方 :param A:多项式 :param w:单位的n次方本原单位根 :return: """ length = len(A) if length == 1: retur...原创 2019-06-04 20:12:07 · 693 阅读 · 0 评论 -
十大排序算法
点击进入转载 2019-06-04 19:51:38 · 95 阅读 · 0 评论 -
分治算法----凸包
凸包是正好包含所有点的凸边形,之所以叫凸包,是因为凸中包含了凸多边形包围起来的所有点我们要写的是找出凸包的顶点集,使用分治算法首先,连接最左端和最右端的两点。命名线上方的区域为上包,下方位下包,将两点加入到顶点集合然后,找到与直线距离最远的两点,与第一步中的两点相连,划分为上包和下包,新找出的两点为新的顶点加入到顶点集合在此之后,上包递归分为上下两个子包,下包地柜分为两个子包,知道...原创 2019-06-04 19:44:06 · 917 阅读 · 2 评论 -
排序---归并排序
递归归并排序的思想是把列表分为两个子列表,单独排序子列表在进行合并列表递归法可以利用二叉树进行理解,列表为根节点,子列表为子节点。首先排序子列表,在一步步合并子列表,在合并两个子列表。"""简述归并排序的方法: 【32, 43, 22, 1, 5, 33, 8, 9】第一步: 将列表分开两部分 32 43 22 1 5 33 8 9第二步: 将...原创 2019-05-31 11:27:06 · 128 阅读 · 0 评论 -
排序---快速排序
快速排序,又称划分交换排序,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。从数列中挑出一个元素,称为"基准"(pivot), 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这...原创 2019-05-31 11:20:27 · 192 阅读 · 0 评论 -
排序-----冒泡排序
通过无序区中相邻的关键字间的比较和位置的交换,使关键字最小的记录想气泡一样逐渐向上漂至水面,使得整个算法是从最下面的记录开始的,对两个相邻的关键字进行比较。把关键字较小的记录放在关键字较大的记录上面,经过一趟排序之后,关键字小的记录放在最前冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这...原创 2019-05-31 11:17:15 · 155 阅读 · 0 评论 -
容器的使用----队列
队列的特点:先进先出,后进后出class Queue(object): """队列 先入先出 后入后出""" def __init__(self): self.items = [] def is_empty(self): return self.items == [] def enqueue(self, item): ...原创 2019-05-31 11:13:50 · 216 阅读 · 0 评论 -
容器的使用-------栈
堆和栈都是容器,栈,只在容器的一段进行加入数据和输出数据, 没有位置,可以随时访问,删除最后加入的元素遵循后进先出原则class Stack(object): """栈 先入后出 后入后出""" def __init__(self): self.items = [] def is_empty(self): """判断是否为...原创 2019-05-31 11:11:28 · 257 阅读 · 0 评论 -
双指针问题--链表--双向链表
双向链表的特性:元素的由他的值和链各个指针组成,左指针指向上一元素, 右指针指向下一元素class Node(object): def __init__(self, item): self.item = item self.next = None self.prev = Noneclass DoubleLink(object):...原创 2019-05-31 11:08:55 · 765 阅读 · 0 评论 -
双指针问题---链表---单链循环表
单向循环链表的特性: 尾部指针不为None,指向循环的额下一个元素的headclass Node(object): """节点""" def __init__(self, item): self.item = item self.next = Noneclass SinCycLinkedlist(object): """单向循环链...原创 2019-05-31 11:04:53 · 394 阅读 · 0 评论 -
双指针问题---链表---单链表
链表是用指针连接的用于存储数据的数组,它的最大的优点是可以有效的利用零碎的内存空间,在很多语言中数组需要提前定义,而且定义后不可以进行修改,存储同一类型的数据。在Python中没有指针,需要使用模拟指针, 链表可以修改长度,并且存储不同类型的元素# 单链表: 链表的每个元素 要存储值 + 下一个指针的值 这样才能被连接 最后一个元素的的指针为空指针# 单链表遍历: 从没有指针指向的...原创 2019-05-31 11:00:14 · 244 阅读 · 0 评论 -
双指针问题----二分法查找
首先先普及一下算法的特性算法有五大特性:可行性: 算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成输入: 算法具有0个或多个输入输出: 算法至少有1个或多个输出确定性(无二义性):算法中的每一步都有确定的含义,不会出现二义性算法的时间复杂度计算:最优时间复杂度:算法...原创 2019-05-31 10:52:22 · 990 阅读 · 0 评论 -
双指针问题----合并有序数组
简单算法指针概述‘指针’就是编程语言中的一个对象,它存储这一个内存空间的地址,计算机可以通过这个地址找到变量的值,也就是说,这个特定的地址指向这个值。指针的最大优点是在于它可以有效的利用零碎的内存空间在Python中列表 可以用来代替数组进行解释指针并不是真正的指针,而是一种模拟指针,类似于元素的位置下标# 合并两个有序的数组 -- 数组就是列表li1 = [3, 4,...原创 2019-05-31 10:44:26 · 555 阅读 · 0 评论 -
哈希算法----猜词游戏
def gethint(secret, guess): secret_dict = {} # 创建字典 用于存储公牛和母牛的数量(AB) guess_dict = {} A = 0 # 公牛 母牛 B = 0 for i in range(len(secret)): # 遍历谜底词语 要求猜的词语长...原创 2019-06-04 20:22:56 · 614 阅读 · 1 评论