自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 c++优先级队列(priority_queue)使用总结

1.优先级队列简介优先级队列(priority_queue)是一种容器适配器,默认基础容器为数组vector,使用时需要包含头文件<queue>。其内部基于堆结构实现,关于堆结构的介绍可以看这里。理解了堆之后也就能理解优先级队列的原理,以及为什么使用vector作为默认基础容器,不过不了解堆结构也不影响优先级队列的使用。优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除.在最小优先队列中,最小元素

2020-07-02 16:46:16 2845

原创 数据结构之通俗易懂的堆

1.堆的简介堆(Heap)是一个可以被看成近似完全二叉树的数组。树上的每一个结点对应数组的一个元素。除了最底层外,该树是完全充满的,而且是从左到右填充。堆包括最大堆和最小堆(又称大小顶堆):最大堆的每一个节点(除了根结点)的值不大于其父节点;最小堆的每一个节点(除了根结点)的值不小于其父节点。 堆和完全二叉树最主要的区别是堆是用数组来实现的,上图红色编号即为数组下标,满足如下关系:最大堆:arr[i]>=arr[2*i+1]&&arr[...

2020-06-30 21:14:32 770

原创 二叉树的遍历汇总,刷题必备

1.简介二叉树的遍历主要分为深度优先遍历和广度优先遍历两大类,其中深度优先遍历又分为前序遍历、中序遍历、后序遍历。我们以下面这棵树来具体说明这些遍历之间的区别。 广度优先遍历:从左到右依次遍历每一层,即按1 2 3 4 5 6顺序遍历。前序遍历:先遍历父节点,再遍历左子树,最后遍历右...

2020-05-16 19:52:23 1792 6

原创 leetcode上的脑筋急转弯,你的脑筋会转弯吗?

1.Nim游戏你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是...

2020-04-22 21:05:26 573

原创 只是一篇超详细的c++ list用法总结罢了

1.简介list是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。使用时需要包含头文件<list>。 它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。由于其结构的原因,list随机检索的性能非常的不好,因为它不像vect...

2020-04-13 18:12:19 1116 3

原创 c++ queue(队列)使用指南

1.deque简介queue和stack类似,是STL中的容器适配器,它们并不是容器,而是基于其他容器实现。那么什么叫容器适配器呢,大家可以想一想电源适配器,没错就是下面这个:它能直接给手机充电吗?当然不能,那是它可以将电源转化为手机能够适应的电压。容器这里就相当于电源,容器适配器对容器的接口进行封装,以达到我们需要的要求。queue的原理和操作十分简单,即先进先出原则,即只能从队...

2020-04-12 21:39:32 1470 1

原创 c++ deque(双端队列)使用指南

1.容器简介deque是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。其操作示意图如下:相比于vector,deque没有容量的概念,因为它是动态的以分段连续空间组合而成,随时可以增加一段新的空间并链接起来,换句话说,像 vector 那样,”旧空间不足而重新配置一块更大空间,然后复制元素,再释放旧空间”这样的事情在 deque ...

2020-04-11 22:08:11 1647 1

原创 c++ stack(栈)的使用指南

栈的内容不多,使用也相对简单,只需要遵守一个原则,就是先进后出。最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。使用STL的stack需要include一个头文件<stack>容器适配器:首先我们要明白stack其实是一种容器适配器,它和容器是不一样的。像vector,deque这种称为容器,而容器适配器只是提供了相关接口,内部使用的还是别...

2020-04-10 22:00:39 1555 1

原创 python处理txt文件的常用操作

1.打开文件#方法1,这种方式使用后需要关闭文件f = open("data.txt","r")f.close()#方法2,使用文件后自动关闭文件with open('data.txt',"r") as f: 打开文件的模式主要有,r、w、a、r+、w+、a+r:以读方式打开文件,可读取文件信息。w:以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新...

2020-04-07 22:06:59 43784 27

原创 二叉树的Morris遍历——传说中的神级遍历算法

常用的二叉树遍历主要分为深度优先遍历(dfs)和广度优先遍历(bfs),其中dfs又有前序、中序、后序遍历之分。然而不管你用迭代还是递归的方法实现,它们的空间复杂度都为O(N)。而本文介绍的Morris算法,只需O(1)的空间复杂度,本质上是使用时间换取空间的一种方法。假设我们要遍历如下二叉树: 如果采用中序遍历,那么遍历顺序应该为1 2 3 4 5 6 7 8 9 10,...

2020-04-06 22:10:04 501 1

原创 光谱与色度图的映射

颜色不是电磁辐射的特性,而是观察者的主观感知。当光与物体相互作用,相互作用的光通过波长相关的吸收、反射或折射改变其光谱时,就会观察到颜色。物体的颜色取决于光源的类型,下图显示了三种不同的白光光源光谱,通常用于实验或我们的日常生活:三色荧光灯(固体)、白炽灯(点)和白光-emitt 二极管(LED)(虚线)。反射光与人眼相互作用,人眼在锥细胞的帮助下感知颜色-光感受器。 ...

2020-04-04 17:45:24 4205

原创 光度计量随笔

1.光学计量简介光学计量测试包括的范围相当广泛,目前国家已在许多方面建立了计量标准和测试手段。主要包括:光度、光谱光度、色度、辐射度、激光参数、光学材料参数、光学薄膜参数、成像光学、微光像增强器及夜视仪器参数、光纤和光通信函数、光电子器件参数等计量测试。2.辐射度计量简介辐射度计量测试的主要任务是在整个光谱范围内进行辐射能量和辐射功率的测量。在光辐射计量中,不再包含人的视觉因素影响而是...

2020-04-02 16:32:05 1158 1

转载 CIE色度图

色度图是黑体轨迹的函数表达式v=f(u)在色度学中以色度坐标表示的平面图。而黑体不同温度的光色变化在色度图上又形成了一个弧形轨迹这个轨迹叫做普朗克轨迹或黑体轨迹。色度学系统的应用随着人们交流、传输、研究颜色信息的需要已经建立了多种各具特色的表色系统本研究采用了CIE1931标准色度学系统和CIE1976均匀色空间。从380nm到780nm的光谱色在CIE 1931 RGB色度图上的轨迹长这样:...

2020-04-02 13:54:34 20439 4

原创 有趣的约瑟夫问题

据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因...

2020-04-01 22:17:06 353 1

原创 otsu阈值分割原理及实现

OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法,是一种自适应的阈值确定的方法,又称大津阈值分割法。OTSU算法利用阈值将图像分为前景后背景两部分,使前景与背景之间的方差最大。记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。 则图像的总平均灰度为:u=w0*u0+w1*u1。 前景和背景图象...

2020-03-22 21:48:25 7952 7

原创 只是一篇超详细的c++ set用法总结罢了

set是STL中一种标准关联容器,它底层使用平衡的搜索树——红黑树实现。使用时需要包含头文件<set>。set在插入数据时会自动对数据进行排序,set中的元素不能重复,与此相对应的multiset中的元素可用重复。不能通过set的迭代器改变元素值,也不能通过[ ]的方式访问元素,其迭代器没有+1,-1的操作,。myset.begin()//指向myset第一个元素的迭代器...

2020-03-22 14:16:49 3383 4

转载 【C++】gcd函数的写法

gcd函数简介大公因数(英语:highest common factor,hcf)也称最大公约数(英语:greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大正整数。而多个整数不能都为零。例如8和12的最大公因数为4。求两个整数最大公约数主要的方法:1.穷举法:分别列出两整数的所有约数,并找出最大的公约数。2.素因数分解:分别列出两数的素因数分解式,...

2020-03-21 10:57:51 42584 5

原创 c++ nth_element用法

nth_element实际上就是快速选择算法的实现,快速选择算法实现原理具体见这里。void nth_element (Iterator first, Iterator first+nth, Iterator last, Compare comp);重新排列range[first,last)中的元素,使第n个位置的元素是按排序顺序在该位置的元素。其他元素没有任何特定的顺序,只是第n个元...

2020-03-20 11:41:00 3156

原创 回溯与递归的区别

递归算法是为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来定义自己的方法,称为递归定义。比如最出名的一个问题,求斐波那契数列的第i位,如果用递归算法做,就需要不断递归得到前两位的值。而回溯算法的本质是为了得到可能存在的所有情况,当一个分支走到底之后,就返回顶点继续遍历下一个分支。在这个返回顶点的过程,就需要不断调用自身函数,这里的调...

2020-03-15 15:42:17 1747 2

原创 三道题弄懂回溯算法

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 “回溯” 返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点”。回溯算法的基本思想是:从一条路往前走,能进则进,不...

2020-03-14 22:29:53 338 2

原创 摩尔(Boyer-Moore)投票法

该算法用来寻找一个数组中出现次数超过1/k的元素,易得满足要求的元素最多有k-1个。摩尔投票法分为两个阶段:抵消阶段和计数阶段。抵消阶段:两个不同投票进行对坑,并且同时抵消掉各一张票,如果两个投票相同,则累加可抵消的次数;计数阶段:在抵消阶段最后得到的抵消计数只要不为0,那这个候选人是有可能超过一半的票数的,为了验证,则需要遍历一次,统计票数,才可确定。我们通过下面两道题来深入理解这个...

2020-03-11 21:46:51 1043

原创 matplotlib.pyplot超详细入门总结

目录pyplot简介格式化绘图样式图片大小设置与保存刻度设置用关键字字符串绘图用分类变量绘图使用文本&绘制直方图注释文字绘制散点图绘制条形图对数轴和其他非线性轴pyplot简介matplotlib.pyplot是使matplotlib像MATLAB一样工作的命令样式函数的集合。每个pyplot功能都会对图形进行一些更改:例如,创建图形,...

2020-03-10 11:48:44 13912 8

原创 python 随机函数总结

1.random使用时需要import random。random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。 random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限。 rand...

2020-03-09 10:28:26 654 3

原创 leetcode179场周赛

第一次周赛,打酱油了。5352. 生成每种字符都是奇数个的字符串给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。示例 1:输入:n = 4输出:"pppz"解释:"pppz" 是一个满足题目要求的字符串,因为 'p' 出现 3 ...

2020-03-09 09:42:39 299

原创 numpy数组使用总结

1.数组的创建:a = np.array([1,2,3,4,5])b = np.array(range(5)) #b=[0,1,2,3,4]b = np.array(range(1,5,2)) #1到5(不包括5),跨度为2,b=[1,3]c = np.arange(5) #c=[0,1,2,3,4]c = np.arange(5,1,-1) #5到1(不包括1),跨度为-1,c=[...

2020-03-02 09:43:33 916

原创 BFPRT算法(TOP-K问题)

这个算法第一次我是在sift源码里面看见的,之前一直不知道叫什么名字,知道无意间看到一篇博客,才发现了BFPRT的大名。这个名字就挺奇怪的,那是因为该算法由Blum、Floyd、Pratt、Rivest、Tarjan提出,所以就叫BFPRT。。。此算法可以用来求元素中第k大(或小)的值或是前k大(或小)的值。个人感觉它是对快速选择算法的一种改进,快速选择算法又是基于快速排序的思想。因此本文从快...

2020-03-02 09:37:20 892 3

原创 c++ sort与stable_sort的区别与自定义排序的使用

sort的实现是基于快速排序的,快速排序在比较算法中算是速度最快的,平均的时间复杂度为O(nlogn),虽然它的最差时间复杂度可能达到O(n2)。stable_sort的实现是基于归并排序的,它的时间复杂度为O(nlogn),一般情况下,它比快速排序稍慢。但是它是一种稳定排序,所谓稳定排序,就是说相同大小的元素,在排序前后的相对位置不会发生改变。即相同大小的元素中,原来在前的元素,排序之后还是...

2020-02-28 12:16:23 2074

原创 c++大小写字符、数字的判断及转换函数

1.isalpha(),用来判断一个字符是否为字母,如果是字符则返回非零,否则返回零。2.isalnum(),用来判断一个字符是否为数字或者字母,也就是说判断一个字符是否属于a~z||A~Z||0~9。是返回非零,不是返回0。3.islower(),用来判断一个字符是否为小写字母,也就是是否属于a~z。是返回非零,不是返回0。4.isupper(),用来判断一个字符是否为大写字母。是...

2020-02-24 21:06:41 18077 3

原创 c++中int与char,string的相互转换

1.ASCLL表图中包含的可显示字符不一定全,比如在vs2017中,ASCLL码为1的字符也是可以打印的(意外发现)。这里我们主要关注的是0-9对应的ASCLL码值为48-57.2.char转int在char类型字符相减时,结果会自动转为int型:char a = '1';cout << typeid(a - '0').name() << end...

2020-02-23 21:16:46 1822

转载 c++中map和unordered_map的差别和使用

需要引入的头文件不同map: #include < map >unordered_map: #include < unordered_map >内部实现机理不同map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元...

2020-02-22 18:15:27 267

原创 c++ string超详细总结

构造函数:string s1(""); // si = ""string s2("Hello"); // s2 = "Hello"string s3(4, 'K'); // s3 = "KKKK"string s4("12345", 1, 3); //s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串赋值:string s1;s1...

2020-02-22 14:46:51 2378 8

原创 c++ 使用map导致死循环的坑

(1)leetcode里1346题给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。更正式地,检查是否存在两个下标 i 和 j 满足:i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j]class Solution {public: bool ...

2020-02-21 22:08:58 1664

原创 tensorflow学习笔记——常用的激活函数

1.sigmoid公式:图像:从图中可以看到,sigmoid激活函数会将所有输入都转到0-1范围内。如此之外,它的倒数有一个常用到的性质:即它的倒数可由自身表示。优点:它输出映射在0-1内,单调连续,可以用来作分类,并且求导比较容易; 缺点:具有软饱和性,一旦输入过大或过小,一阶导数就变得接近于0,很容易产生梯度消失的现象。tesorflow使用:tf.sig...

2020-02-16 18:04:28 1930 4

原创 c++ STL map使用详细总结

对组对组(pair)是将两个值合成一个值,这两个值可以具有不同的数据类型,可以分别pair的两个公有函数first和second访问。类模板:template<class T1,class T2>struct pair.对组的创建有三种方法:pair<string,int>pair1(string("name"),20);pair<string,i...

2020-02-15 11:29:35 2132 6

原创 c++数组初始化总结

静态数组://一维数组int a[10];//定义了长度为10的数组,并未对值进行初始化int a[10]={};//定义了长度为10的数组,并将所有值初始化为0int a[10] = {1,2};//定义了长度为10的数组,前两个位置初始化值为1,2,其余位置初始化值为0//二维数组int a[10][9];//定义了10×9的数组,并未对值进行初始化int a[10][9]=...

2020-02-14 11:29:10 2206 2

原创 c++中vector[]和vecter.at()的区别

我们先定义一个数组vector<int>v(10),v[]和v.at()都可以对v中元素进行访问,一般大家使用的都是v[]这种访问方法,以至于我一度都将v.at()这种访问方式忘记了。不过这两种访问元素的方式有什么区别呢?.v[]和v.at()都可以对v中元素进行访问,并且访问的元素时都不能越界,比如a[10]或a.at(10)这样的使用会报错。区别在于,operator[]不做边...

2020-02-13 13:44:33 8816 1

原创 tensorflow学习笔记——验证码识别(四)模型测试

这里对之前训练好的模型进行测试,代码如下:import osimport tensorflow as tf from PIL import Imagefrom nets import nets_factoryimport numpy as npimport matplotlib.pyplot as plt # 不同字符数量CHAR_SET_LEN = 10# 图片高度...

2020-02-11 22:02:00 659 1

原创 tensorflow学习笔记——验证码识别(三)模型训练

我们使用的模型为Alexnet,源码在tensorflowtensorflow-master,我们提取tensorflowtensorflow-master里面的net文件夹放入我们的程序路径以便使用,并修改Alexnet模型最后一层为4个分支,来进行多任务学习。(要源码可以找我,官网下载很慢)训练模型的代码如下:import osimport tensorflow as tf fr...

2020-02-11 21:52:11 731 6

原创 tensorflow学习笔记——验证码识别(二)生成tfrecord文件

通常情况下,我们在训练模型之前会生成数据集中的train,test,val这些含有训练信息的文件。这些文件被散列的存着,它们并不是计算机能直接读取的信息,在大小网络的训练中,文件读取速度的问题尤为明显。因此在VOC2007格式的数据集制作完成后,需要将数据集转换成tfrecord文件,tfrecord文件使用于tensorflow网络模型训练的二进制数据编码文件,训练时只需一次性加载一个tfrec...

2020-02-10 21:03:55 527

原创 tensorflow学习笔记——验证码识别(一)验证码生成

首先我们需要用到验证码生成的库captchafrom captcha.image import ImageCaptcha # pip install captcha这个库大部分人都没有安装,只需在cmd下输入pip install captcha即可,anaconda用户在anaconda prompt对应环境里安装。完整代码如下:from captcha.image imp...

2020-02-10 18:04:06 506

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除