算法
2019.09.04
能力不及野心所以我在努力
展开
-
python算法+数据结构——堆排序(2)
堆:一种特殊的完全二叉树结构(1)大跟堆:一颗完全二叉树,满足任一节点都比其孩子节点大。(2)小根堆:一种完全二叉树,满足任一节点都比其孩子节点小。堆的向下调整:当根节点的左右子树都是堆时,可以通过一次向下的调整来将其变换成另一个堆。咱们来看一个例子:现在要求将这个树变化为大根堆(满足任一节点都比其孩子节点大),咱们可以发现最上面的2要比其孩子节点7,9都小,那么将两个孩子节点中最大的替换道到2的位置才能一步步构成大根堆,那么变换后:这时我们发现如果把2放在9的位置还是不能构成大根堆,因为原创 2022-01-25 11:17:49 · 671 阅读 · 0 评论 -
python算法+数据结构——堆排序(1)相关基础知识
在介绍这种算法前,我先向大家介绍一些基础知识。树与二叉树树是一种可以递归定义的数据结构,比如目录结构。树是由n个节点组成的集合:1.如果n=0,那么这是一颗空树。2.如果n>0,那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。一些概念:1.根节点、叶子节点:A、D、E、F、G、J下还有分支那么它们就是根节点;B、C、H、I、K、L、M、N、P、Q它们下面没有分支,那么他们就是叶子节点2.树的高度(深度):指的是整棵树有几层,向图中有4层,树的高度就是4原创 2022-01-17 10:01:59 · 600 阅读 · 0 评论 -
python算法+数据结构——快速排序
快速排序的特点就是快.它的时间复杂度是nlog(n),前面咱们说过像冒泡排序它的时间复杂度是n**2,两者的效率相差的不是一点点。快速排序取一个元素P(第一个元素),使元素P归为;列表被P分成两部分,左边都比P小,右边都比P大;利用递归完成排序;主要的意思就是:假设有一个列表[5,7,4,6,3,1,2,9,8]对它进行快速排序;P归位:第一个元素是5,将5归为,左边都比5小,右边都比5大。归位完,得到[2,1,4,3,5,6,7,9,8]从5这里将列表分为两部分,左边都比5小[2,1,原创 2022-01-10 12:33:34 · 603 阅读 · 0 评论 -
python算法+数据分析——排序(冒泡排序、选择排序、插入排序)
列表排序有升序和降序,python内置排序函数:sort()常见的排序算法有:冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序,计数排序,基数排序等今天咱们来看冒号排序,选择排序,插入排序这三种。冒泡排序(Bubble sort)冒泡排序简单来说就是像鱼吐泡泡一样,泡泡按大小顺序排列。列表每相邻的数,如果前面比后面大,则交换这两个数。一趟排序完成后,则无序区减少一个数,有序区增加一个数。def bubble_sort(li):#li给出一个列表 for i in range原创 2022-01-02 13:33:47 · 732 阅读 · 0 评论 -
python算法+数据结构——列表查找
**列表查找**(从列表中找到指定元素)分为顺序查找和二分查找内置列表查找函数:index()**顺序查找:**顾名思义从第一个元素开始找,直到找到指定元素。**二分查找**:也叫折半查找,从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值进行比较,可以使候选区减小一半.原创 2021-12-29 15:15:53 · 675 阅读 · 0 评论 -
python算法+数据结构—递归(汉诺塔问题)
将最上面的n-1个盘子视为一个整体,先将n-1个盘子从A经过C移动到B(经过C的意思是,n-1个盘子每次移动一个,直到移动到B肯定会经过C)代码表示:hanoi(n-1,A,C,B)再将第n个盘子从A移动到C,代码表示print("moving from %s to %s"%(A,C))(因为一个盘子,一步,不需要调用本身)最后将n-1个盘子从B经过A移动到C代码表示:hanoi(n-1,B,A,C)汉诺塔问题就解决了原创 2021-12-29 13:39:48 · 511 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——子序列的和
n,m = map(int,input().split())a= nsum = 0while a<= m <10**6 and n< m <10**6: i = 1/a**2 a+=1 sum += i print('%.5f'%sum)原创 2021-11-12 08:15:00 · 249 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——倒三角形
n = int(input())i = nwhile 0<=i<=n: print(' '*(n-i)+'#'*(2*i-1)+' '*(n-i)) i-=1 continue原创 2021-11-12 08:00:00 · 1007 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——韩信点兵
a,b,c = map(int,input().split())it=[]for n in range(10,101): if n%3 == a and n%5 == b and n%7 == c: it.append(n) print(min(it)) else: print("no answer")原创 2021-11-11 08:15:00 · 978 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——水仙花
#第一种方法i = 100while i <=999: if i == (i//100)**3 + (i%100//10)**3 + (i%10)**3: print(i) i+=1 continue#第二种方法for i in range(100,1000): if i == (i//100)**3 + (i%100//10)**3 + (i%10)**3: print(i)原创 2021-11-11 08:00:00 · 88 阅读 · 0 评论 -
算法竞赛入门经典(Python实现)——数据统计
s = input()x = s.split()x=[int(x[i])for i in range(len(x))] #将列表里的str转换为int a = sum(x)/len(x) #eval()去掉字符串最外层的引号b = min(x) #set(list)去除列表里的重复c = max(x)print(a,b,c)有限个数一行输入: a,b,c = map(int,input().split())输入a原创 2021-11-10 08:15:00 · 158 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——阶乘之和 factorial(阶乘)
factorial = 1sum = 0i = 1n = int(input())while i<=n: factorial*=i i +=1 sum+=factorialprint(sum%1000000)原创 2021-11-10 08:00:00 · 290 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——近似运算
i= 1sum = 0n = 1while n > 1/10**6: n=1/(2*i-1) if i%2==1: sum +=n i+=1 else: sum -=n i+=1print(sum)原创 2021-11-09 20:16:56 · 275 阅读 · 0 评论 -
算法入门竞赛经典(python实现)——3n+1问题
n = int(input())i = 0while n>1: if n%2 == 1: n = 3*n +1 else: n/=2 i+=1print(i)注:乘法溢出解决:加上long long n = n2 输入n换成n2原创 2021-11-09 20:12:33 · 892 阅读 · 0 评论 -
算法竞赛入门经典(python实现)——输出所有形如aabb的完全平方数
for a in range(1,10): for b in range(0,10): c = a*1100+11*b m = int(c**0.5) if m**2 == c: print(c)原创 2021-11-09 20:08:25 · 1300 阅读 · 0 评论 -
算法竞赛入门经典(python实现)第一章
#1.1#print(8/5)#1.2圆柱体的表面积#r = int(input("底面半径:"))#h = input("高:")#area =r**2#print(area)#1.3三位数反转#n = int(input())#a = int(n/100) /除完返回浮点数,//除完返回整数部分#b=int(n/10)%10#c = n%10#n = c*100+b*10+a#print(n)#交换变量#a = int(input())#b = i原创 2021-11-09 20:05:44 · 582 阅读 · 0 评论