数据结构的学习
欢迎关注微信公众号cplusplus物语,微信号搜索:cpluspluswuyu,里面会每周推送leetcode题解,数据结构与算法文章,c++学习过程中的知识积累。
ayesawyer
这个作者很懒,什么都没留下…
展开
-
动态规划算法解析与实战
一、算法思想 动态规划算法的基础是最优原理,它是用来解决贪婪算法和分治算法无法解决或者无法简洁高效解决的算法,一般用于求解下列问题:(1)背包问题 (2)最短路径 等。 动态规划和贪婪算法一样,都一个问题的求解都是分为对很多问题的求解的综合,问题最终的解是多次选择的综合结果,但是贪婪算法中,每次选择最优解,之后不可撤回,但是动态规划中需要考察一系列的抉择,然...原创 2019-11-18 11:24:48 · 485 阅读 · 0 评论 -
操作系统一些琐碎的知识点
A:程序查询方式:检查条件及处理需要占用CPU时间;B:中断模式:检查条件不占用CPU时间,满足条件进入中断处理子程序,此时需占用CPU;C:DMA方式:由DMA控制器完成I/O与内存之间的请求,CPU占用仅发生在DMA请求阶段和结束阶段;D:无条件存取方式:在处理过程中仍然需要占用CPU。同一进程内的线程共享:1、代码段 2、数据段 3、打开文件列表线程私有:1、线程i...原创 2019-08-16 15:57:06 · 447 阅读 · 0 评论 -
进阶版本的二分法
如何查找第一个等于target的,最后(第)一个等于target的,第一个(最后)大于等于target的,第一个(最后)小于等于target的。第一种情况:首先是最基本的二分查找: int erfen(vector<int> arr,int key){int L = 0,R = arr.size() - 1; //在[L,R]范围内...原创 2019-08-19 15:54:07 · 207 阅读 · 0 评论 -
链表添加函数中为什么要用指向链表指针的指针
指针这一块一直很绕,搞不清楚。在看书的时候有个往链表里添加节点的函数,代码中考虑到可能给出的头指针为空,并做另外一些处理。具体代码如下: #include <iostream>#include <string>using namespace std;struct ListNode{int val;...原创 2019-07-30 09:37:12 · 1089 阅读 · 1 评论 -
数据结构学习之堆、哈夫曼
什么是堆?堆是为了处理一种特殊的情况而建立的一种特殊的队列,取出的元素的顺序是按照元素的优先权的大小,而不是依照元素进入队列的先后顺序。那为何会组织这种形式呢?因为依靠顺序存储或者链表都有各种不尽人意的地方,平均损耗如下所示:所以我们采用完全二叉树来进行存储,这样插入和删除都是O(log(n)),而且因为是完全二叉树,所以并不会照成空间上太多的浪费。堆有两个特性:(1)结构性:用数组表...原创 2019-07-30 09:37:05 · 208 阅读 · 0 评论 -
数据结构学习之树
二叉搜索树、二叉平衡树因为客观世界中的许多事物存在着层次关系,所以树这种结构能够很好的表示这种层次关系。通过这种分层次组织在管理上具有更高的效率,典型例子之一就是基本操作查找(二分查找如下图所示),查找分为静态查找(无插入和删除操作)和动态查找(包括插入和删除)。从上图我们可以看出,这是将一个顺序存储的组织方式转换成了一个分层次的树形结构来进行查找,可以明显看出,查找速度从顺序查找的o(n)...原创 2019-07-30 09:36:57 · 193 阅读 · 0 评论 -
数据结构学习之排序算法
常用的几种排序算法,排序是什么就不用介绍了,直接进入正题吧,并且我们的排序只是讨论基于比较的排序(>=<有定义),只讨论内部排序,什么是内部排序呢?内部排序是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列,并且没有任何一种排序是在任何情况下都表现得最好的,下面我们从简单排序当中的冒泡排序和插入排序开始介绍。(1)冒泡排序通过每次交换两个相邻的元素,每一次排序...原创 2019-07-30 09:36:48 · 613 阅读 · 0 评论 -
数据结构学习之集合与图
因为我平翘舌分不清楚,所以后面的邻接和领结是一样的。集合的运算:交、并、补、差,判定一个元素是否属于某一个集合。并查集:可以使用树结构表示集合,树的每个节点代表了一个集合元素,例如采用双亲表示法:孩子指向双亲。存储结构采用数组的存储形式,每个数据域跟着一个父域,其中如果父域的值指向-1,代表为根节点,否则指向父亲节点,也就是说负数表示根结点,非负数表示双亲结点的下标。集合的查找运算:寻...原创 2019-07-30 09:36:41 · 838 阅读 · 0 评论 -
数据结构学习之散列表的学习
散列查找与散列表,目前我们已知的几种查找方法是顺序查找(O(N))、二分查找(静态查找,O(longN)),二叉搜索树(O(h),其中h为树高),平衡二叉树(O(logN))。当有一个庞大用户群的时候,用二分查找或者树查找法确实速度也可以接受,但是当动态查找时,需要进行插入和删除,为了让数据满足这几种查找所需要的特定的数据排序,需要移动大量的数据,耗时很高。并且上述的查找办法,默认的是进行查找操...原创 2019-07-30 09:36:32 · 994 阅读 · 0 评论 -
数据结构学习之排序算法c++实现
用c++把几种排序都写了一遍。1.1选择排序#include<iostream>#include<algorithm>#include<vector>using namespace std;void selectionSort(vector<int>&a,int len){...原创 2019-07-30 09:36:25 · 197 阅读 · 0 评论