自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 【证明】桶排序——无序数组排序后的最大相邻差(必定在桶间,不在桶内)

问题一个无序整型数组,求出该数组排序后任意两个相邻元素的最大差值。思路1、排序后遍历时间复杂度:O(nlogn)这是最简单的方案,随便找一个时间复杂度O(nlogn)的排序算法,排好序后遍历一轮即可找到最大差值。2、计数排序时间复杂度:O(n)计数排序利用数组下标找到元素值,可把时间复杂度降到O(n)。同样是先排序,后统计找到哪两个元素在数组间空了最多空位即为最大差值。3、桶排序时间复杂度:O(n)之所以会用到桶排序,是因为计数排序有其局限性。当元素差值过大时,如1,2,1

2020-10-22 19:48:57 176

原创 【证明】桶排序时间复杂度为什么是O(n)

简介桶排序是一种O(n)时间复杂度的排序算法。算法思想桶排序算法思想:1、先求出序列的max,min,得到数值区间max-min。2、根据数值区间进行n等分,同时建立n个桶,每个桶按从小到大的顺序存放落在此区间的数字。3、接下来每个桶内进行排序:元素分配入桶后,已经得到大致的顺序了,只剩下桶内的顺序未排。4、排完序再按桶逐个输出即可。时间复杂度分析我们逐步来分析上面的每一步的耗时:1、O(n)即可得到max,min。2、O(n)即可建立n个桶并把全部元素放入桶中。3、O(n

2020-10-21 19:56:20 1408

原创 【证明】判断链表存在环——快慢指针一定能相遇

在面试题中常有这样的考察链表题目:如何判断一个链表中存在环?常见的有3个思路:1、暴力遍历时间复杂度:O(n^2)空间复杂度:O(1)双重遍历,外循环依次遍历每个结点;内循环用新指针从头遍历此结点之前的所有结点,判断是否有相同结点。2、hash存储遍历过的结点时间复杂度:O(n)空间复杂度:O(n)只需遍历一轮,每次遍历完一个结点将其加入hash_map,遍历时从hash_map中判断是否已经出现过。由于hash_map存取时间O(1),所以用牺牲空间换时间的方法可以把时间降

2020-10-21 18:57:03 1635

原创 mmap实现零拷贝

一、传统IO:read() + write()发生4次用户态和内核态的上下文切换,4次拷贝。1、用户进程通过read()方法向操作系统发起调用,此时上下文从用户态转向内核态2、DMA控制器把数据从硬盘中拷贝到内核读缓冲区3、CPU把内核读缓冲区数据拷贝到用户缓冲区,上下文从内核态转为用户态,read()返回4、用户进程通过write()方法发起调用,上下文从用户态转为内核态5、CPU将用户缓冲区中数据拷贝到socket缓冲区/内核写缓冲区6、DMA控制器把数据从socket缓冲区/内核写缓冲

2021-07-12 16:55:39 2696 1

原创 socket网络编程——读缓冲区、写缓冲区怎么区分?

一、读、写缓冲区我们使用socket进行网络通信时,通过调用socket()函数创建一个文件描述符fd进行通信。而socket所创建的文件描述符fd拥有两块内存缓冲区:读缓冲区/接收缓冲区写缓冲区/发送缓冲区二、如何区分问题是怎么记忆区分这两个缓冲区呢????️?我们举一个例子????:服务端sfd给客户端cfd发送数据。1、服务端调用write()把数据写进发送缓冲区,也就是写缓冲区了。2、内核读取写缓冲区数据后发送给客户端接收缓冲区,也就是读缓冲区了。3、客户端调用read()

2021-02-26 10:11:54 1521

原创 TCP状态转移图详解

TCP状态转移图一、三次挥手状态转移客户端SYN_SENT:调用connect()函数发送SYN请求时;ESTABLISHED:收到服务器ACK时;服务器LISTEN:调用listen()函数监听时;SYN_RCVD:回复ACK并发送SYN请求时;ESTABLISHED:收到客户端ACK时;二、数据传输双方均处于ESTABLISHED状态。三、四次挥手状态转移客户端(主动关闭方)FIN_WAIT_1:调用close()函数并发送FIN请求时;FIN_WAIT_2:收

2021-02-25 09:54:57 870

原创 TCP四次挥手为什么是四次?可以三次吗?

一、TCP三次握手、四次挥手我们先回顾TCP三次握手、四次挥手的过程。1、三次握手:Client:请求连接;Server:同意并请求连接;Client:同意。2、四次挥手:Client:请求关闭;Server:同意;【Server:…(可能在继续发未发完的数据/也可能没有)】Server:请求关闭;Client:同意。二、握手挥手间的实质与差别1、实质请求连接/关闭:是一对socket_pair的建立连接/关闭的过程。socket_pair:由一方的发送缓冲区.

2021-02-07 12:09:21 8119 2

原创 C/C++指针传参的优点

void func(int* a, struct B b, string* c);形如上式的函数,都是用的指针传参。我总结的指针传参的优点有:节约内存。指针类型大小是寻址位数大小,不需要开辟一片内存存储形参临时变量。节省copy开销。如果使用变量传参,需要将实参拷贝到形参。函数内的修改对函数外生效。作用类似引用传递。还有其他优点的话,欢迎请各位大佬补充。...

2021-02-07 10:28:58 652

原创 《Linux命令行大全》重点笔记——第四部分 编写shell脚本

《Linux命令行大全》重点笔记4第四部分 编写shell脚本第24章 编写第一个shell脚本24.1 shell脚本shell脚本:就是一个包含一系列命令的文件。shell:一个强大的命令行接口,也是脚本语言解释器。24.2 编写shell脚本三个步骤:编写脚本:常用vim。使脚本可执行:权限设置。放在shell能发现的位置:默认shell会自动寻找某些目录找可执行文件。1、脚本文件格式#!:shebang,使用脚本解释器名字。#! /bin/bash#:注

2021-02-02 10:44:42 225

原创 《Linux命令行大全》重点笔记——第三部分 常见任务和主要工具

《Linux命令行大全》重点笔记3第三部分 常见任务和主要工具第十四章 软件包管理14.2 软件包系统工具发行版本低级工具高级工具Debian类(如ubuntu)dpkgapt-get、aptitudeFedora、Red Hat、CentOSrpmyum14.3 常见软件包管理任务1、查找库中软件包Debianapt-get update; apt-cache search xxxRed Hatyum search xxx

2021-01-30 08:27:15 193

原创 《Linux命令行大全》重点笔记——第二部分 配置与环境

《Linux命令行大全》重点笔记2第二部分 配置与环境第十一章 环境11.1 检查环境1、set——显示shell变量和环境变量set | less2、printenv——只显示环境变量printenv | less:查看所有环境变量。printenv USER:查看具体某个环境变量,等价于echo $USER。11.2 建立环境1、login shell会话启动文件:/etc/profile:所有用户的全局配置脚本。~/.bash_profile:用户个人启动文件,可扩展或重

2021-01-29 08:49:41 91

原创 《Linux命令行大全》重点笔记——第一部分 学习shell

《Linux命令行大全》重点笔记第一部分 学习shell第一章 shell是什么1.3 简单命令1、date:系统时间、日期2、cal:当月日历3、df:磁盘可用空间4、free:可用内存5、exit:关闭终端会话第二章 导航2.2 简单命令1、pwd:当前工作目录(Print Working Directory)2、ls:列出当前工作目录的文件和目录​ ls -a:可以列出隐藏文件3、cd:更改工作目录绝对路径:从根目录开始写起(/)相对路径:从工作目录开始写起(./

2021-01-28 10:50:06 376

原创 【算法】动态规划——空间优化(逆序 or 顺序)

动态规划动态规划算法的策略简单来说就是空间换时间。一般我们需要开辟o(n^2)空间复杂度的辅助数组,用于存储每一个子问题的最优解。看过一些DP算法例子的同学来说,多数DP问题经常可以进行空间优化,把O(n^2) -> O(n)。问题那么问题来了,空间优化有几种情况:1、优化到O(n * 2)2、优化到O(n),顺序遍历3、优化到O(n),逆序遍历什么情况下用哪一种优化呢?方案以下方案是我个人的思考,可能有错误或缺漏,还请各位指出。一、优化到O(n * 2)此方案把本

2020-10-23 19:55:57 1656

转载 【算法】0-1背包问题

这个应该是网上讲得最仔细的0-1背包问题的动态规划算法了。大赞原博主。动态规划之01背包问题

2020-10-23 18:56:43 66

原创 python for循环中遍历2个list

我们经常有这种在一个for循环中同时遍历2个list对应元素的需求,可以通过python的内置zip函数实现。例子names = ['a', 'b', 'c']ages = ['11', '13', '12']for name, age in zip(names, ages): print(name + ': ' + age)输出a: 11b: 13c: 12...

2020-10-16 17:11:58 2515

原创 工作流:实际业务流程图

HW1请用你掌握的工具(如:流程图、泳道图等)????述一个实际的业务流程,注意????述每个活动的要素及流程结构。流程图:销售业务流程:客户????交自己的订货单给业务经理,业务经理核实订货单后填写出库单给仓库主管,仓库主管拿到出货单后根据仓库的库存数据查库存,如果库存足的话仓库主管生成发货单并发货给客户。如果缺货的话,仓库主管就会通知车间主管生产补货。仅供参考。...

2020-10-09 16:17:51 356

原创 《sql必知必会》学习笔记(七)游标

sql必知必会(七)游标第二十一课 使用游标21.1 游标游标是SELECT查询结果集,可以前进或后退行等。21.2 使用游标21.2.1 创建游标DECLARE ordernumbers CURSOR21.2.2 打开/关闭游标OPEN cursorname;CLOSE cursorname;21.2.3 使用游标数据FETCH cursorname INTO tmp;ExampleCREATE PROCEDURE processorders()BEGIN -- 定义

2020-08-21 17:10:07 121

原创 pandas loc、iloc使用区别

pandas中常用的选择数据方法有:loc:select by labelloc是根据行/列标签来进行选择的。iloc:select by positioniloc是根据索引/下标来进行选择的。例子import pandas as pdimport numpy as npdf = pd.DataFrame(np.arange(12).reshape(3, 4), index=['A', 'B', 'C'], columns=['a', 'b', 'c', 'd'])prin

2020-08-02 18:32:17 138

原创 python is、==运算符比较

python中可以用is运算符、==运算符对2个对象进行比较。它们的具体区别是:isid值是否相等/对象是否相同/地址是否相同==值是否相等

2020-08-02 17:30:04 136

原创 alexnet预训练模型百度网盘分享

从pytorch官网下载速度太慢,上传到网盘分享给大家。链接:https://pan.baidu.com/s/1SuorQroyiRK53vVBYztbPg 密码:3y1l

2020-08-02 16:45:56 1014 1

原创 python axis=0、axis=1是行还是列?

python里无论是基础的数学工具包numpy、pandas还是其他机器学习库、深度学习框架,都不可避免地会遇到选取维度运算的问题:通过axis来指定。axis = 0按行计算,得到列的性质。axis = 1按列计算,得到行的性质。以下用numpy的例子来说明一下:import numpy as npmatrix = np.arange(0, 12).reshape(3, 4)print(matrix)# [[ 0 1 2 3]# [ 4 5 6 7]# [

2020-08-02 09:34:09 16451

原创 Tensor 数组、列向量、行向量

学习神经网络的时候经常被一个概念混淆,今天终于算是进一步理解。记录一下。无论是在python里的numpy,还是各种框架里的tensor,数组就是一个数组而已,不等同于行向量或者列向量。但是它有转化成行/列向量的潜质(通过特定函数如unsqueeze增加维度)。举个例子x1 = torch.Tensor([1, 2, 3, 4, 5])x2 = torch.unsqueeze(x1, dim=1)# 打印x1,x2的sizeprint(x1.size()) # torch.Size([5]

2020-07-28 18:34:49 3727

原创 C++ int、long、double区别

int4B/32bitlong32位计算机:4B/32bit <=> int64位计算机:8B/64bit <=> long longdouble8B/64bit

2020-07-28 10:16:54 450

原创 C++ map、unordered_map、set区别

map基于红黑树/二叉搜索树BST存储内部有序查找时间复杂度O(logn)<key, value>unordered_map基于哈希表存储内部无序查找时间复杂度O(1)<key, value>set与map前3点性质<key,>

2020-07-28 08:18:14 92

原创 动手学深度学习(PyTorch)笔记二、深度学习基础——线性回归

动手学深度学习(PyTorch)代码笔记记录pytorch用于深度学习的学习过程。二、深度学习基础1、线性回归线性回归和softmax回归都是单层神经网络,用于解决回归问题。(1)基本要素1、模型定义y^=x1w1+x2w2+b\hat y = x_1w_1 + x_2w_2 + by^​=x1​w1​+x2​w2​+b2、模型训练(1)训练数据(2)损失函数L=1n∑12(y^(i)−y(i))2L = \frac 1 n\sum\frac 1 2(\hat y^{(i)} -

2020-07-23 23:42:39 241

原创 《sql必知必会》学习笔记(六)事务处理

(六)事务处理第二十课 管理事务处理20.1 事务处理事务处理,就是保证成批的SQL操作完全执行/完全不执行。事务处理相关的名词:事务(transaction):一组SQL语句。回退(rollback):撤销SQL语句。提交(commit):未存储的SQL语句结果写入数据库表。保留点(savepoint):可对保留点发起回退。注意⚠️:1、回退只能回退INSERT、UPDATE、DELETE。2、SELECT没必要回退,因为对表无影响。3、CREATE、DROP不能回退。20.

2020-07-17 09:13:02 87

原创 《sql必知必会》学习笔记(五)存储过程

SQL必知必会(五)存储过程第十九课 使用存储过程参考链接19.1 存储过程存储过程就是把多条SQL语句封装起来,完成一个事务。19.2 存储过程的优缺点优点:简单、安全、高性能缺点:可移植性差,不同DBMS语法不同。编写更复杂。19.3 创建存储过程delimiter $$; -- 语句结束符从;改变为$$CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)BEGIN DELETE FROM MATCHES

2020-07-15 21:31:16 66

原创 《sql必知必会》学习笔记(四)视图

SQL必知必会(四)视图第十八课 使用视图18.1 视图视图是虚拟的表,用于封装SELECT语句。视图和表的区别:表:包含数据。SELECT a, bFROM A, B, CWHERE A.id = B.id AND C.num = B.num AND prod_id = 'GCAN01';视图:包含查询。SELECT a, bFROM DWHERE prod_id = 'GCAN01';D是一个视图,不包含列和数据没包含的是一个查询A.id = B.id AND

2020-07-13 08:24:16 107

原创 GNU、GCC、g++、gcc之间的区别和联系

GNU:可以看作一个开源平台。里面有大量开源项目。GCC:GNU中的编译器项目。集成了多种语言的编译器,包括有gcc、g++。g++:GCC中的c++编译器。gcc:GCC中的c编译器。包含关系如下:GNU -> GCC -> g++ -> gcc以上是以我理解的最简单直接的方式给出的区别联系。...

2020-07-09 18:51:17 2926

原创 Linux FTP 425 Failed to establish connection问题解决

在ubuntu18.04下,尝试连接ftp服务器,可以用anonymous登入,但无法使用ls,会产生以下报错:ftp> ls200 PORT command successful. Consider using PASV.425 Failed to establish connection.尝试了网上很多方法,终于试出了成功的方案:ftp -p ftp.gnu.org即使用-p用被动模式连接ftp,成功登陆!(用quote PASV命令对我无效)ftp> ls227 Ent

2020-07-09 18:34:35 2735

原创 Linux命令行 gzip zip tar的区别

gzip:一般是用于单文件的压缩。zip/tar:一般是用于整个目录/多文件的压缩。

2020-07-09 11:18:56 726

原创 《sql必知必会》学习笔记(三)表

SQL必知必会(三)表第十七课 创建和操纵表17.1 创建表CREATE TABLE Products( prod_id CHAR(10) NOT NULL, vend_id CHAR(10) NOT NULL, prod_name CHAR(254) NOT NULL, prod_price DECIMAL(8,2) NOT NULL DEFAULT 1, prod_desc TEXT(1000) NOT NULL)1、NULL每一

2020-07-09 08:52:24 71

原创 《sql必知必会》学习笔记(二)插入数据

SQL必知必会(二)插入数据第十五课 插入数据15.1 数据插入15.1.1 插入完整行简易版(可移植性差)INSERT INTO CustomersVALUES('100', 'Toy', NULL);完整版(可移植性强)INSERT INTO Customers(cust_id, cust_name, cust_email)VALUES('100',

2020-07-08 01:13:57 145

原创 mac Parallels Desktop安装ubuntu教程

总结一句话:犹豫就会败北!以下具体跟大家分享一下在mac的pd上安装ubuntu虚拟机遇到的坑。1、尝试安装ubuntu16.04先是下载了ubuntu16.04,毕竟几年前用过这个版本还挺稳定的,有莫名的好感。安装的时候一步一步,直到显示安装成功,但是系统重新启动的时候出问题了。在重启界面卡死了(界面中间有ubuntu16.04字样,还有4个小点表示进度),等待很久也是一动也不动。重复安装多次一样卡在这里。2、安装ubuntu18.04我想到可能是16.04版本的问题,在mac的pd表现不

2020-07-07 10:10:02 5798 1

原创 《sql必知必会》学习笔记(一)查询数据

SQL必知必会(一)查询数据第一课 了解SQLsql是语言,mysql是DBMS/应用程序。第二课 检索数据SELECT可理解为取列。2.1 检索单个列SElECT prod_name FROM Products;2.2 检索多个列SElECT prod_id, prod_name, prod_priceFROM Products;2.3 检索所有列SELECT *FROM Products;2.4 检索不同的值SELECT DISTINCT vend_idFROM

2020-07-07 00:50:13 303

原创 for循环i++与++i效率对比

最近发现i++与++i的效率原来不同。我一直是用for (int i = 0; i < n; i++)但是++i效率更高!i++:需要申请一个临时变量保存i进行后续计算,再执行自增。++i:直接原地自增,再进行后续计算,无需申请内存。这个微小的差别在数据量较大的时候会有明显的效率差别,所以我以后还是用++i吧(苦笑...

2020-07-04 23:51:55 819 1

原创 C++ memset简单粗暴的理解

memset函数本来是C语言中对char数组的整体赋值函数。但是我们一般都是要用它来对int数组或者其他类型的数组进行整体初始化。具体操作如下:初始化为0int array[10];memset(array, 0, sizeof(array));初始化为-1int array[10];memset(array, -1, sizeof(array));但是!十进制数的初始化就仅限于此了,即只能赋值为0/-1。是因为:memset是按字节赋值的,对于char类型来说刚好一个字

2020-07-04 17:29:59 179

原创 anaconda在自己创建环境中用pip下载第三方包

conda install xxx # 无法安装这句anaconda的最常用安装指令,经常性的无法安装第三方数据包。这句报错折腾我近一个月了:Solving environment: failed with initial frozen solve. Retrying with flexible solve.在我即将放弃anaconda这个环境控制软件的时候,我想到能不能直接用pip/pip3来安装第三方库,结果是可以的。问题就在如何精准安装到自己的环境里。我的做法如下:1、进入自己的环

2020-07-02 16:36:54 1252 3

原创 思路分析 1487. 保证文件名唯一

问题描述给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。原题链接https://leetcode-cn.com/problems

2020-06-22 10:22:04 301

原创 思路分析 1486. 数组异或操作

问题描述给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。原题地址https://leetcode-cn.com/problems/xor-operation-in-an-array分享一下我的做题思路:// C++class Solution {public: int xorOperation(int n, i

2020-06-22 09:45:47 254

dogs-vs-cats-redux-kernels-edition.zip

kaggle官网猫狗数据集下载速度太慢了,分享给大家下载。dogs-vs-cats-redux-kernels-edition.zip解压后有train.zip、test.zip,还有sample_submission.csv。

2020-07-15

空空如也

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

TA关注的人

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