自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

测试测试

2022-07-21 18:22:53 237

原创 几种排序算法的时间复杂度和空间复杂度

参考自:https://blog.youkuaiyun.com/A_BlackMoon/article/details/81064712快速排序最好的情况下:每次平分子数组,时间复杂度为Nlog2N, 空间复杂度主要为递归调用的开销,为log2N快速排序最差的情况下,每次两个子数组的大小都为1,n-1,意味着退化为冒泡排序,时间复杂度为N^2,空间复杂度为N。...

2021-04-09 13:07:09 2512 1

转载 C++中空类占一字节原因详解

转载自 https://blog.youkuaiyun.com/xiong452980729/article/details/71077144

2021-04-08 14:27:04 267

原创 C++static关键字

1. static 局部变量该变量在全局数据区分配内存;其生存周期为整个程序周期,它始终驻留在全局数据区,直到程序运行结束;但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;静态局部变量在程序执行到该对象的声明处时被首次初始化,仅初始化这一次,以后的函数调用不再进行初始化,但其值可以随时修改。其初始化的时候进行了声明+定义,若在声明时未赋以初值,则系统自动赋予0值 。而对自动变量不赋初值,则其值是不定的。根据静态局部变量的特点,可以看出它是一种生存期为整个程序生命周期。

2021-04-08 14:12:23 182

原创 C++ extern关键字

一. extern 关键字利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数,1、引用同一个文件中的变量#include<stdio.h>int func();int main(){ func(); //1 printf("%d",num); //2 return 0;}int num = 3;int func(){ printf("%d\n",num);}按照这个顺序,变量 num在main函数的后边进行

2021-04-08 11:50:45 9185

原创 寻找数组中第K大的元素

https://blog.youkuaiyun.com/qq_26286193/article/details/80683004

2021-03-26 15:13:10 141

原创 快慢指针求解链表是否有环,环的入口,环的长度

https://blog.youkuaiyun.com/u011276324/article/details/53101670https://blog.youkuaiyun.com/yuiop123455/article/details/108756602

2021-03-26 15:11:19 171

原创 TCP粘包问题解决

1.1 描述背景采用TCP协议进行网络数据传送的软件设计中,普遍存在粘包问题。这主要是由于现代操作系统的网络传输机制所产生的。我们知道,网络通信采用的套接字(socket)技术,其实现实际是由系统内核提供一片连续缓存(流缓冲)来实现应用层程序与网卡接口之间的中转功能。多个数据包被连续存储于连续的缓存中,在对数据包进行读取时由于无法确定发生方的发送边界,而采用某一估测值大小来进行数据读出,若双方的size不一致时就会使数据包的边界发生错位,导致读出错误的数据分包,进而曲解原始数据含义。2.1 设计

2021-03-26 12:02:05 194

原创 算法题:大数据查找

1. 查找两个大文件中的相同IP题目描述:给定a、b两个文件,各存放50亿个url,每个url各占64B,内存限制是4GB,请找出a、b两个文件共同的url分析:由于每个url需要占64B,所以50亿个url占用空间大小为50亿×64=5GB×64=320GB.由于内存大小只有4GB,因此不可能一次性把所有的url加载到内存中处理。对于这种题目,一般采用分治法:即把一个文件中的url按照某一特征分成多个文件,使得每个文件的内容都小于4GB,这样就可以把这个文件一次性读入到内存中进行处理。解答:

2021-03-26 11:43:05 2592

原创 算法题:旋转数组求最小值

思路: 这个问题的中心思想其实就是使用二分查找的方法,逐步的逼近这个最小值,首先这个旋转数组将一个非递减的数组分成了两个子数组,前一个数组的值都比后一个数组的值大,并且两个子数组都是非递减的数组,而且我们可以知道这个最小值肯定是在前一个数组和后一个数组的交界出。也就是后一个数组的第一个值。采用二分法解答这个问题mid = low + (high - low)/2;//首先说下不要使用(low + high)/2这种方式去求数组的中间位置,可能会造成溢出,可以使用我现在用的这种也可以使用以

2021-03-26 11:26:20 270

原创 算法题:50个人至少有两个人生日相同的概率

/*** 求50个人中至少有两个生日相同的概率*思路:先求出50个人中生日都不相同的概率,然后再用1减去即可得到结果*/void main(String[] args) { double a = 50; double c = 365; double sumA = 1; for (int i=0;i<a;i++) { b = b-1; sumA *= b; } double sumB = Math.pow(c, a); double tt = sumA/sumB; do

2021-03-26 10:53:50 3044

原创 C++ 变量的存储位置、作用域和生存周期

1. C语言中内存的分布:C语言在内存中一共分为如下几个区域,分别是:栈区(stack): 由编译器自动分配、释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。全局区(静态区):存储全局变量和静态变量,初始化的全局变量和静态变量在一块区域(RW), 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(ZI)。 - 程序结束后有系统释放文字常量区 :常量字符串就是放在这里的。 程

2021-03-24 11:05:41 435

原创 指针和引用的区别

1. 代码层面上:1.1 指针:指针p是一个对象,它同样有地址&p和存储的值p。只不过p存储的数据类型是地址。如果我们要以p中存储的数据为地址,来访问对象的值,则要在p前加操作符"*",即(*p)。1.2 引用int m; int &n = m; n 相当于 m 的别名(绰号),对 n 的任何操作就是对m的操作。所以 n 既不是m的拷贝,也不是指向 m 的指针,其实n就是 m 它自己。引用的规则:(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。(2

2021-03-23 23:59:21 184

原创 虚函数

看准到底是那个类的对象,有没有函数重写。class A{public: virtual void print() { cout <<"A" << endl; }};class B: public A{public: void print() { cout << "B" << endl; }};int main(){ B b; A& pt

2021-03-19 17:07:21 117

原创 C++继承和派生

一. 继承和派生概述继承和派生其实就是:继承父类的成员方法和成员变量;派生自己的成员方法和成员变量。class 派生类:继承方式1 父类名1,继承方式2,父类名2……{public: 构造函数() ~析构函数()}注意:每一个继承方式只对紧跟其后的那一个基类有用。默认情况下派生类中包含了基类中除了构造函数和析构函数之外的全部成员变量和方法。派生类中对不同属性的基类成员的访问权限不一样二. protected属性protected成员的特点:在基类中,它与priva

2021-03-19 15:02:08 149

原创 C++ 封装

一般电脑都是由CPU、内存、主板、硬盘等部件组合组成但是我们组装电脑的时候,仅仅是把硬盘、内存、CPU、主板等这些部件的接口相互连接起来就行,我们不会去关注硬盘、CPU、主板等他们的内部是怎么实现的,组装电脑并不需要去了解学习硬盘的设计、主板的设计,直接用他们的接口就行,这就是封装一个生活中的例子。在C++中,类封装通常分为下边两个部分-类的实现细节-类的使用方式-使用类时,不需要关心类的实现细节-创建类时,才需要考虑其内部实现细节通过封装,决定类的哪些属性对外公开,哪些属性不对外公开,既可

2021-03-18 22:11:44 361

原创 etc —— (1)

1. 线程是否有自己独立的地址空间?线程不拥有系统资源,地址空间是按进程分配的,但在地址空间里有专属于线程的线程栈。地址空间是系统给进程分配的虚拟内存。线程栈是线程自己独有的,其余是共享的,他们在虚拟内存里。2.在多核CPU上,对于耗时长的任务,为什么多线程可以缩短耗时:1、多线程在单核和多核CPU上的执行:多线程在单cpu中其实也是顺序执行的,单核CPU时使用多线程,通常是有线程要处于等待状态。2、为什么有时候线程数超过CPU内核数会更快呢?原因是这种程序的单个线程运算量不足以占满CPU一个

2021-03-18 19:50:47 283

原创 友元函数和友元类

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的公有接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。一. 友元函数在定义一个类的时候,可以把一些函数声明为“友元”,这样那些函数就成为该类的友元函数。友元函数是在类中用关键字friend修饰的非成员函数,可以是一个普通的函数,或是其它类的成员函数。它不是本类的成员函数,却在它的函数体中却可以访问类的私有成员和保护成员。将全局函数声明为友元的写法如下:fri

2021-03-18 13:28:08 756

原创 Linux 学习笔记 (8) —— tty,ulimit -a

1. tty 命令:查看当前命令所处的终端——tty:2. ulimit -a 命令:查看内核规定的可以使用的各个资源上限—— ulimit -a图中显示:open file 数最多为1024,可通过提示修改:ulimit -n 1100

2021-02-22 20:35:03 202

原创 Linux 学习笔记 (7) —— rm, mv

1. rm 命令:删除文件/目录Linux rm (英文全拼:remove),命令用于删除一个文件或者目录。rm [options] name...实例:删除文件可以直接使用 rm 命令,若删除目录则必须配合选项"-r",例如:rm test.txt //删除 一般文件 "test.txt"rm homework //无法删除目录"homework": 是一个目录 rm -r homework //删除 目录 "homework"? y 2、mv 命令:移动/改

2021-02-22 10:56:32 227

原创 C语言的 a, *a, &a

1. 存储单元:存储单元一般应具有存储数据和读写数据的功能,以8位(bit) 二进制作为一个存储单元,也就是一个字节。一个变量代表了一个存储单元,其中的值是可变的,故称为变量。变量有三个要素是:变量名、变量类型、变量值。int a = 10;变量 a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。2. 操作

2021-02-21 16:16:34 8388

原创 Linux 学习笔记 (6) —— source命令

1、source 命令的功能source filename # filename必须是可执行的脚本文件或者. filename # 注意“.”号后面还有一个空格通知 当前shell 读入路径为filename的文件,并依次执行文件中的所有语句。通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如“source /etc/profile”。

2021-02-20 08:45:55 1607

原创 Linux学习笔记 (5)

1、etc 文件夹下放什么内容etc 在法语中是“等等”的意思。UNIX/Linux 系统下的 etc 文件夹主要存放一些系统的配置文件。2、pwd 命令print working directory :现实目前所在的工作目录的绝对路径。3、echo 命令echo命令后面跟上要输出的文本。4、export 命令export 命令用于设置或显示环境变量。在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。# exp

2021-02-19 16:47:46 164

原创 Linux 学习笔记 (4)——shell

1、什么是shellLinux严格意义上是一个操作系统,我们称为核内核,但我们一般的用户是不能直接使用内核的,而是通过外壳程序——也就是shell。对比Windows,图形界面就是外壳程序。Linux,shell就是外壳程序。shell充当一个桥梁:a.将使⽤者的命令翻译给核⼼(kernel)处理。b. 同时,将核⼼的处理结果翻译给使⽤者。1> 简单讲,其实shell就是逐条执行命令,在终端执行的命令都是一条一条敲上去,再执行的,shell脚本就是事先写很多命令,然后执行脚本,让she

2021-02-19 16:35:42 241

原创 linux学习笔记(3)——ll命令详解

**ll 是 ls-s 的别名,意思为:罗列出当前文件或目录的详细信息,含有时间、读写权限、大小、时间等信息 **drwxr-xr-x 2 root root 48 2013-11-27 16:34 test/第一个栏位,表示文件的属性。Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。这里有十个格子可以添(具体程序实现时,实际上是十个bit位)。第一个字母表示文件类型, ”-”,普通文件. ”d”目录,字母”d”,是dirtectory(目

2021-02-17 15:55:54 4730

原创 #ifdef, #endif, #ifndef

ifdef, endif一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,有时希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句,这就是“条件编译”。条件编译命令最常见的形式为:#ifdef 标识符 程序段1 #else 程序段2 #endif它的作用是:当标识符已经被定义过**(一般是用#define命令定义)**,则对程序段1进行编译,否则编译程序段2。其中#else部分也可以没有,即:#ifdef 程序段1

2021-02-17 12:06:54 631

原创 Linux 学习笔记 (2)

1、ubuntu下wine的基本介绍Wine(“Wine Is Not an Emulator”)是一个兼容层,能够在几个POSIX兼容的操作系统上运行Windows应用程序,如Linux、MaOS、BSD。WIne 代替虚拟机或仿真器的内部Windows逻辑,FILE立即将Windows API调用转换为POSIX调用,消除了其他方法的性能和内存损失,并允许您将Windows应用程序干净地集成到桌面中。简单地说,就是wine能够使windows的程序在linux上运行,包括ubuntu, debai

2021-02-15 10:56:12 440

原创 Linux 学习笔记 (1)

一、sudo命令sudo 是系统管理员允许普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户

2021-02-11 09:57:34 112

转载 Python学习笔记(二)——enumerate()函数

描述:enumerate() 函数可将一个可遍历的数据对象(如列表、元组或字符串),组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。实例:普通for循环:>>> i = 0>>> seq = ['one', 'two', 'three']>>> for element in seq:... print i, seq[i]... i +=1... 0 one1 two2 threee

2021-01-29 16:50:36 127

原创 PyTorch学习笔记(二)——torch.nn解析

PyTorch提供了方便漂亮的类和模块,来帮助我们创建和训练神经网络,例如 torch.nn, torch.optim 等。为了更好地理解这些模块的功能和原理,我们在手动搭建的神经网络上,逐步添加这些模块,以显示每部分模块的功能,以及每部分是如何让代码更加灵活简洁的。1、手动搭建神经网络使用MNIST数据集,该数据集共有50000个图片,每一图片大小为2828,储存在长度为2828=784的扁平行。#定义权重和偏执值,需要requires_grad=True,以便自动计算梯度,完成反馈weight

2021-01-27 21:29:14 3055

原创 Python学习笔记(一)——super()函数

super()函数是用来调用父类的方法。其用法分为两步:1、找到父类;2、调用父类对应的方法。实例1:class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print ('Parent') def bar(self,message): print ("%s from Parent" % message) class Fo

2021-01-26 20:28:04 140

原创 Pytorch学习笔记(一)——自动求导和叶子节点

一、什么是叶子节点PyTorch中的张量tensor有一个属性是is_leaf,当is_leaf为True时,改tensor是叶子张量,也叫叶子节点。二、叶子节点的作用PyTorch有自动求导的功能,当requires_grad=True时,PyTorch会自动记录运算过程,缓存运算中的中间参数,为自动求导做准备。但是只有is_leaf=True和requires_grad=True同时满足时,才可以获得该节点的导数值。三、什么样的节点为叶子节点按照惯例:1、所有requires_grad为

2021-01-26 16:24:08 3242 1

转载 解决An HTTP error occurred when trying to retrieve this URL. HTTP errors are often intermittent......

参考文章https://blog.youkuaiyun.com/gyyu32g/article/details/104611322

2021-01-22 16:18:20 2020 1

原创 np.array()

1.np.array构造函数np.array([1,2,3,4,5]) ///一维数组np.array([1,2,3],[2,3,4])///二维数组1.1 numpy array 和 python list 有什么区别?Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。1.2 如何强制生成一个 float 类型的数组

2020-12-19 15:14:15 9217 1

转载 np.dot()

np.dot()函数主要有两个功能,向量点积和矩阵乘法1. np.dot(a, b), 其中a为一维的向量,b为一维的向量,a和b都是np.array类型的, 此时因为是一维的所以是向量点积。import numpy as npa = np.array([1, 2, 3, 4, 5])b = np.array([6, 7, 8, 9, 10])print(np.dot(a, b))output:1302. np.dot(a, b), 其中a为二维矩阵,b为一维向量,这时b会被当做一维矩阵

2020-12-16 19:18:35 418

原创 numpy中的np.random用法

一、np.random.rand():生成指定维度的[0,1)间的随机数np.random.rand(4,3);///生成4行3列的数组,数组中内一个元素都是[0,1)间的随机数二、np.random.random():生成指定维度的[0,1)间的随机数np.random.random([4,3]);///生成4行3列的数组,数组中内一个元素都是[0,1)间的随机数,等同于np.random.rand();三、np.random.randn():生成的随机数服从正态分布np.random.ra

2020-12-16 19:00:58 19034 1

原创 SVM支持向量机白板推导

一、 hard_margin SVM二、 soft_margin SVM三、 核方法本文非原创,为看讲解视频的笔记。原视频链接为https://www.bilibili.com/video/BV1aE411o7qd?p=36

2020-12-14 17:11:57 182

原创 数组名和数组首地址

常规而言,数组名就是数组的首地址。int a[10] = {1,2,3,4};上面定义一个int型数组,数组长度为十。a是一个int 型常量指针,其存储的值就是数组的首地址。#include <stdio.h>int a[2] = {1,2};int main(){ printf("a = %p\n", a); // I printf("&a = %p\n", &a); // II printf("a + 1 = %p\n", a + 1);// III p

2020-11-12 14:32:38 7866 1

原创 指定二维vector大小

在对二维vector如 vector< <vector> vec用push_back存放数据时,如vec[i].push_back()会出现下标越界。如何解决呢,可以先定义二维vector的大小vector<vector<double>> gFeature;vector<double> t(600);gFeature.resize(50, t);...

2020-11-11 17:17:52 1494

原创 For循环重定义问题

在for循环中定义一个变量 aa,是会重义9次,还是只会定义1次呢?变量声明了9次。但不会出现重复声明的错误,超出作用域{}后,该变量销毁,再次进入{}后,重声明一个变量。以动态的观点去看,就能理解,没有重复声明。即每次进入循环,定义变量aa,结束本次循环的时候,aa就出了作用域了,也就是销毁了...

2020-11-11 16:46:35 1652

空空如也

空空如也

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

TA关注的人

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