自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TinnCHEN的博客

coding学习

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

原创 鸟哥linux读书笔记——linux文件系统

linux文件系统【仅根据个人需要进行记录】1、/dev/sd[a-p][1-128]:物理磁盘文件名2、/dev/vd[a-d][1-128]:虚拟磁盘文件名3、格式化:因为每种操作系统所设置的文件属性/权限并不相同,为了能使操作系统使用硬盘存放数据,因此要对分区进行格式化。4、目前centos7文件系统为xfs,书上所提及的ext2-4等可以查阅相关资料,可以使用mount,df,parted查看5、LVM,讲一个分区划分为多个逻辑分区即多个文件系统,也能将多个分区合并成一个文件系统。因此,

2022-04-26 14:04:43 159

原创 python使用socket实现文件传输功能

本例中以client作为发送端server作为接收端#serverimport socketimport jsonimport structimport ossk = socket.socket()#避免服务器重启时候报address already in usesk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sk.bind(('127.0.0.1',8080))sk.listen()con, addr = sk.ac

2020-05-24 00:31:03 1274 2

原创 Python解决TCP黏包问题

以控制命令行为例Server端import socketimport structsk = socket.socket()sk.bind(('127.0.0.1', 8080))sk.listen()conn, addr = sk.accept()while True: cmd = input('>>>') if cmd == 'q' conn.send(b'q') break conn.send(cmd.encode('gbk')

2020-05-23 03:23:56 256

原创 python生成器

**生成器函数:**送回一个值并随后从其退出的地方继续的函数。使用yield代替return,但不会使函数结束运行。当继续时,函数在上一个yield返回后立即继续执行。生成器也是一个迭代器,第一个yield返回函数开始的位置,调用next后会运行函数def func(): print("hhhh") yield 1;a = func()print(a)print(a._...

2020-04-01 02:21:14 111

原创 python装饰器

原则: 封闭开放原则封闭:对修改是封闭的开放:对扩展是开放的装饰器的作用: 在不修改原来函数的情况下添加功能#假设我们已有函数如下:def func(): print('sss')func()#我们想加入一个计时的功能#"错误"实例#1.如果我们将原函数修改成如下方式import timedef fun(): start = time.time() pri...

2020-03-31 05:26:25 113

原创 堆排序

**基本思想:**利用大顶堆或者小顶堆的性质,将顶层移走,剩余的继续构造一个堆。重复这个过程得到有序的数组。以大顶堆为例:(堆为一个完全二叉树)首先我们需要一个在堆内进行调整的函数,确保堆内的parent大于它的两个孩子节点。//heap[]为保存堆的数组//其中孩子节点与parent的关系为孩子结点的下标(i-1)/2向下取整为parent的下标//n为元素的个数//i为当前下标/...

2020-02-29 03:59:08 128

原创 希尔排序

基本思想: 设定间隔分组,保证基本有序,每趟尽量把小的关键字排前面,大的关键字往后放。是一种对简单插入操作的改进。void ShellSort(List *L){ int i, j; int increment = L->length; while(increment > 1){ increment = increment / 3 +...

2020-02-29 00:52:13 86

原创 O(n^2)的排序(冒泡,选择,插入排序)

1、冒泡排序基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。//基础冒牌排序void BubbleSort(List *L){ int i, j; for(i = 1; i < L->length; ++i){ for(j = L->length; j >= i; --j){ if(L...

2020-02-28 04:01:37 122

原创 哈希表(散列表)查找

一、原理:存储位置与关键字一一映射。散列技术是在记录的存储位置和它的关键字之间建立起一个确定的对应关系f,使每个关键字key对应一个存储位置f(key)。f为散列函数,又称哈希函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间成为散列表/哈希表。二、散列函数构造方法:1.直接定址法直接用key值的某个线性函数当地址。f(key) = a * key + b简单,不...

2020-02-27 02:29:35 279

原创 平衡二叉树

原理:每当构建一个二叉树时,先检查插入是否破坏了平衡性。若是,则找出最小不平衡子树,进行对应的操作。//树结构定义typedef struct BiTnode { int data; int bf; struct BiTnode* lchild, * rchild;}BiTnode, *BiTree;左旋即将最小不平衡子树的根节点变为其右孩子的左子树。原右孩子的左子树变为原根节点的...

2020-02-25 23:09:35 98

原创 斐波那契查找

利用斐波那契数列的黄金分割原理对二分和插值查找的改进二分,插值查找:https://blog.csdn.net/TinnCHEN/article/details/104437976首先我们定义一个斐波那契数列F = {0,1,1,2,3,5,8,13,21,34…}int Fibonacci_Search(int *a,int n, int key){ int low, high,...

2020-02-23 00:00:45 105

原创 插值查找(改进版的二分/折半查找)

这两种查找方式都是针对于静态查找,同时不适用于需要频繁增删的数组,因为维护数据的序会是一个很大的负担。同时插值查找也不适用于分布极端不均匀的数组二分/折半查找int binary_search(int *a, int n, int key){ int low, high, mid; low = 1; high = n; while(low <= high)...

2020-02-22 03:44:54 212

原创 数组中差为K的对数/K-diff Pairs in an Array(C++)

Problem:Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both n...

2020-02-19 03:50:00 325

原创 KMP模式匹配算法改进

KMP模式匹配算法:https://blog.csdn.net/TinnCHEN/article/details/93459873KMP模式匹配算法改进:对于next 数组进行了改进。当子串在重复部分匹配失败时,我们发现之前的KMP算法会一位一位往前比较,其实2,3,4,5步骤的判断是多余的。因此我们可以直接跳过重复部分,让首字符直接跟发现不匹配字符部分的后一位进行比较。总结即,子串重复...

2019-06-24 11:55:39 903

原创 KMP模式匹配算法

意义:当子串有多个相同部分时,与朴素模式匹配算法相比,大大减少了循环次数。时间复杂度由O((n-m+1)*m)变为O(n+m)。重点:对用于匹配的子串的next数组的构建。next数组表示若当前位不匹配我们该从第几位开始重新比较。next数组举例说明:我们用 j 来表示子串中第几位,为方便我们从1开始计数。eg1:当子串无重复时子串abcdx1、j = 1,next[1] = 0;2...

2019-06-24 09:24:23 392

原创 c++primer——重载运算与类型转换

1、重载的运算符是具有特殊名字的函数。对于一个运算符来说,它或者是函数成员,或者至少含有一个类类型的参数。我们只能重载已有的运算符。无法重载这个四个运算符:::.*.?:2、部分制定了运算对象求职顺序的运算符不该被重载,特别是,逻辑与,逻辑或、取地址和逗号运算符。原因是,这些关于运算对象求职顺序的规则无法应用到重载的运算符上,去求值顺序规则无法保留。并且&&和||的重载半...

2019-04-21 15:47:56 247

原创 拷贝控制c++primer13章

1、一个类通过定义五种特殊的成员函数来啊控制这些操作:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数。2、拷贝构造函数:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。且通常不为explicit的,eg:class foo{public: foo(); foo(const foo&);//拷贝构造...

2019-04-18 16:13:08 194

原创 自定义简易string类c++primer13.44

头文件#pragma warning(disable:4996) //可参考上一篇解决c4996问题的博客#include<iostream>#include<memory>#include<algorithm>#include<utility>class String {public: String() { element...

2019-04-16 21:50:03 251

原创 error C4996: 'std::_Uninitialized_copy0':与错误 LNK2001 无法解析的外部符号 "private: static class std::allocator

/*在构造简易版vector<string>时遇到这两个问题,代码如下:*/#include<memory>#include<iostream>#include<string>#include<utility>#include<vector>class StrVec {public: StrVec() :...

2019-04-16 13:50:17 842 2

原创 文本查询程序c++primer12.32

头文件#include<iostream>#include<vector>#include<new>#include<set>#include<map>#include<fstream>#include<algorithm>#include<memory>#include<sst...

2019-04-11 11:11:35 176

原创 c++动态内存智能指针及weak_ptr用法的理解

静态内存1、静态内存:用来保存局部static对象(第一次经过时初始化直到程序终止才销毁,贯穿函数调用及之后的时间)、类static数据成员(与类本身相关与类对象无关,不能为const,不包含this)以及定义在任何函数之外的变量。2、栈内存:用来保存定义在函数内的非static对象。3、对于1和2,由编译器自动创建和销毁。智能指针shared_ptr4、为了避免使用动态指针带来的风险(...

2019-04-10 21:43:16 633

原创 c++primer——关联容器的使用

一、顺序关联容器(一)、容器的种类顺序关联容器有四种:可以按照关键字是否重复分为两类:1、不重复:map:保存key-valueset:保存key2、可以重复:multimap:保存key-valuemultiset:保存key(二)、关键字(key)的要求1、关键字类型必须定义元素比较的方法,所提供的操作必须是严格弱序,即<=。2、当我们想使用自定义的操作,必须在定...

2019-04-03 16:08:21 179

原创 c++primer——第十章泛型算法lambda

一、谓词谓词是一个调用表达式,其返回结果是一个能用做条件的值。标准库算法为此分为两类:1、一元谓词(意味着只能接受单一参数)2、二元谓词(意味着他们有两个参数)接受谓词的算法对输入序列中的元素调用谓词。因此元素类型必须能转换为谓词的参数类型。以sort和isShorter举例eg:bool isShorter(const string &s1, const string &...

2019-03-25 12:26:23 254

原创 c++primer——第十章泛型算法所提到的函数总结

泛型算法定义:泛型因为他们可以用于不同类型的元素和多种容器类型(不仅包括标准库类型,还包括内置的数组类型),以及我们将看到的,还能用与其他类型的序列。算法因为他们实现了一些经典算法的公共接口。本章所介绍的几个函数find:定义在头文件algorithm中,有三个参数,其中前两个至少为输入迭代器(指针),第三个参数是一个值。他返回第一个等于给定值元素的迭代器。从第一个参数开始寻找,如果没有找...

2019-03-25 10:41:16 155

原创 C++primer1-7章知识点总结——显示转换

warning:虽然有时候不得不使用强制类型转换,但这种方法本质上是非常危险的!命名的强制类型转换:形式:cast-name&amp;lt;type&amp;gt;(expressopn)//type是expression要转换的值。如果type是引用类型,则结果是左值。static_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。//进行强制类型转...

2019-02-18 09:37:07 128

原创 C++primer1-7章知识点总结——sizeof运算符

定义:sizeof运算符返回一条表达式或一个类型名字所占的字节数。sizeof运算符满足右结合律,其所得的值是一个size_t类型的常量表达式。(size_t类型是一种机器相关的无符号类型,足够大可以表示内存中任意对象的大小)使用方法:sizeof (type);sizeof expr;注:sizeof的结果部分依赖于其作用的类型:1、对char或者类型为char的表达式执行si...

2019-02-18 08:42:34 213

原创 C++primer1-7章知识点总结——顶层const与底层const

顶层const表示任意对象/数据类型本身为常量底层const与指针和引用等复合类型的基本类型有关注:(1)用于声明引用的const都是底层const(2)指针类型既可以是顶层const也可以是底层consteg:int i = 0;int *const p1 = &amp;amp;amp;i; //p1为顶层const,其值不能改变const int ci = 42; //ci为顶层const,...

2019-02-16 09:28:15 363

原创 C++primer1-7章知识点总结——vector以及迭代器的相关运用

vector定义:vector也常被称作容器,表示对象的集合,其中所有对象的类型都相同。集合中每个对象都有一个与之对应的索引,索引用于访问对象。使用时需添加头文件。vector是一个类模板使用时需实例化。eg:#include&amp;amp;amp;lt;vector&amp;amp;amp;gt;#include&amp;amp;amp;lt;string&amp;amp;amp;gt;using namespace std;vector&amp;am

2019-02-12 11:40:00 154

原创 c++primer第五版7.23题知识点

class screen {public: typedef string::size_type pos;//定义类型成员(string::size_type类型见类下方注释),还可以使用using类型别名来定义using pos = string::size_type; screen() = default; //因为我们有定义构造函数,所以默认构造参数应该显示声明 screen(pos ...

2019-01-24 11:30:13 173

原创 引入const成员函数

class Person {public: Person(string s, string a); string PerName; string PerLive; const string&amp;amp;amp;amp;amp; GetName() const { return PerName; }//(1) string GetLive() const { return PerLive; }//(2...

2019-01-23 09:47:55 229

原创 c++ typedef的一些理解

c++ typedef的一些理解char a = 'a'; const char b = 'b'; const char *c = &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;b; typedef char * pstring; const pstring cstr = &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a;

2019-01-20 15:44:14 335

原创 为什么二叉树中叶子节点个数等于度为2的节点个数+1

证明:设:节点总个数为n,叶子节点个数为n0n_0n0​,度为1的节点个数为n1n_1n1​,度为2的节点个数为n2n_2n2​,边的个数为b。n = n0n_0n0​ + n1n_1n1​ + n2n_2n2​b = n - 1可得b = n0n_0n0​ + n1n_1n1​ + n2n_2n2​ - 1另b = n1n_1n1​ + 2 * n2n_2n2​则n0n_0n0...

2018-11-13 09:05:47 13700 2

原创 关于BP算法的一点理解

关于BP算法的一点理解由于最近在撸毕设初次接触机器学习的神经网络部分今天学习了前馈神经网络的部分,仅供自身学习总结用,有不足之处还望指教。前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。是目前应用最广泛、发展最迅速的人工神经网络之一。研究从20世纪60年代开始,目前理论研究和实际应用达到了很高的水平。...

2018-04-09 13:51:13 3286

空空如也

空空如也

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

TA关注的人

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