数据结构和算法
文章平均质量分 59
wuxiaoxiao2021
这个作者很懒,什么都没留下…
展开
-
哈希表(散列表)原理详解
理解哈希函数、哈希表(连续存储空间?)? 利用的什么机理进行查找?(数组及其他数据结构,哈希表的实现方式有很多种) 哈希表的建立和使用(查找)不一样? 链表的妙用!很多算法都可以利用链表 结合数组和链表制造出一种哈希表? 对地址的理解?不要只局限于是物理地址哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码...原创 2018-08-11 16:55:16 · 455 阅读 · 0 评论 -
算法学习--7.4希尔排序
https://blog.csdn.net/MoreWindows/article/details/6668714希尔排序最坏情况O(N^2),增量的选择不同,其平均复杂度也不同; 希尔排序的性能可以在实践中接受,其简单特点使其对于适度的大量输入(数以万计)经常和你选用的算法。希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。该方法的基本思...转载 2018-10-23 20:06:56 · 490 阅读 · 0 评论 -
递归函数执行的理解
? 知乎上有大神曾经说递归有时候更像去查字典,我们一开始想要知道这句话什么意思,里面有词语不认识,查字典,字典的解释又有新的我们不认识的词语,然后一直查找,直到我们弄懂了,我们开始回去理解上一层词语的意思,不断往上,直到最后我们理解了最初的那句话的意思。查字典:调用栈中的递归函数的一个个返回结果回去理解:利用一个个返回结果进行后续函数执行(理解)!以下代码理解栈:/*! * \f...原创 2018-12-26 22:24:46 · 832 阅读 · 0 评论 -
利用插入排序的思想对二维数组排序
插入排序的 应用vector<int> vec;vector<vector<int>> vecVec;按vec的容量从小到大对vecVec排序void vecVecSort(vector<vector<int>>& preSort){ int n = preSort.size(); vector<vecto...原创 2018-11-08 10:05:12 · 433 阅读 · 0 评论 -
算法学习--7.2插入排序
插入排序特点模拟扑克牌的排序;平均O(N^2),最坏O(N^2),最好O(N) ,稳定#include <iostream>using namespace std;template<typename T>int length(T& arr){ return sizeof(arr) / sizeof(arr[0]);}void Insert...原创 2018-10-23 19:47:37 · 112 阅读 · 0 评论 -
【算法】最常用排序:快速排序优缺点及C++实现
快速排序特点原理:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。优点:平均性能好,O(nlog2n),2为下标缺点:不稳定,初始序列有序或基本有序时,时间复杂度降为O(n^2)。递归版本的实现方法一:填坑法1.利用分化函...原创 2018-10-17 22:36:45 · 9640 阅读 · 0 评论 -
Ransac算法所用:C++利用rand()生成不重复的随机数以及vector数组随机重排序 以及 rand()的应用
参考:https://blog.csdn.net/a19990412/article/details/78655331在哪个位置设置随机数生成种子,利用什么思想?怎么设置?在哪个头文件中? 怎么用rand()生成0-i区间的随机数?利用了数学中的哪种运算? 随机向量的生成问题?应用1生成0~i区间内的随机数:#include <cstdlib>using name...原创 2018-07-16 20:00:42 · 2884 阅读 · 0 评论 -
Ransac算法学习python版
初学小白,注释的代码比较详细import numpy as npimport scipy as spimport scipy.linalg as sldef ransac(data, model, n, k, t, d, debug = False, return_all = False): """ 参考:http://scipy.github.io/old-wiki...原创 2018-07-13 10:51:48 · 13785 阅读 · 8 评论 -
【数据结构】链表复习--利用C++复写单链表
利用输入构造链表?while(cin&amp;amp;gt;&amp;amp;gt;val)if(cin.get()=='\n')清空链表?从头到尾清空在位置x处前插节点?需要获取位置x的前一个节点指针删除节点?要获取待删除节点的前一个节点指针#include &amp;amp;lt;iostream&amp;amp;gt;using namespace std;typedef struct ListNode{ i原创 2019-02-17 21:46:39 · 175 阅读 · 0 评论 -
【算法】三大简单、慢速排序算法及C++实现
文章目录分类及原理直接插入排序直接选择排序冒泡排序稳定性定义优缺点C++实现插入排序直接选择排序冒泡排序冒泡排序普通版本冒泡排序改进版本(加标志位,提前结束)分类及原理直接插入排序模拟排序扑克牌,新牌&amp;lt;旧牌,旧牌依次后移直接选择排序从第一个位置开始比较,找出最小的,和第一个位置互换,开始下一轮。冒泡排序从左到右,数组中相邻的两个元素进行比较,将较大的放到后面。稳定性定义举个...原创 2019-03-09 15:09:51 · 536 阅读 · 0 评论 -
【算法】归并排序原理及其C++实现
文章目录原理特点实现原理https://www.cnblogs.com/chengxiao/p/6194356.html特点实现//合并相邻有序数组时,要新建一个额外的数组void merge_array(int array[], int left_index, int center_index, int right_index, int n){ int* pTmp = new i...原创 2019-03-09 16:50:59 · 538 阅读 · 0 评论 -
数据结构--6堆(优先队列)
操作插入:空穴上滤策略,新元素在堆中上滤直到找出正确位置。删除最小者(DeleteMin):返回并删除队列中最小的元素,将堆中最后一个元素放入合适位置,空穴下滤策略。限制:不能进行Find操作。 实现方式1.利用简单链表,在表头O(1)插入,遍历删除最小元;或者,始终让链表有序,则插入O(N),删除O(1)。因为插入多于删除,所以前者更好。2.利用二叉查找树,插入和删除都是O...原创 2018-10-22 21:09:02 · 137 阅读 · 0 评论 -
数据结构--3.4队列
基本操作:入队(enqueue):队尾rear插入出队(dequeue):队首front删除实现方式链表实现:继承自链表结构(本文略)数组实现:循环数组,只要Rear或者Front达到数组的尾端,他就绕回到开头。#include <iostream>using namespace std;typedef struct QueueRecord{ int m_...原创 2018-10-22 16:52:26 · 162 阅读 · 0 评论 -
基本数据结构-------链表List与链表节点ListNode
来源: http://www.cppblog.com/cxiaojia/archive/2012/07/31/185760.html线性表?分类(优缺点,查找、删除、插入的复杂度)?例子? 链表和线性表的关系? 链表的分类?是根据什么划分的?线性表线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表分类:顺序存储结构、链...原创 2018-08-11 20:22:20 · 18207 阅读 · 0 评论 -
小技巧:数据结构中很多操作都是从后往前进行操作(看前缀)
eg:删除vector中重复元素时,查看i个元素,遍历前面是否有,有的话删除。原创 2018-08-12 17:13:24 · 314 阅读 · 0 评论 -
while和for循环的巧用
用到了从后往前的思想? 什么时候用while?(当不知道具体要循环多少次时) 利用while判断条件是否满足时,要学会随时更新条件? 利用什么实现二分法查找?例一://无序向量顺序查找算法,返回位置(存在) 或 lo-1(不存在)template <typename T>Rank Vector<T>::find(T const& e, Rank ...原创 2018-08-12 17:13:13 · 908 阅读 · 0 评论 -
函数调用栈和递归函数分析以及尾递归、缓冲区溢出的讲解
知乎上有大神曾经说递归有时候更像去查字典,我们一开始想要知道这句话什么意思,里面有词语不认识,查字典,字典的解释又有新的我们不认识的词语,然后一直查找,直到我们弄懂了,我们开始回去理解上一层词语的意思,不断往上,直到最后我们理解了最初的那句话的意思。 查字典:调用栈中的递归函数的一个个返回结果回去理解:利用一个个返回结果进行后续函数执行(理解)!以下代码理解栈:/*! * \file...原创 2018-08-13 20:37:26 · 3651 阅读 · 1 评论 -
基础:cin与char*的相关问题
问题:想利用cin进行char*的输入错误代码:char* key = nullptr;cin >> key;要搞清楚cin>>key这句话的含义:向指针s所指向的地址输入字符串;所以要给变量key分配一个有效空间吧!即给key赋初值:char *key = new char[100];如果想用键盘输:string 数字可以直接cin >...原创 2018-09-19 16:29:07 · 4536 阅读 · 0 评论 -
数据结构----4.4二叉平衡树
一颗AVL树是其每个节点的左子树和右子树的高度最多相差1的二叉查找树!程序在vs2015可直接运行:#include <stdio.h>#include <stdlib.h>//二叉平衡树结构声明typedef struct AvlNode{ int element; struct AvlNode *left; struct AvlNode *r...原创 2018-09-25 13:59:07 · 178 阅读 · 0 评论 -
数据结构----4.4AVL树
性质深度:特殊的二叉查找树(平均深度O(logN)),深度一定是O(logN),不用担心栈空间被用尽是每个节点最多差1的二叉查找树,空树高度定义为-1。操作置空、查找、插入、删除VS2015可直接运行 //因为二叉查找树的平均深度为O(logN),所以一般不用担心栈空间被用尽#include <iostream>#include <ctime>...原创 2018-09-23 09:41:03 · 148 阅读 · 0 评论 -
数据结构--3.2链表
注意:表头和头结点的区别,个人理解表头的元素因为没用到所以可不初始化 清空链表是仍保留链表的头结点,此时L!= NULL;而销毁链表是整个链表为空,L==NULL 表头指针和链表指针同时指向链表所在的内存,使用时要注意,尤其delete时。名词:前驱元,后继元,数据域,指针域;存放A1,A2,....An,有效数据下标从1开始与数组的区别:链表存储非连续(避免插入和删除的线性开销),数...原创 2018-10-22 15:21:59 · 162 阅读 · 0 评论 -
算法学习-数据结构-2.4.3最大子序列的和问题
问题描述:求一串数列中,子序列最大和;相对应的是最小子序列和问题,类似算法一:暴力求解,时间复杂度O(N^3),不推荐算法二:采用“分治”策略,复杂度O(NlogN),体会思想。最大子序列和可能出现在左、中、右。 #include <iostream>#include <vector>using namespace std;int subSeqMax(co...原创 2018-10-19 21:43:00 · 465 阅读 · 0 评论 -
数据结构--3.3栈的实现
基本操作:入栈、出栈相当于插入、删除实现方式:链表、数组。链表:可以通过继承链表来实现。本文略数组实现:避免了指针,更流行,唯一的潜在危害是需要提前声明一个数组的大小,但是在典型的应用中,任一时刻栈元素的个数不会太大,所以此危害可忽略。#include <iostream>using namespace std;/***********************...原创 2018-10-22 14:31:33 · 177 阅读 · 0 评论 -
【算法】手撕堆排序
文章目录参考极客时间堆排序参考极客时间https://time.geekbang.org/column/article/69913堆排序时间复杂度:O(nlogn)O(nlogn)O(nlogn),但是实际软开中,快排性能更好。堆性质:堆必须是完全二叉树(保证利用数组存储堆时,由下标i快速找到父节点(i−1)/2(i-1)/2(i−1)/2,左右子节点2∗i+1,2∗i+22*i+1...原创 2019-06-26 20:51:13 · 987 阅读 · 0 评论