
基础算法
memoryjdch
这个作者很懒,什么都没留下…
展开
-
基础算法 —— 快排
以第一个数为基数:def quick_sort(array, left, right): if left >= right: return low = left high = right key = array[low] while left < right: while left &am原创 2018-05-13 18:45:19 · 618 阅读 · 1 评论 -
基础算法——动态规划之数字三角形
# 7# 3 8# 8 1 0# 2 7 4 4# 4 5 2 6 5import syslines = sys.stdin.readlines()row = len(lines) # 行col = len(lines[-1].strip().split()) # 列# 构造矩阵dp,用于存储原始三角形dp = [[0 for c in range(col)] for...原创 2018-07-18 20:29:23 · 401 阅读 · 1 评论 -
基础算法——dijikstra
字典表示# Dijkstra算法——通过边实现松弛# 指定一个点到其他各顶点的路径——单源最短路径# 初始化图参数G = {1: {1: 0, 2: 1, 3: 12}, 2: {2: 0, 3: 9, 4: 3}, 3: {3: 0, 5: 5}, 4: {3: 4, 4: 0, 5: 13, 6: 15}, 5: {5: 0, 6: 4}...原创 2018-07-18 20:28:35 · 751 阅读 · 0 评论 -
基础算法——DFS
以字典存储,递归# Check for the visisted and unvisited nodesdef dfs(graph, start, visited=None): if visited is None: visited = set() if len(visited) == len(graph): return else:...原创 2018-07-18 20:26:51 · 317 阅读 · 0 评论 -
基础算法——BFS
以二阶矩阵存储def graph_bfs(graph, s): color = [] queue = [] # 记录访问过的顶点 count = 0 n = len(graph) for v in range(n): color.append(0) queue.append(s) count = count + 1...原创 2018-07-18 20:25:33 · 214 阅读 · 0 评论 -
基础算法——BFPRT
def partition(arr, pivot_index): index = 0 r = len(arr) - 1 pivot_value = arr[pivot_index] arr[pivot_index], arr[r] = arr[r], arr[pivot_index] for i in range(0, r + 1): if ...原创 2018-07-18 20:23:58 · 206 阅读 · 0 评论 -
基础算法——计数排序
def countsort(lista): leng = len(lista) c = [] res = [] for i in range(100): c.append(0) for i in range(leng): c[lista[i]] = c[lista[i]] + 1 res.append(0) ...原创 2018-07-18 20:23:12 · 167 阅读 · 0 评论 -
基础算法——归并排序
def merge(arr): # 这个函数是先把数组进行分割,一直分,最后分成一个数来调用第二个函数MergeSort进行比较 # 如果数组只有一个数,直接就返回 if len(arr) <= 1: return arr mid = len(arr) // 2 left_arr = merge(arr[:mid]) righ...原创 2018-07-18 20:22:26 · 167 阅读 · 0 评论 -
基础算法——全排列问题
COUNT = 0def perm(n, begin, end): global COUNT if begin >= end: print(n) COUNT += 1 else: i = begin for num in range(begin, end): n[num], n...原创 2018-07-18 20:21:33 · 267 阅读 · 0 评论 -
基础算法——第三章总结
数组中的常见问题3-1 如何写出正确的程序: 例子:二分查找法 1.严格限制清楚指针or索引的实际意义:干什么的,是开区间还是闭区间。 2.边界怎样确定,等号何时加 3.在后面的循环中不断维护指针的意义。 4.在二分查找中,mid=(left+right)//2,如果数很多,会出现整型溢出,所以要改成mid=left+(right-left)//2 5.明确变量的含义 6.循环...原创 2018-05-16 09:34:19 · 283 阅读 · 0 评论 -
基础算法——第五章总结
5-1 2 3 在链表中穿针引线 练习题206:reverse linked list 反转一个链表 思路:改变节点的next。一个指针cur指向当前节点,一个指针pre指向前一个节点,一个指针next指向下一个节点练习题:92 只反转从m到n的元素 练习题83:一个有序的链表,删除重复的元素 练习题86:给出一个链表及一个数x,将链表重新整理,使小于x的元素在前,大于等于x的元素在...原创 2018-05-26 10:56:04 · 227 阅读 · 0 评论 -
基础算法——二分查找
二分查找,更新指针:def binary_search(array, key): left = 0 right = len(array) - 1 while left <= right: mid = left + (right - left) // 2 if array[mid] == key: retu...原创 2018-05-15 10:45:51 · 160 阅读 · 0 评论 -
基础算法——第四章总结
4-1 2 查找问题 1.查找有无 使用set,存储只有键 2.查找对应关系,键值对查找,使用map or 字典set和map的操作: insert find erase change(map)练习题 349 求两个数组的公共元素,重复的不算(用set) 练习题 350 求两个数组的交集,重复的要算(用map记录频次) 思考:如果两个数组本身有序,是否能利用。4-3 ...原创 2018-05-25 09:13:17 · 239 阅读 · 0 评论 -
基础算法——堆排序
大顶堆,升序排序:def build(heap): size = len(heap) for i in range((size - 2) // 2, -1, -1): heapify(heap, size, i)def heapify(heap, size, root): left = root * 2 + 1 right = left...原创 2018-05-13 19:05:11 · 223 阅读 · 1 评论 -
基础算法——动态规划之硬币问题
"""我们有面值为1元3元5元的硬币若干枚,如何用最少的硬币凑够11元?1 求问题的最优解:最小的硬币数2 是否有子问题:coin(n)表示的最少硬币数是是上一次拿时候的硬币数最少。注意:coin(n)是n元的最小硬币数,最后一次可拿的硬币数为1,3,5 则下一步的最小硬币数为 coin(n-coin_money[i]) 它的状态变更不是按元数的,是按照上次拿的硬币钱目3 状态转...原创 2018-07-18 20:30:03 · 2340 阅读 · 0 评论