- 博客(36)
- 收藏
- 关注
原创 go语言内容记录(一)
go中的init函数的作用是什么?为什么可以不应用包而调用包中的init函数,目的是什么? 函数外的每个语句必须以关键字开始(var,const, func), := 不能在函数外面使用 _多用于占位符,表示忽略,在go中如果定义了一个变量不适用的话,系统会进行报错处理。 go中进行初始化的几种方式; var i int//单个变量的声明var( i int j string k uint8) //多个变量的声明var i int = 7 //单个变量的初始化
2021-08-20 14:18:09
128
原创 top(k)问题
目的:求数组中第k大(小)数。方法一:使用堆排序,时间复杂度为O(nlg(k))代码可以使用优先队列进行设计。方法二:使用快速排序,利用下标index来进行判断,可以只递归一半,应为另一半必定所有的数据都小于第k大的数。代码如下:#include <iostream>#include "vector"#include "algorithm"using namespace std;int quick(vector<int>& nums, int
2020-08-22 10:15:06
215
原创 c++实现单例模式以及单例的派生类
单例模式一个类只用一个对象,如果用户创建多个对象需要返回错误,构造函数只能被访问一次,不能给用户随便访问构造函数的接口,即构造函数不能是public类型的。每个用户在不知道这个类唯一实例的情况下都可以快速访问这个对象。那么就必须有一个函数需要返回该实例,并且该函数可以不适用对象进行调用,那么该函数一定是一个static函数,由于类中的静态函数只能访问静态变量,所以实例变量也必须是一个static的。综上所述:需要一个返回实例对象的静态函数 实例类型需要时静态变量 构造函数不能时public类型
2020-08-01 11:00:38
1428
原创 字符串的排列
题意:给出一个字符串,求其全排列。注意不能有重复。比如string str = "aba"。方法:回溯,但是需要判重。方法一:该方法使用的交换字符的原理vector<string> result; bool jupdge(int begin, string s, int end){ for(; begin < end; begin++){ if(s[begin] == s[end]){ retur
2020-07-23 19:11:31
143
原创 c++中istringstream如何分割字符串
1,首先假设string str = "i am a student";字符串str必须是使用空格分开的。为了得到各个字串,可以进行按照空格的坐标进行分割,但是可以借助流进行自动分割,如下所示。istringstream input(str);string temp;while(input >> temp){ cout<<temp<<endl;}/* output:i am a
2020-07-23 14:38:52
683
原创 多线程连续打印01010101
有两个线程,一个打印0,一个打印1,让两个线程连续打印010101。一般情况下,多个线程要同时请求cpu资源,所以对打印语句加锁是不行的,因为解锁后谁也不知道哪个线程又抢到了cpu资源。分析:如果线程0打印”0“,下一步必然让线程0阻塞,并且唤醒线程1。然后线程1打印"1",之后让线程1阻塞,唤醒线程2。这样依次执行。mutex mu;condition_variable c_v;int current = 0;void fun(int id){ while(true){
2020-07-21 18:03:58
243
原创 双堆求中位数,不进行排序
求中位数其实实在维持中位数,给你一个数组vector<int> nums = {2,1,4,5},我们把小于中位数的放到一起,大于中位数的放到一起,这样中间的那个数就是中位数了.大于中位数的放到小顶堆,小于中位数的放到大顶堆 保持两个堆的大小不超过2,因为中位数两边的数肯定相等的或者一边比另一边大1,但是绝对不能大2,否者中位数就不是当前我们定义的2了 当堆大小超过1的时候,我...
2019-10-31 10:51:41
616
原创 sort函数对结构体排序以及第三个参数的理解
概念:函数指针:指向函数的指针,如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。注意这里的函数名同样是一个指针,可以当做参数被调用.仿函数:他本来不是函数,但是具有函数的性质,函数有什么性质呢? 有参...
2019-10-26 09:57:53
1331
原创 桶排序 bucket_sort
首先如果数据的大小如果不大的情况下,通排序是可以达到时间复杂度的.这完全使用空间来换时间 没有空间的话,通排序的时间复杂度取决于在各个桶内采取的排序算法的时间复杂度.eg:有数组vector<int> nums = [1,3,2,5,3,7,4,9]solution:建立一个数组,大小是nums中最大的数加1,//找到最大值auto max_value = ma...
2019-10-24 12:32:05
183
原创 优先队列priority_queue中使用pair对的方法
优先队列的格式:priority_queuq<type, container, function>; //默认的情况是priority_queue<int, vector<int>, greater<int>>,即大顶堆,排序显示的从小到大.解决问题:vector<int> nums = {1,2,3,4},vector<...
2019-10-15 09:27:04
7850
原创 水壶问题
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许: 装满任意一个水壶 清空任意一个水壶 从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous "Die Hard" example)输入...
2019-10-12 17:21:44
347
原创 完整的二分搜索
首先给出一般的二分搜索代码int binary_serach(vector<int> arr, int data){ int min = 0; int max = arr.size() - 1; int mid; while(min <= max){ mid = (min + max)/2; //这句话需要改进 ...
2019-10-10 09:15:40
111
原创 组合排列中重复数问题
在全排列问题中,有这样的一个问题,比如给你一个数组[1,2,3,4],求出他的全排列,可以有很多种方法,康拓展开是一个。但是当出现重复数字时就不好处理了,比如[1,2,1,4],在回溯的过程中,会出现相同的排列,使用两个相同的1造成的,程序的逻辑本身没有错。其实全排列就是递归树,如下所示观察发现,第二个子树刚开始能不能选1呢,答案是否定的。因为前一个1没有用,这就造成当前选1,接下来有...
2019-08-27 14:30:59
4665
原创 二叉树的节点统计
一般而言,对一个没有什么约束的二叉树进行节点的统计,都是递归int get_value(TreeNode *root){ if(!root){ return 0; } return get_value(root->left) + get_value(root->right) + 1;}统计完全二叉树的叶子节点数由于完全二叉树只有最后层...
2019-08-27 14:08:36
479
原创 大顶堆和小顶堆以及堆排序
大顶堆和小顶堆的理论是相同的,实现上就只有符号的变化。堆的含义堆是类似与完全二叉树的结构(注意可能不是满二叉树), 堆的结构是要使得每个根节点的元素大于(小与)子节点元素,左右节点是没有要求的。堆排序堆排序是分为三个步骤:调整堆,使得以当前节点为根的子树是一个大顶堆,但不保证其他节点满足。 遍历从len/2----->1的所有根节点,分别进行调整,结束后该堆满足一个大顶...
2019-08-23 18:33:46
882
原创 c++中std::move的简单理解
在程序中,经常会碰到内存的申请和释放。比如对某个对象的复制,有时是对该对象的复制,当对象所占内存空间很大时,需要新申请一个相同大小的内存空间,造成内存的浪费。这里的std::move()是完成对象的移动功能。在需要的时候可以节省很大内存。 左值和右值的区别 std::move()的使用是简单的,这里分析一下程序的内部进程。首先是理解左值和右值的区别。一般左值是一个对象,右值是对象的值。...
2019-08-09 18:52:11
4220
1
原创 探究c++中map的自动排序问题
主要目的:这里主要是用map对一个自定义的类进行排序,其实类似结构体的排序,但是这是在插入的过程中直接排序的。 map中的保存有重复的值其实是可以更改的,一切都在那个比较函数的使用//要求对下列结构体安装name,或则id进行排序,或者二分查找排序,使用upper_bound和lower_bound查找指定的name,idstruct student{ string name;...
2019-07-19 18:09:45
6300
1
原创 upper_bound和lower_bound的使用方法
1没有第四个参数的方法,vector<int> array;int a;auto result = lower_bound(array.begin(), array.end(),a);//查找第一个大于等于a的数auto result = upper_bound(array.begin(), array.end(), a);//查找第一个大于a的数。2带有第四个参...
2019-07-16 15:58:52
343
原创 康拓拓展和逆拓展解决全排列问题
在解决排列问题时,一般有以下问题:给你一个排列,问你是第几个排列 给你一个排列,问下一个排列是多少 给你一个排列,问前一个排列是多少 给你一个数i,问第i个排列是多少一般暴力的话使用递归加回溯都能解决,但是时间复杂福比较高,递归多了栈也会溢出。这里使用康拓展开的思想,具体思路。看不懂没关系,继续看就知道啦。康拓拓展假如给你一个排列[2,4,3,1],问你是第几个排列...
2019-07-16 10:20:31
200
原创 ubuntu18安装cuda10 + cudnn7 和带gpu的opencv4+ opencv_contrib-4.0.0
opencv4需要cuda10,cuda10有需要安装410以上的显卡驱动。显卡驱动:自己装吧。cuda10+cudnn7网上都是的,这个不难官网下载opencv4.0.0和opencv_contrib-4.0.0解压到指定目录中,将opencv_contrib-4.0.0解压到opencv4.0.0中,文件名不用变tar -zxvf opencv-4.0.0 -d /...
2019-07-11 17:57:58
1625
原创 leetcode 55 跳跃游戏
题目链接 跳跃游戏这个题让我明白了,算法题直接暴力是不行的,不要有侥幸心里。但是,当你只会暴力的时候,还是先运行出来再进行修改吧。不然好的方法是不太容易直接想出来的。方法一:暴力(这个暴力也不是很容易的,递归加回溯)思路:1 明确当前位置能否到达最后一个位置,最好的判定时 当前坐标i,对应的值nums[i] + i是改点能走到的最大坐标处,所以当nums[i] + i >= ...
2019-07-08 12:37:11
184
原创 读primer c++补充笔记
如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字 指针的类型必须与其所指对象的类型一致,但允许令一个指向常量的指针指向一个非常量对象。 指针本身是一个常量并不意味着不能通过指针修改其所指对象的值,完全取决于所指对象的类型//1int errNumb = 0;int *const curErr = &errNumb; //这时执行*...
2019-06-29 10:55:16
128
原创 c++中string的应用
定义和初始化string对象string s1 //默认初始化,s1是一个空窜string s2(s1) //s2是s1的副本string s2 = s1 //和上面的等价string s3("value") //s3是字面值"value"的副本,除了字面值最后的那个空字符串外string s4(n, 'c') //把s4初始化为由连续n个字符c组成的串直接初始化和拷贝初始化...
2019-06-26 15:55:57
400
原创 Ubuntu16.04安装搜狗输入法
这里从系统刚安装完开始,进入Ubuntu16系统,首先联网。更新一下apt源,复制源文件,作为备用,打开sources.list。cd /etc/aptcp sources.list sources.list.backupsudo vi sources.list对里面的内容进行修改。如下,可以自己选择。东北大学deb-src http://mirror.neu.edu....
2019-06-20 16:47:08
118
原创 深度可分离网络--》depthwise separable convolution
前言:这里只是对比一下深度可分离网络和标准网络的区别。传统的标准卷积,这是一步完成的。 图一(左)代表宽度和高度为,通道数为的特征图,通过个宽度和高度为的卷积核进行特征提取,这里的卷积核的...
2019-05-21 12:42:24
940
原创 python中快速计算不同坐标之间的各个点的欧氏距离,有利于K近邻的计算
初始化10个坐标,计算每个坐标与其他坐标的欧式距离import numpy as npx = np.random.rand(10,2)#计算10坐标之间的差值(欧氏距离)L = np.sum((x[:,np.newaxis,:] - x[np.newaxis,:,:]) ** 2, axis = 1)"""x[:,np.newaxis,;].shape 10,1,2x[...
2019-05-07 14:03:05
4825
1
原创 sklearn中的感知机模型perceptron
from sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import Perceptronimport numpy as np#加...
2019-04-05 09:56:00
1082
原创 qsort函数和bsearch函数的使用
bsearch函数为c中的方法,二分查找法,使用的前提是数组必须有序。qsort函数为排序函数#include "iostream"#include "cstdio"#include "cstdlib"using namespace std;int compare(const void* a, const void* b){ return *(int*)a - *(int*...
2019-04-04 21:48:19
273
原创 感知机对偶问题
遇到对偶问题呢,一定要先回归基础,不要急着去看结论:首先,咱们了解一下【对偶】的定义是什么,简单的说,就是从一个不同的角度去解答相似问题,但是问题的解是相通的,甚至是一样一样的。ok,这个很简单,定义咱们就不深究了。回到楼主的问题,先给出原始问题的形式:现在先看原始问题的解法步骤:首先,求解L(w,b)的梯度,求得如下偏导:▽L(w,b) = -▽ 其中M为误分类点集合然后,由于上...
2019-04-04 12:58:53
570
1
原创 tensorflow中训练mnist数据集---测试
先看上一篇训练mnist数据集训练测试的过程中,主要是加载模型,获取变量的过程。我们只要获取输入变量x,预测变量pred即可进行数据预测import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('./dat...
2019-03-20 11:04:21
353
原创 tensorflow中训练mnist数据集---训练
训练import numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltfrom tensorflow.examples.tutorials.mnist import input_dataprint("packs loaded")mnist = input_data.read_data_sets('./...
2019-03-20 10:46:09
167
原创 py-faster-rcnn源码解读(二)边框回归原理 Bounding Box Regression
刚开始的时候不知道anchor到底有什么用,知道对比了RCNN中边框回归才发现。先从RCNN说起一、RCNNrcnn在第一步采用SS得出了大约2000多个候选区域(region proposal),用来进行训练和边框回归。这里不在详述边框回归的原理了。具体可以看边框回归这个链接。rcnn中采用候选区域(第一个生成的)加上Ground Truth进行回归。就好比现行回归中我们输入的是一对...
2019-03-05 16:42:22
1134
原创 CNN中感受野的计算
在学习物体检测相关的论文中,很多地方提到Anchor的设计,刚开始只是明白特征图到原图的映射原理,但是并没有实际计算过。这里给出关于CNN中感受野的计算过程。 是第k层感受野 是第k层卷积核尺寸ksize 是第i层卷积的步长stride注:感受野的大小是从...
2019-03-05 16:18:28
299
原创 py-faster-rcnn源码解读(一)NMS (非极大值抑制)
目标:NMS一般用在目标检测中,用来减少候选框的个数输入数据:在边框回归中,假设得到N组边框数据,每一组是由左上角和右下角坐标以及一个置信度(代表与目标框的相识度)。还有一个阀值(当边框之间的重叠度超过这个阀值时,就舍去该边框)。算法:按照置信度递减排序 此时所有数据都没有使用过,选取相识度最高的,计算该边框与其他所有边框的重叠度,如果大于阀值(代表该边框作用不大),则舍弃该边框 ...
2019-02-26 09:51:53
1236
原创 c++中const的使用
一、定义 const,顾名思义,可以理解为常量,他的值不能被改变。所以当我们需要让某一个变量一直保持不变时(防止被篡改),就需要将该变量定义为常量。重点:const int bufsize = 512; 此处定义了常量bufsizse,所以以后就不能被改变。思考:再加上一条语句:bufsizse = 512;对不对?答案:不对,试图通过bufsize向const对象写值。因为...
2019-01-11 21:15:00
170
1
原创 linux中迭代的查询出文件夹下所有文件,文件夹
首先linux中的文件和文件夹的区别使用ls -l查询类似得出,不能查询该文件夹下的子文件夹里面的内容total 1060drwxr-xr-x 5 ypp ypp 4096 1月 9 14:19 datasets(文件夹)-rw-r--r-- 1 ypp ypp 636 1月 9 15:55 make_txt.py-rw-r--r-- 1 ypp ypp 104081 1...
2019-01-09 16:24:55
2029
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人