自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符串匹配算法

字符串匹配常见的字符串匹配算法有朴素字符串匹配,KMP算法,BM算法等,对这三种算法总结一下:朴素字符串匹配朴素字符串匹配就是用两层循环,分别对被匹配字符串(string)和匹配模式(pattern)进行遍历,时间复杂度是O((n-m+1)m),用python写的代码如下:def NaiveStringMatch(string,pattern): if len(string)<len(pat

2018-03-06 19:19:57 325

原创 Linux-链接文件

我们先看看Linux 的manual 手册中对 ln 命令的说明: #man ln NAME ln - make links between filesSYNOPSIS ln [OPTION]… [-T] TARGET LINK_NAME (1st form) ln [OPTION]… TARGET (2

2018-01-27 17:10:27 3218

原创 学习笔记48-操作系统

基本类型批处理系统 批处理操作系统有三个特点:用户脱机使用,作业分批处理,多道程序运行。用户提交作业之后就不能干预程序的运行,而且作业周转时间长,没有交互。分时系统 分时操作系统也有三个特点:人机交互(联机),多用户同时使用,多用户独立使用。允许多个用户同时使用,而且互不干扰,单个用户感觉不到别人也在使用这台计算机,用户请求能在较短时间内得到响应。实时系统 某些作业或者任务必须在规定的时

2017-12-13 15:26:16 316

原创 学习笔记47-找出n个数中第k大的数

用基于比较的排序算法,先做排序再去取数,时间复杂度最简是O(nlogn)。 但是有一种方法可以达到O(n)的复杂度,就是递归的思想,用快速排序的方法,但是每次都只需要查找一半。 下面是python实现:def findNum(a,first,last,dest): if first>=last: return a[dest] i=first j=last

2017-11-02 21:25:21 733

原创 学习笔记46-java键盘输入

1. System.in.read()System.in.read()只能输入单个字符,保存的是它的ASCII码值private void read(){ try { int i=System.in.read(); System.out.println(i); System.out.println((char)i); }

2017-10-29 16:50:05 224

原创 学习笔记45-在notepad++中配置java,python,gcc和g++

notepad++是一款轻量级的编辑器,因为很常用,所以我习惯把经常用到的语言都配置到上面去,可以直接编译运行单文件,很方便。1. gcc &amp; g++编译命令:gcc:cmd /k gcc -Wall -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" &amp; PAUSE &amp; ...

2017-10-24 19:43:16 245

原创 学习笔记44-成员函数的重载,覆盖,隐藏

重载成员函数的重载有四个特征: 1. 相同的范围内(比如同一个类中) 2. 函数名字相同 3. 参数不同(个数,顺序,类型) 4. virtual关键字可有可无覆盖覆盖是指派生类函数覆盖了基类函数,也有四个特征: 1. 不同的范围(分别位于派生类和基类中) 2. 函数名字相同 3. 参数相同 4. 基类函数必须有virtual关键字(虚函数)隐藏隐藏是指派生类的函数屏蔽了与其同名的基

2017-10-14 16:44:29 347

原创 学习笔记43-C语言指针

指针实际上可以理解为存放地址的变量,二级指针就是“指针的指针”,它存放的是另一枚指针的地址。在C语言里面指针跟数组很容易让人懵逼,这里记几个例子: 1.指针跟函数:#include<stdio.h>#include<string.h>#include<malloc.h>//可以返回一个指针变量,因为返回的实际上是指针变量里面存的地址。char *getMemory_1(const char

2017-10-14 11:47:12 185

原创 学习笔记42-解析json格式的字符串

jsonJSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 说得很复杂,其实可以简单理解成

2017-10-11 18:53:51 352

原创 学习笔记41-寻找二叉树最近公共结点

1. 有父指针如果这棵二叉树有父指针,比较简单,时间复杂度是O(n)。 先把深度大的向上移,移到同一深度,再同时向上移动,直到两个结点相同就找到了公共父节点。#include<stdio.h>struct node{ int data; node *left; node *right; node *parent; node():left(NULL),ri

2017-10-11 16:00:19 486

原创 学习笔记40-哈希码(HashCode)

哈希码哈希码是一种算法,它的目的是让同一个类的对象按照自己不同的特征尽量地有不同的哈希码,但是,不表示不同的对象哈希码完全不同。也可能有相同的情况。在Java中,哈希码代表对象的特征。hashCode在Java中,hashCode是jdk根据对象的地址或者字符串或者是数字算出来的int类型的数值。常见的哈希码的算法有:1:Object类的hashCode :返回对象的内存地址经过处理后的结构,由于

2017-09-26 10:08:14 6349 1

原创 学习笔记39-提升方法(boosting)

提升方法提升方法在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。 首先看两个概念: 1. 弱学习(weakly learnable):一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略高,那么称这个概念是弱可学习的。 2. 强学习(strongly learnable):一个概念,如果存在一个多项式的学习算法能够学习它

2017-09-22 11:39:50 327

原创 学习笔记38-进程间通信

IPC(Inter Process Communication)进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可

2017-09-22 09:51:50 196

原创 学习笔记37-C++异常处理

try-catchtry-catch是一对c或者c++的异常处理机制。 具体例子如下: 写一个除法的函数,规定除数不能是0,被除数不能是1。#include<stdio.h>double division(int x,double y){ try { if(y==0) throw y; if(x==1)

2017-09-21 10:15:01 141

原创 学习笔记36-C++ 智能指针

动态分配内存-回收问题因为C++没有自动内存回收机制,程序员每次new出来的内存都要手动delete,如果程序员忘记delete,那么这个指针指向的对象不能被安全删除,比如下面的情况:Object_type *ptr=new Object_type();ptr->func();delete ptr;如果程序员忘记第三行的delete,那么会造成一个悬挂指针(dangling pointer),也

2017-09-21 09:35:53 164

原创 学习笔记35-决策树(Decision Tree)

决策树下面以一个简单的二分类任务为例,决定一个西瓜是好瓜还是坏瓜。 首先西瓜有三个属性:色泽,根蒂,敲声 决策树是基于树结构来进行决策的,也就是通过一系列的判断,最终得到结果。如下图,对一个瓜,先看色泽,如果不是青绿色,说明不是好瓜,判断结束。否则,继续看它的根蒂,如果根蒂不是蜷缩的,说明不是好瓜,判断结束。否则,接着看它的敲声,如果敲声不是浊响,说明不是好瓜,判断结束。否则,是好瓜,判断结束。

2017-09-20 11:42:11 537

原创 学习笔记34-k近邻算法

k近邻算法(k-nearest-neighbor kNN) 这是一种分类算法,它的核心思想是:对于新的样本,根据其k个最近邻的样本的类别,通过多数表决等决策规则,决定它的类别。 使用k近邻算法,首先需要确定三个东西: 距离度量,k值的选择,分类决策规则距离度量特征空间中两个样本点之间的距离反映了这两个样本的相似程度,距离有多种表示方法: 一般用Lp表示。 1. 曼哈顿距离(L1距离)

2017-09-18 15:05:54 669

原创 学习笔记33-生成式模型-判别式模型

统计学习方法首先需要说明一些基本概念: 1. 统计学习方法 统计学习方法就是对数据进行预测和分析,特别是对未知的新数据进行预测。包括监督学习(Supervised Learning),非监督学习(Unsupervised Learning),半监督学习(Semi-supervised Learning),强化学习(Reinforcement Learning)等。 作为一种计算机使用的方法,肯

2017-09-17 23:15:32 426

原创 学习笔记32-设计模式

设计模式(Designs Patterns)设计模式,可以理解为一些面向对象代码设计的经验的总结。 使用设计模式,是为了可重用代码,使代码更容易被人理解,保证代码的可靠性。 JAVA常用的设计模式有23种,这里准备用C++实现。分类总体来说,设计模式分为三类:1. 创建型这种模式在创建对象的时候隐藏了创建的逻辑,不是使用new操作符直接实例化对象。使得程序在判断针对某个实例应该创建那些对象时更加

2017-09-17 16:09:17 234

原创 学习笔记31-C/C++字符串输入

1. cin>>cin>>可以用来接收字符串,字符,数字等等类型。 但是注意: cin>>会自动过滤空格,tab,回车等不可见字符,如果不想过滤可以使用noskipws进行控制。#include<iostream>using namespace std;int main(){ char ch[5]; for(int i=0;i<5;i++) cin>>nos

2017-09-15 19:07:29 236

原创 学习笔记30-动态规划

动态规划动态规划是个一直以为自己搞懂了,遇到题目又不会的问题,所以到现在也不敢说自己懂了。 总之,能够将一个大问题分解的,就可以考虑动态规划。就是“用问题来回答问题”。 动态规划有四个性质:如果子问题有答案,那么母问题一定有答案,这叫“最优子结构”。子问题跟母问题之间只有某些参数不同,且参数具有传递性,这叫“子问题重叠”。某些问题没有子问题,本身就有解,也就是不会出现死循环,这叫“边界”。

2017-09-12 17:31:17 255

原创 算法学习笔记4-动态规划-背包问题

动态规划(Dynamic Programming)其实动态规划特别抽象,特别难讲。这里也可以参考一篇博文,用讲故事的方式讲了出来。 通过金矿模型介绍动态规划 我的理解就是“用更多的问题来回答问题”。 动态规划是一种求解最优化问题的方法,因为它没有一个确定的数学表达式,或者是明确的解题步骤,说起来会比较抽象,我们只能在实际题目中体会。首先说几个概念吧: 这里先给个栗子: 给定一个整数序列,求

2017-09-11 18:13:05 206

原创 学习笔记29-C++类的继承方法

类的继承后方法属性变化:private 属性不能够被继承。使用private继承,父类的protected和public属性在子类中变为private;使用protected继承,父类的protected和public属性在子类中变为protected;使用public继承,父类中的protected和public属性不发生改变; private, public, protected 访问标号的访问

2017-09-06 18:37:20 211

原创 学习笔记28-关联规则

关联规则关联规则是数据挖掘常用的算法,目的是学习不同变量之间的相互关系。比如电商平台中,我们知道经常同时被购买的货物,这就可以当成一种关联规则。项集这些频繁地被同时购买的货物项,称为项集(Item set),也叫频繁项集。 比如,可能“薯条+可乐”和“薯条+汉堡”的组合经常一起出现,那么它们可以组成一个频繁二项集(2-Item set)。 频繁项集有两个定理:1)频繁项子集定理:频繁项集的子集都

2017-09-06 16:28:18 517

原创 学习笔记27-哈弗曼树

哈弗曼树又称赫夫曼树,最优树,就是带权路径最短的树。带权路径最优具体的带权路径怎么算呢? 请看下图: 其实权重可以理解为树的深度,根结点的权重是0,其余的依次加1。哈弗曼编码哈弗曼编码是一种可变字长编码,比如下面将一个字符串编码,根据每个字符出现的频率作为权重,建成一课哈弗曼树:

2017-09-05 17:16:09 213

原创 学习笔记26-图的表示方法

图图是一种数据结构,包括一组顶点和一组边。有几个概念需要了解: 1.无向图——有向图:区别在于边有没有方向。比如《v,w》是有向的,表示从v指向w的边,而(v,w)是无向的,可以从v指向w,也可以从w指向v。 2.连通图:如果从v到w存在一条无向的边(v,w),则称v和w是连通的。如果图中任意两个顶点均是连通的,则称该图为连通图。 图的构建方法有好几种,如邻接矩阵法,邻接表法,十字链表法,邻接

2017-09-04 11:48:36 642

原创 学习笔记25-前缀/中缀/后缀表达式

首先,这三种只是对数学计算表达式的不同记法,它们的区别在于操作数跟运算符的位置不同。中缀表达式中缀表达式是一个通用的算术或逻辑公式表示方法。就是我们从小学开始就接触的那种表达式。因为运算符以中缀的形式嵌入在操作数中间,所以叫中缀表达式。比如:(3+4)*5-6对于人脑来说,中缀表达式很直观,是最容易看懂的。但是对于计算机就不一样了,计算机不能像人一样很快区分操作符跟操作数,所以在计算机求表达式的值的

2017-09-03 10:41:43 307

原创 学习笔记24- C/C++ 字符串分割函数

字符串分割因为C++没有类似Python,Java那样的split函数,所以需要自己实现字符串分割。方法1可以先将string类型转换成char数组,然后使用C语言的strtok函数,进行字符串分割:#include<stdio.h>#include<string.h>int main(){ char s[]="a,b,c,d"; const char *key=",";

2017-09-01 15:15:44 795

原创 学习笔记23-Python正则表达式

正则表达式正则表达式(Regular Expression)是一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 具体可参考菜鸟教程 不同的编程语言都存在正则表达式,只不过有一些语法规则不是互相支持的。 Python的正则表达式可以使用“re”包,其中封装了Python支持的所有正则表达式。 可以把re理解成一个正则表达式引

2017-08-31 11:37:34 238

原创 学习笔记22-Python爬虫

网络爬虫我们平时看到的网页,其实很多是HTML代码写的,网络爬虫的作用就是过滤这些HTML代码,得到想要的图片,文字的资源。 这里首先需要一些基础知识: 1.HTML标签 具体可参考w3school 2.URL URL(Uniform Resource Location) 统一资源定位符 互联网上每一个文件都有一个唯一的URL,它指示某个资源的位置和访问方法,浏览器可以怎么处理它等等信息

2017-08-30 15:03:41 281

原创 学习笔记21-SVM支持向量机

支持向量机首先支持向量机是一种算法,有时候机器学习的书喜欢把算法称为”machine”,所以翻译为机器。而支持向量(Support Vector),我们接下来解释。最大间隔分离超平面先讲一个二分类问题,一个二维平面上有若干个点,我们要用一条界线(或者是一个平面)把它们分成两部分,就是一个二分类问题。这个二维平面叫“特征空间”,上面的点称为“样本点”,每一个样本点可以用一个“特征向量”来表示。比如下图

2017-08-29 15:10:13 296

原创 学习笔记20-经典面试题-求一个整数中1的个数

题目今天看到一个面试题,挺有趣的,分享一下。 请实现一个函数,输入一个整数,输出该整数的二进制表示中1的个数。 比如输入9,输出2。解法1:除法首先我想到的是用除法,也就是把十进制数转换成二进制数,计算1的个数int count1(int n){ int c=0; while(n>0) { if(n%2==1) c++;

2017-08-28 15:40:46 596

原创 学习笔记19-TCP建立和释放连接的过程

TCP/IP协议在世界上,各种各样的电脑运行着各自不同的操作系统,就像世界各地的人们说着不同的语言,他们不能直接沟通交流,所以需要制定一系列的规则来帮助他们互相理解交流,然后才能将世界连接起来。 同样,要建立一个计算机网络,也需要这样一系列的规则,这就是TCP/IP协议。 TCP其中TCP为应用进程提供可靠交付的,全双工的通信,也就是保证通信的数据不会丢失或者错乱,且通信双方可以发送和接收数据。

2017-08-27 16:48:26 471

原创 算法学习笔记18-查找

这里主要讲用于查找的数据结构——查找表(Search Table),可分为两类:动态查找表静态查找表静态查找表对于顺序表或线性链表(有序表),可以用折半查找(二分查找),它的时间复杂度是O(log n),此外还有斐波那契查找( O(log n) )和插值查找。 对于静态树表,可以构造一颗次优查找树(Nearly Optimal Search Tree)。 对于索引顺序表,可以用分块查找。动

2017-08-27 12:05:25 214

原创 算法学习笔记17-经典排序算法

总结基于比较的排序1.冒泡排序 冒泡就是相邻两个元素比较,把较大的数放到后面,每一轮比较之后,最尾端的数一定是最大的。 冒泡排序是稳定的。#python实现def bubble(a): for i in range(len(a)-1): for j in range(len(a)-i-1): if a[j]>a[j+1]:

2017-08-25 16:34:54 392

原创 学习笔记16-C++ main(int argc, char *argv[])

一直以来写的C/C++代码,main函数都是没有输入参数的,但是经常看到别人的main函数有两个参数: 比如在doss命令窗口中运行下面这段代码 输入: test.exe aaa bbb ccc ddd 输出: 5 test.exe aaa bbb ccc ddd#include<stdio.h>int main(int argc,char*argv[]){ int

2017-08-24 16:55:04 148

转载 算法学习笔记15-哈希算法

Hash表首先说一种数据结构,Hash表,也叫哈希表或者散列表,索引表。它同数组、链表以及二叉排序树等数据结构有很明显的区别,它能够快速定位到想要查找的记录。也就是说,某个元素存储的地址跟这个元素的内容之间存在一种映射。 比如,有一张用户个人信息表,你想查找“李四”这个人,如果是用普通的数组存储,你需要遍历每一个数组元素,时间复杂度是O(n),就算用二叉树,时间复杂度也是O(log n)。但是,如

2017-08-24 16:24:42 373

原创 学习笔记14-python list

list列表list可以理解为一个动态数组,主要操作函数如下:a.append(5)#在尾部增加一个元素a.extend([6,7])#在尾部增加多个元素a.extend(b)#两个list拼接起来c=b+a#合并两个数组a.insert(3,33)#在第3个元素后面插入一个元素33del a[0]#删除对应下标的元素a.pop()#删除最后一个元素a.remove(6)#删除一个值为

2017-08-21 14:56:17 179

原创 学习笔记13-C++-内存分配

malloc/free和new/delete 应用C++有两组内存操作,分别是malloc/free和new/delete。new/delete是C++的操作符,malloc/free是C的函数。 new有两个作用:分配内存;调用类的构造函数。 delete也有两个作用:释放内存;调用类的折构函数。 而malloc和free只能分配和释放内存。 malloc/free的原型分别是:void*

2017-08-21 11:21:18 177

原创 算法学习笔记12-任意进制数的转换

进制转换将o进制的数m转换为n进制的数输出。可以识别负数。 因为这里是用字符串读取,所以对数的范围没有限制,可以是很大的数。#coding=utf-8import sysdef zero(a): for i in a: if i==0: continue else: return False ret

2017-08-20 10:28:46 349

空空如也

空空如也

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

TA关注的人

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