数据结构与算法
anoperA
啦啦啦
展开
-
红黑树--原理,性质与应用
概述红黑树是一棵二叉搜索树, 主要用在更改比查询更加频繁的地方(而二叉平衡树用在搜索比更改频繁的地方).已经的一些性质:二叉搜索树上基本操作所花费的时间与这棵树的高度成正比.对于一棵完全二叉树, 这些操作的的最坏运行时间为O(lgn), 如果搜索二叉树退化为线性表, 则其最坏的运行时间是O(n).退化为线性表的搜索二叉树, 其操作时间为O(n):图(1)一棵完全二叉树的操作时间是O(lgn):图(2)搜索二叉树,平衡搜索二叉树,红黑树的区别与联系树种类是否完全二叉树是原创 2020-05-14 14:34:28 · 349 阅读 · 0 评论 -
动态规划01--切钢条(2)
带备忘录的自顶向下遍历def memoized_cut_rod_aux(p, n, r): ''' 携带一张收益表, 减少重复计算 ''' if r[n-1]>=0: return [r[n-1], r] if n==0: return [0, r] else: q = 0 for i in原创 2017-11-24 14:01:24 · 290 阅读 · 0 评论 -
动态规划01--切钢条(1)
# -*- coding: utf-8 -*-import randomdef getp(n): ''' 获取一个长度为n的价格表 ''' p = [0 for i in range(n)] for i in range(n): p[i] = random.randint(1, n) return pdef cut_rod(p, n)原创 2017-11-24 13:36:32 · 275 阅读 · 0 评论 -
快速排序(python)
def partition(A, p, r): ''' 对输入的数据进行边界判断 Params: list[int] A, 需要排序的数组 int p, 左边界 int r, 右边界 Returns: list[int] A, 已经划分好的数组 int i+1, 边界, 左边的数据(不含A[i原创 2017-10-16 12:55:44 · 333 阅读 · 0 评论 -
计数排序(python)
def counting_sort(A): #计算出数组取值区间 k = max(A) #数组长度 n = len(A) #临时数组 tmp = [0 for i in range(k+1)] #输出数组 result = [0 for i in range(n)] #输出数组中的指针 pos = 0 for i原创 2017-10-17 13:28:19 · 835 阅读 · 0 评论 -
4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Example 1: nums1 = [1, 3] num原创 2017-10-04 16:53:09 · 511 阅读 · 0 评论 -
合并两个已排序数组(Python代码)
def merge(A, B): ''' 合并两个已排序数组 思路: 分别定义i,j两个整形变量,作为指针, 指向当前A, B数组位置 循环比较A[i], B[j]位置上的值,小的则提取值放在结果数据, 同时对应的指针+1 另一个的指针不变. Args: list A:一个已排序数组 lis原创 2017-10-09 14:01:26 · 4006 阅读 · 2 评论 -
插入排序
伪代码 def insert_sort(A): #数组长度 n = len(A) for j in range(1, n): key = A[j] i = j-1 while i>=0 and A[i]>key: #腾空i位置 A[i+1] = A[i]原创 2017-10-17 20:37:18 · 197 阅读 · 0 评论 -
快速排序-降序(python)
def partition_desc(A, p, r): if r>p: #用来指示<x的位置 i = p-1 #用来移动遍历 j = p #主元素 x = A[r] #遍历[p, r-1]区间 for j in range(p, r): i原创 2017-10-17 20:09:36 · 1614 阅读 · 0 评论 -
通过3(2/n)次比较同时找到数组最大和最小值(python)
def get_min_max(A): ''' Desc: 同时找到最小值和最大值 数量必须大于2 ''' #初始化结果数组[最小, 最大] result = [A[0], A[1]] if result[0]>result[1]: result[0],result[1] = result[1],r原创 2017-10-17 17:40:39 · 1481 阅读 · 0 评论