自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

August的博客

记录学习历程

  • 博客(23)
  • 收藏
  • 关注

原创 让我再学废一次并查集

​  本文代码来自于第399题力扣题解,在这里利用图解的形式再现一次解题思路以及巩固一下并查集的相关知识。​  这道题目用到了并查集的相关知识,关于并查集的内容,在之前的博客中有所提及,参考并查集,你学废了吗。​  回归这道题本身,变量与变量之间存在倍数关系,变量与变量之间的倍数关系具有传递性,处理有传递性关系的问题,采用并查集的方法来进行处理,而对于变量之间的倍数关系,在并查集的合并与查询的操作来进行维护。  以示例1为例,说明求解过程。整个算法的过程分为三个过程:1.初始化并查集(初始化根节点

2021-01-07 10:12:52 174

原创 tensorflow2.0下解决下载cifar10数据集超时的问题

问题描述:从官网下载cifar数据集会出现超时问题解决方案:①先在网站下载好数据集,网址https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz②下载好的数据集名称为cifar-10-python.tar.gz,将名称改为cifar-10-batches-py.tar.gz,剪切至C:\Users\94077\.keras\datasets路径下③在此运行程序,将会打印出数据集信息,说明数据导入成功。...

2020-12-03 16:42:08 440

原创 C++实现二叉树的四种遍历方式(建议背诵)

1.前序遍历(先序遍历)  二叉树的前序遍历按照根->左子树->右子树的顺序进行遍历。实现二叉树的前序遍历有递归和非递归版本的实现方法。前序遍历结果:ABDGHCEIFstruct TreeNode{ int val; TreeNode*left; TreeNode*right; TreeNode(int x):val(x),left(NULL),right(NULL){}};//前序遍历递归版本class Solution {public: void preor

2020-10-27 16:48:43 2139

原创 2020-10-24

假装发了博客~

2020-10-24 19:59:56 87

原创 并查集(Union-Find),你学废了吗?

  并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。直接用一个实例来说明并查集相关的操作。  有如下图的结构,要判断图中是否有连通环的存在。  现在选取几条边,如下图红线所示,红线连接的两个数据之间可以建立树结构,因此选取这三条边之后可以画出两棵树结构,并将这两棵树的根节点合并,形成一棵树。我们可以注意到,此时1和3已经在此集合中且相关联,如果此时我们寻找2-4这条边,发现2和4的根节点都是3,说明他们两在同一个集合中,因此可以构成环。算法步骤

2020-06-08 17:50:19 326

原创 逻辑运算符的短路特性

  对于逻辑运算符&&和||都不陌生,但是利用其短路特性可以作为执行语句的约束条件。以&&为例,对于A&&B这个表达式,如果A表达式返回False,那么A&&B已经确定为False,那么此时不会再去执行表达式B。同理,对于逻辑运算符||,对于表达式A||B,如果A表达式返回True,那么A||B已经确定为True,此时不会再去执行表达式B。利用这一特性,可以作为一个条件约束,代替if、while等语句。  下面的例题就很好的说明了这一点,题目

2020-06-02 10:28:27 1806

原创 详细的频域滤波学习笔记(5)--常见的频域滤波器

1.频域滤波的一般步骤  基本的滤波公式有如下形式:其中F(x,y)是输入图像f(x,y)的DFT,H(u,v)是滤波函数(也成为滤波器,或者滤波传递函数),g(x,y)是滤波后的输出图像,它是由前两者乘积的IDFT得到的。  频域滤波的步骤可以总结为以下几点:①给定一幅大小为M✖N的输入图像f(x,y),选择填充参数P、Q。一般选择P=2M和Q=2N。②对f(x,y)添加必要数量的0,形成大小为P✖Q的填充后的图像fp(x,y)。③用(-1)x+y乘以fp(x,y)移到其变换的中心。④计算

2020-06-01 16:51:41 13514

原创 详细的频域滤波学习笔记(4)--基2时间抽取FFT

  对于N个数,直接进行DFT计算时需要N2次复数乘法,以及N(N-1)次复数加法,这使得计算效率非常低下,这里介绍一种提高计算效率的算法,即基于时间抽取的快速傅里叶变换。1.算法原理  设输入序列长度为N=2M(M为整数),将该序列按照时间顺序的奇偶分解为越来越短的子序列,称为基2按时间抽取的FFT算法。也成为Coolkey-Tukey算法。其中即2表示:N=2M,M为整数。若不满足这个条件,可以认为地加上若干零值(加零补长)使其达到N=2m。2.算法步骤①分组,变量置换  先将x(n)按n地

2020-05-28 22:24:18 5383 1

原创 详细的频域滤波学习笔记(3)--二维离散傅里叶变换

  前面提到了单变量的离散傅里叶变换,但是对于图像来说,是一个二维的坐标系,因此在对图像进行傅里叶变换时,对其进行的是二维的离散傅里叶变换,与一维DFT类似,给出二维的DFT的公式:其中,f(x,y)是大小为M*N的数字图像。与一维的情况一样,上述公式必须对离散变量u和v在u=1,2,3…M-1和v=1,2,3…N-1范围内求值。由给出的F(u,v),我们可以使用傅里叶反变换得到f(x,y),...

2020-04-22 19:34:35 913

原创 C++中如何获取一个二维数组的行和列

对于type Arr[][]形式的二维数组(其他形式的不适用,会出错),C++没有给出其行和列的接口函数,我们可以通过sizeof来求得行和列数sizeof(Arr[0][0])//一个元素占用的空间,sizeof(Arr[0])//一行元素占用的空间,sizeof(Arr)//整个数组占用的空间int size=sizeof(Arr)/sizeof(Arr[0][0]);//数组元素总...

2020-04-22 19:05:16 5566

原创 详细的频域滤波学习笔记(2)--单变量的离散傅里叶变换(DFT)

1.单变量的离散傅里叶变换这里直接给出一维离散傅里叶变换的公式,如下:由欧拉公式可以进一步变形,得到以下形式,方便编写程序单变量的莉萨伏立叶变换相对简单,为了更好地理解其含义,这里给出一个例子,相信看完这个例子,就会明白整个计算过程到底是怎么回事。贴上实现代码...

2020-04-21 11:15:30 590

原创 你所不知道的python生成器

协程(协同程序)与子例程  一个程序一般都是从函数的第一行代码开始执行的,结束于return语句、异常或者函数的结束。一旦函数将控制权交给调用者,就意味着全部结束。函数中做的所有工作以及保存在局部变量中的数据将丢失。对于在计算机编程中所讨论的函数,这是很标准的流程。这样的函数只能返回一个值,不过,有时可以创建能产生一个序列的函数还是有帮助的。要做到这一点,这种函数需要能够“保存自己的工作”。能够...

2020-04-18 20:56:46 320

原创 详细的频域滤波学习笔记(1)--基础概念介绍

滤波器:抑制或最小化某些频率的波或振荡的装置或材料。频率:自变量单位变化期间,一个周期函数重复相同值序列的次数1. 背景  傅里叶指出,任何一个周期函数都可以表示为不同频率的正弦和/或余弦项乘以不同系数(现在称该和为傅里叶级数)2.基本概念2.1复数  复数C的定义如下:               C=R + jI其中,R和I是实数,j是一个等于-1的平方根的虚数,即j=−1\s...

2020-04-17 15:57:04 1067

原创 通俗易懂的python魔法方法

  python的魔法方法类似于C++中的重载,在python中采用双下划线包围函数名的方法来实现对已有函数的重写,实现开发者想要的功能。python的魔法方法很多,这里直接可以参考https://fishc.com.cn/thread-48793-1-2.html总结的非常全面,这里不一一介绍。这篇博客主要是记录我学习过程遇到的问题,在这里总结一下__str__和__repr__两者的区别和联系...

2020-04-08 20:52:22 358

原创 C++complex复数类

  复数是形如a+bi的数,复数由实部和虚部构成,在C++的模板库中由complex类,可以直接调用,包含在complex头文件中。

2020-03-31 20:21:40 9406

原创 Python文件操作之os模块

  Python中关于文件操作有两个模块,os模块和os.path模块,其中os模块是关于文件/目录常用的函数使用方法,os.path模块中是关于路径的一些常用函数,下面一一介绍。1.os模块中关于文件/目录常用的函数使用方法getcwd() 返回当前工作目录chdir(path) 改变工作目录listdir(path='.')列举指定目录中的文件名(’.‘表示当前目录,’…'表示上一级目...

2020-03-26 19:16:26 265

原创 不得不看的博客小技巧

  在编辑文本的时候经常遇到一些问题,这里记录一下,后续有新的内用持续更新。段落首行缩进&emsp;//能缩进一个汉字&ensp;//能缩进一个英文字母字体大小与颜色修改<font color=red size=4 face="黑体">字体</font>//通过修改color,size,face的参数达到自己的目的,其中size默认为3其结果...

2020-03-26 16:29:44 164

原创 牛顿迭代法

牛顿迭代法是求解非线性方程的一种经典方法,其思想是用Taylor展开式将非线性方程转换成线性方程求解。其原理如下图所示(图片来源于东北大学数值分析mooc):对于牛顿迭代法的一种更直观的解释,其几何意义就是反复求过一点的切线,因此又被称作为切线法,其示意图如下:这里给出其算法的流程图:其流程如下:(1)选定初值x0,计算f(x0),f’(x0)(2)按照牛顿迭代公式计算新的近似值...

2020-03-19 17:21:06 5642

原创 C++内存分配方式详解

栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序...

2020-03-13 22:12:29 424

原创 Leetcode刷题笔记-1

      因为疫情没法去学校,空余时间很多,正好学习下数据结构与算法,在leetcode上看看题,记录一下学到的一些新东西。1.关于整数反转的问题,这个不难,通过取整和取余运算就可以实现颠倒代码如下:当然也有其他的版本,这只是我的想法。int reverse(int x) { long res = 0; if (x<...

2020-03-13 22:05:15 158

原创 递归思想实现汉诺塔游戏攻略

1.介绍普通的程序员使用迭代,天才程序员使用递归。什么是递归?下面这个图很形象地表现了递归思想。递归的标准定义是这样的,递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。2.举例①一个很经典的例子是用递归实现斐波拉契数列,第一项和第二项为1,后面的使用以下递推式来求取。其实现代码如下...

2020-03-11 16:55:32 447

原创 自适应阈值分割

1.原理       最简单的阈值分割即为手动设置阈值对图像进行二值化,大于设定的阈值像素值设置为255,小于设定阈值则为0.这种方法一般称为全局阈值分割,接下来想介绍的是一种局部阈值分割算法,其原理很简单,通俗地讲就是图片的每个局部都会通过处理得到一个阈值,这个区域就用这个阈值来进行分割,同理,每个区域都有不同的阈值来处理,...

2020-03-07 17:13:06 8616 9

原创 Vector数组总结

简介:Vector数组的特点:vector数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组,在数据结构中就相当于顺序储存的线性表,寻找元素非常快,但是插入元素的时间却很大(list是一个双向链表,在同一个位置插入大量的数据时速度很快,但是查找的速度就会慢很多)和普通数组一样可以通过下标索引来进行访问!与其它动态序列容器相比(deques,lists and forwar...

2020-02-19 16:58:44 5093 1

空空如也

空空如也

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

TA关注的人

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