- 博客(12)
- 收藏
- 关注
原创 python 单源最短路径
'''带权有向图 G=(V,E) 每条边的权为非负数给定V中的一个顶点,称为源计算从源到其他各顶点的最短路长度'''import numpy as npdef Dijkstra(n, v, dist, prev, c): #s 集合包含已知的最短路径的顶点 s = np.zeros(n, bool) #dist 记录从源到其他顶点的最短路径长度 prev 记录相应的最短路径 c[i][j]表示边(i,j)的权 s[v] = True for i in r.
2021-09-11 11:02:08 361
原创 python 哈夫曼编码
'''Huffman编码根据每个字母出现的频率,构造二叉树,写出对应的字母的编码'''import queueimport heapq#构造节点类(频率,字符,左儿子,右儿子,编码)class node: def __init__(self, f = None, char = None, left = None, right = None, code = None): self.f = f self.char = char self.l.
2021-09-10 09:10:17 602
原创 python 0-1背包问题
你的背包,那么多年还没烂'''0, 1背包问题物品i 的重量是Wi,价值为Vi背包容量为c,如何放入物品使背包中物品的总价值最大'''def Knapsack(v, w, c, n, m): for j in range(w[n], c+1): m[n][j] = v[n] for i in range(n-1, 1, -1): jmax = min(w[i]-1, c) for j in range(jmax+1):
2021-09-08 14:17:34 202
原创 python 凸多边形的最优三角剖分
'''凸多边形最优三角剖分'''# 权值函数,返回三角形的权值def w(a, b, c): global weight return weight[a][b]+weight[b][c]+weight[a][c]#计算最优值def MinWeightTriangulation(n, t, s): for r in range(2, n+1): for i in range(1, n-r+2): j = i+r-1 .
2021-09-04 17:41:05 661
原创 python 最大字段和(三种算法)
'''给定n个整数组成的序列,求该序列的字段和的最大值1.简单算法2.分治算法3.动态规划算法三种方法,对应三个函数'''#1.简单算法def MaxSum(n, a): sum = 0 besti, bestj = 0, 0 for i in range(n): thisSum = 0 for j in range(i, n): thisSum += a[j] if thisSum .
2021-09-01 11:48:01 1174
原创 python 最长公共子序列
b[i][j]的三种情况:b[i][j] = 1 x[i]和y[j]的最长公共子序列是由x[i-1]和y[j-1]的最长公共子序列在尾部加上x[i]得到(打印,朝左上方找)b[i][j] = 2x[i]和y[j]的最长公共子序列与x[i-1]和y[j]的最长公共子序列相同(朝上面找)b[i][j] = 3 x[i]和y[j]的最长公共子序列与x[i]和y[j-1]的最长公共子序列相同(朝左边找)'''最长公共子序列X = {A, B, C, B, D, A, B}Y = {B, D.
2021-08-27 11:02:44 249
原创 python 矩阵连乘
'''矩阵连乘问题A1 A2 A3 A4 A5 A6...相乘,求计算量最小的加括号的方式m[i][j] :Ai到A[j]的计算量s[i][j] :Ai到A[j] 应该加括号的地方'''def MatrixChain(p, n, m, s): for r in range(2, n+1): for i in range(1, n-r+2): j = i+r-1 m[i][j] = m[i+1][j] + p[i-1]*p[.
2021-08-26 14:59:33 1353
原创 python 合并排序(非递归)
'''先 2 2 排序再 4 4 排序依次类推'''def mergeSort(a, n): s = 1 b = [i for i in range(n)] # print(b) while(s < n): mergePass(a, b, s, n) # 合并到数组b s += s mergePass(b, a, s, n) # 合并到数组a s += sde.
2021-08-25 10:07:14 263
原创 python 合并排序(递归)
# 递归合并排序global n #统计递归的次数n = 0def MergeSort(A): global n n = n+1 if len(A) <= 1: return A middle = len(A)//2 left = [A[i] for i in range(middle)] right = [A[i] for i in range(middle, len(A))] left = MergeSo.
2021-08-25 10:04:01 150
原创 python 快速排序
'''快速排序1.分解 以A[p]为基准,小的放左边,大的放右边2.递归 左,右两部分进行分解3.合并 左半部分 + A[p] + 右半部分此代码使用 p = 0'''def quickSort(a, p, r): if p < r: q = Partition(a, p, r) #分解 quickSort(a, p, q-1) #左半部分排序 quickSort(a, q+1, r.
2021-08-25 09:46:15 55
原创 python 二分搜索
输入从大到小排列好的一行数,再输入想要查找的数x,输出x所在的位置'''二分搜索已经排好序的一组数 寻找x 的位置'''def BinarySearch(A, x, n): left = 0 right = n-1 while(left < right): middle = (left + right)//2 if(x == A[middle]): # X = A[middle] 返回中间数 re.
2021-08-25 09:36:55 64
原创 python 全排列问题
'''全排列问题输入123输出123, 132, 213, 231, 312, 321'''def perm(A, k, m): if k == m: for i in range(m): print(A[i], end=" ") if i == m-1: print() else: for i in range(k, m): A[i], A[k.
2021-08-25 09:10:50 324
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人