数据结构与算法分析
qq_36459662
这个作者很懒,什么都没留下…
展开
-
数据结构与算法分析 十、算法设计技巧
贪婪算法思想 局部最优例子找零钱 为了找出十七美元六十一美分的零钱。可以拿出一张十美元,一张五美元,两张一美元,两个二十五分币,一个十分币,一个分币。 但不是对所有货币系统都行得通。应用调度 一般把优先权赋予那些更短的作业Huffman编码 文件压缩...原创 2020-11-20 09:16:13 · 158 阅读 · 0 评论 -
数据结构与算法分析 七、排序
前提●算法的输入可以互换。每个算法接收一个含有元素的数组和一个包含元素个数的整数。●传入的元素个数N是合法的,数据从0处开始●假设<和>运算符都存在插入排序算法//插入排序由N-1趟(pass)排序组成。对与P = 1到N-1趟,插入排序保证0到P-1位置上的元素是已排序的//在第P趟,为了将位置P上的元素向左移动到正确的位置上。先存储P上的元素,然后把比它大的元素都往右挪,直到有小于等于它的,void InsertionSort(vector<int>&v.原创 2020-11-19 20:00:52 · 294 阅读 · 0 评论 -
数据结构与算法分析 六、优先队列(堆)
模型操作●Insert:插入●DeleteMin:找出、返回和删除优先队列中最小的元素一些简单实现简单链表效率 在表头以O(1)执行插入操作,遍历链表删除最小元,花费O(n)时间。缺点 时间复杂度高二叉查找树效率 O(logN)操作插入,O(logN)操作删除最小元。缺点 反复删除左子树 的节点损害了树的平衡,使得右子树加重。二叉堆结构性质完全二叉树 堆是一颗被完全填满的二叉树(即完全二叉树)。数组表示 完全二叉树很有规律,可以用数组来实现。 对于数组中任一位置i上原创 2020-11-17 15:39:09 · 189 阅读 · 0 评论 -
数据结构与算法分析 五、散列
5.1 散列定义理想的散列表是一个包含有关键字的具有固定大小的数组。关键字就是带有相关值的字符串。表的大小记作Table-Size,关键字被映射到从0到TableSize - 1这个范围中的某个数。散列函数映射 关键字被映射到0到TableSize - 1这个范围中的某个数,并且被放到适当单元中。这个映射就叫做散列函数。理想散列函数 理想情况下它应该运算简单并且应该保证任何两个不同的关键字映射到不同的单元。冲突 当两个关键字映射到同一个值的时候,称为冲突,需要选择函数来解决冲突。散列函原创 2020-11-16 11:23:05 · 235 阅读 · 0 评论 -
数据结构与算法分析 四、树
4.1 基本知识树叶、深度、高度树叶:没有儿子的节点深度:从根到该节点的长度高度:从该节点到一片树叶的最长路径的长树的实现兄弟法struct TreeNode{datatype data;TreeNode *FirstChild; //第一个孩子TreeNode *NextSibling; //下一兄弟}数组法class Node {public: int val; vector<Node*> children; Node() {}原创 2020-11-14 18:19:11 · 206 阅读 · 0 评论 -
数据结构与算法分析 三、表、栈和队列
3.1 抽象数据类型ADT:抽象数据类型3.2 表ADT表的简单数组实现优点●查找第k个元素花费常数时间缺点●插入和删除花费昂贵●数组大小需要提前指定,会浪费大量空间。链表结构 由一系列不必在内存中相连的结构组成。每一个结构均含有表元素和next指针。最后一个单元的next指针指向NULLstruct Node{ ElementType Element; Node* Next;};双链表定义 数据结构上附加包含指向前一个单元的指针。优点 寻找前一个节点更容易缺点原创 2020-11-12 10:41:49 · 151 阅读 · 0 评论 -
数据结构与算法分析 二、算法分析(运行时间计算)
运行时间计算大O运行时间 大O运行时间是上界一般准则●for循环: for循环的运行时间是for循环内语句的运行时间乘以迭代次数●嵌套的for循环: 从里向外分析●顺序语句: 各个语句的运行时间求和●IF/ELSE语句if() S1else S2 不超过判断+S1和S2运行时间长者的总的运行时间递归●情况一:实质上是for循环,所以为O(N)int fun(int n){ if(n <= 1) return 1; else return n * fun原创 2020-11-08 21:40:43 · 577 阅读 · 0 评论 -
数据结构与算法分析 一、引言(本书内容 + 递归简论)
本书内容重要观念:写出一个可以工作的程序并不够。如果这个程序在巨大的数据集上运行,那么运行时间就变成了重要的问题。递归简论定义当一个函数调用它自己来定义时就称为是递归递归的两个基本法则●基准情形:总要有某些基准的情形,它们不用递归就能求解●不断推进:对于那些需要递归求解的情形,递归调用必须总能够朝着产生基准情形的方向推进。理解 递归就像词典,查一个单词时如果不理解,就要去查解释中的单词,最终查到一处就理解其中所有的单词...原创 2020-11-08 21:03:46 · 129 阅读 · 0 评论