07 2018 档案
摊还分析
摘要:一.摊还分析(平摊分析) 1.通过求数据结构的一个操作序列中所执行的所有操作的平均时间来评价操作的代价 2.摊还分析不同于平均情况分析,它不涉及到概率,它只是保证了最坏情况下每个操作的平均性能 3.三种方法: (1)聚合分析:确定一个n个操作的序列的总代价的上界(最坏情况下的总代价),从而得到每个操 阅读全文
posted @ 2018-07-27 11:33 温润有方 阅读(315) 评论(0) 推荐(0)
贪心算法
摘要:一.贪心算法 1.总是做出局部最优解,寄希望这样的选择能导致全局最优解,即每一步都做出当时看起来最佳的选择, 2.贪心算法并不保证得到最优解,但对很多问题可以求得最优解 3. 对于一个问题,可能有多种贪心策略 4.贪心算法通常自顶向下地设计,做出一个选择,然后求解剩下的那个子问题,而不是自底向上地求 阅读全文
posted @ 2018-07-26 15:56 温润有方 阅读(1599) 评论(0) 推荐(0)
动态规划
摘要:一.动态规划,通常用于求解最优化子结构问题和子问题重叠的情况 (1)最优子结构:问题的最优解由相关子问题的最优解组合而成,而这些子问题可以独立求解 (2)子问题重叠:不同的子问题具有公共的子子问题。比如:问题4 可以分出(3,2,1,0)四种子问题,但其中问题3和问题2都可以分出问题0和问题1,这就 阅读全文
posted @ 2018-07-26 15:55 温润有方 阅读(473) 评论(0) 推荐(1)
递归和迭代
摘要:一.递归(Recursion) 1.递归:以相似的方式重复自身的过程 2.递归在程序中表现为:在函数的定义中直接或间接调用函数自身 3.递归和循环: (1)递归是有去(递去)有回(归来),因为存在终止条件,比如你打开一扇门还有一扇门,不断打开,最终你会碰到一面墙,然后返回 (2)循环是有去无回,但可 阅读全文
posted @ 2018-07-26 15:47 温润有方 阅读(3460) 评论(0) 推荐(0)
数据结构的扩张
摘要:一.扩张数据结构 1.目的:给基本数据结构进行扩张以支持一些附加功能或者利用附加信息加速已有的操作 2.基本步骤(可以用于检查和纠错) (1)选择一种基础的数据结构(红黑树,树,链表,队列等) (2)确定基础数据结构中要维护的附加信息(具体数据,或属性,或指针类信息等) (3)检验基础数据结构上的基 阅读全文
posted @ 2018-07-26 15:46 温润有方 阅读(356) 评论(0) 推荐(0)
摘要:一.树 1.树是有n个结点的集合,仅有一个根结点,有若干子结点 2.结点拥有的子树数称为结点的度;树的度是树内各结点的度的最大值 3.叶节点(终端节点):度为0的结点;树中还有双亲结点,孩子结点,兄弟结点,子孙结点,祖先结点 4.结点的层数从根开始定义,根为第一层;树中结点的最大层次称为树的深度(高 阅读全文
posted @ 2018-07-26 10:53 温润有方 阅读(367) 评论(0) 推荐(0)
哈希表
摘要:一.符号表问题 1.一个表里面放着n条记录,(记录x:x通常是一个指向实际数据的指针) 2.在每个记录中,存在一个记录的键,还存在一些卫星数据(属于键的附加数据) 3.排序是对记录进行排序,而不是关键字 4.对表进行操作:添加记录,删除记录,查找具有特定键的记录 二.直接映射表(数组) 1.适用于关 阅读全文
posted @ 2018-07-26 10:21 温润有方 阅读(265) 评论(0) 推荐(0)
链表
摘要:链表:通过指针对每个元素进行存储 1 #假设无序双向链表 2 class Node: 3 def __init__(self, prev, next, key): 4 '''节点(前继,后继,关键字)''' 5 self.prev = prev 6 self.next = next 7 self.k 阅读全文
posted @ 2018-07-26 10:18 温润有方 阅读(326) 评论(0) 推荐(0)
栈和队列
摘要:一.栈(stack) 1.后进先出,压入(push),弹出(pop) 2.栈顶 S[S.top] 操作,S.top指向最新压入的元素 1 #栈(stack) 2 class Stack: 3 def __init__(self,S=[]): 4 #初始化空栈,设置属性栈顶指针top和栈的列表表示 5 阅读全文
posted @ 2018-07-26 10:16 温润有方 阅读(137) 评论(0) 推荐(0)
中位数和顺序统计量
摘要:一.中位数和顺序统计量 顺序统计量:第i个顺序统计量是该集合中第i小的元素 中位数A[i]:i=[(n+1)/2] 选择问题:在一个包含n个(互异)元素组成的无序集合中,在不排序的情况下,选出第k个顺序统计量 二.选择最大最小值:通过遍历集合每个元素,记录最大最小值。O(n) 1 #最小值和最大值 阅读全文
posted @ 2018-07-26 10:12 温润有方 阅读(945) 评论(0) 推荐(0)
雇佣问题
摘要:一. 1 #根据给定的应聘者列表,得出最好的应聘者 2 def hire_assistant(assList): 3 n = len(assList) 4 best = 0 5 index = 0 6 for i in range(n): 7 value = assList[i].score 8 i 阅读全文
posted @ 2018-07-25 20:34 温润有方 阅读(200) 评论(0) 推荐(0)
线性时间排序
摘要:一.线性时间排序 1.排序算法复杂度都可以是线性时间O(n) 2.都是在一定假设的条件下进行 二.计数排序:假设输入的n个数据的每一个都是0-k区间的一个整数,对于一个元素x,确定小于x的元素个数,把x放在对于数组位置 时间复杂度:O(k+n);当k=O(n)时, 1 #计数排序 2 def cou 阅读全文
posted @ 2018-07-25 20:34 温润有方 阅读(481) 评论(0) 推荐(0)
分治策略
摘要:一.在分治策略中,递归地求解一个问题,在每层递归中应用如下三个步骤: 二.分治法分析归并排序 (1)把原数组分成两部分进行处理 (2)递归求解这两部分 (3)把求解好的两部分合并起来 三.二分查找:在数组中查找x的位置 (1)分:把x和已排序好数组的中间值进行比较 (2)治:在子数组中递归 (3)合 阅读全文
posted @ 2018-07-25 20:33 温润有方 阅读(294) 评论(0) 推荐(0)
摘要:1 import math 2 #定义一个类,堆 3 class heap: 4 def __init__(self,A): 5 self.list=A#堆是由列表得来 6 self.heap_size = len(A)#堆的大小是列表的长度 7 def parent(self,i): 8 #i的父 阅读全文
posted @ 2018-07-25 20:27 温润有方 阅读(177) 评论(0) 推荐(0)
比较排序
摘要:一.问题描述 输入:n个数的一个序列<a1,a2,...,an> 输出:输入序列的一个从小到大的排序<a1',a2',...,an'> 二.比较排序 1.在排序的最终结果中,各元素的次序依赖于它们之间的比较 2.快速排序,归并排序,插入排序,堆排序都是比较排序, 3.堆排序和归并排序都是渐近最优的比 阅读全文
posted @ 2018-07-25 20:23 温润有方 阅读(352) 评论(0) 推荐(0)
算法 准备
摘要:一.算法 1.算法:算法面向一个问题,体现解决问题的流程,问题定义输入和输出的关系, 2.特点:有穷性、确定性、能行性、输入、输出 二.算法设计和分析 1.算法一般用伪代码描述,重点体现流程 2.算法的运行时间: (1)考虑输入的情况,相同规模不同的输入可能导致算法的运行时间不同,比如顺序和逆序的排 阅读全文
posted @ 2018-07-25 20:21 温润有方 阅读(184) 评论(0) 推荐(0)