自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++数据库编程

C/C++数据库编程:从环境安装到代码实现

2023-08-23 15:22:33 1736

原创 Socket编程:基于TCP协议的客户端与服务端网络通信

socket编程一种独立于协议的网络编程接口,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

2023-08-11 18:06:26 528

原创 C++单例模式

单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例。具体应用场景如:设备管理器。系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;数据池。用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取。

2023-08-10 17:15:08 785

原创 C++STL:无序关联容器

继 map、multimap、set、multiset 关联容器之后,本节介绍一类“特殊”的关联容器,它们常被称为“无序容器”、“哈希容器”或者“无序关联容器”。more注意,无序容器是 C++ 11 标准才正式引入到 STL 标准库中的,这意味着如果要使用该类容器,则必须选择支持 C++ 11 标准的编译器。和关联容器一样,无序容器也使用键值对(pair 类型)的方式存储数据。关联式容器的底层实现采用的树存储结构,更确切的说是红黑树结构;无序容器的底层实现采用的是哈希表的存储结构。

2023-07-16 13:36:47 713 1

原创 C++STL:关联容器之set和multiset

前面介绍了 map 容器和 multimap 容器,类似地,C++ STL 标准库中还提供有 set 和 multiset 这 2 个容器,它们也属于关联容器。more和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。显然,第一组数据中各键值对的键和值不相等,而第二组中各键值对的键和值对应相等。对于 set 容器来说,只能存储第 2 组键值对,而无法存储第一组键值对。

2023-07-15 20:25:41 280

原创 C++STL:关联容器之map和multimap

作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、结构体或类自定义的类型。more通常情况下,map 容器中存储的各个键值对都选用 string 字符串作为键的类型。与此同时,在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。默认情况下,map 容器选用。

2023-07-14 14:23:25 1310 1

原创 C++STL:关联容器

顺序容器存储的都是 C++ 基本数据类型,而关联容器则大不一样,此类容器在存储元素值的同时,还会为各元素额外再配备一个值(又称为“键”,其本质也是一个 C++ 基础数据类型或自定义类型的元素),它的功能是在使用关联容器的过程中,如果已知目标元素的键的值,则直接通过该键就可以找到目标元素,而无需再通过遍历整个容器的方式。more弃用顺序容器,转而选用关联容器存储元素,往往就是看中了关联容器可以快速查找、读取或者删除所存储的元素,同时该类型容器插入元素的效率也比序列式容器高。

2023-07-13 15:56:04 99

原创 C++STL:顺序容器之forward_list

forward_list 是 C++ 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表,而 list 使用的是双向链表。more如下图所示:上图中,H 表示链表的表头。a) 表示单链表,b) 表示双向链表。不难看出,使用链表存储数据最大的特点在于,其并不会将数据进行集中存储(向数组那样),换句话说,链表中数据的存储位置是分散的、随机的,整个链表中数据的线性关系通过指针来维持。

2023-07-12 13:05:21 1267

原创 C++STL:顺序容器之list

STL list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。more下图展示了 list 双向链表容器是如何存储元素的:可以看到,list 容器中各个元素的前后顺序是靠指针来维系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。其中第一个元素的前向指针总为 null,因为它前面没有元素;同样,尾部元素的后向指针也总为 null。

2023-07-11 09:02:40 637

原创 C++STL:顺序容器之deque

deque 是 double-ended queue 的缩写,又称双端队列容器。moredeque 容器也擅长在序列尾部添加或删除元素(时间复杂度为O(1)),而不擅长在序列中间添加或删除元素。deque 容器也可以根据需要修改自身的容量和大小。和 vector 不同的是,deque 还擅长在序列头部添加或删除元素,所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。

2023-07-10 09:39:04 1082

原创 C++STL:顺序容器之vector

vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++ 普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。

2023-07-09 14:08:35 638

原创 C++STL:顺序容器

所谓顺序容器,即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。morearray(数组容器):表示可以存储 N 个 T 类型的元素,是 C++ 本身提供的一种容器。此类容器一旦建立,其长度就是固定不变的,这意味着不能增加或删除元素,只能改变某个元素的值。

2023-07-08 15:28:01 633

原创 C++STL:容器与迭代器

简单的理解容器,它就是一些模板类的集合,但和普通模板类不同的是,容器中封装的是组织数据的方法(也就是数据结构)。STL 提供有 3 类标准容器,分别是顺序容器、排序容器和哈希容器,其中后两类容器有时也统称为关联容器。

2023-07-07 19:31:18 665

原创 C++STL

STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。moreSTL 最初由惠普实验室开发,于 1998 年被定为国际标准,正式成为 C++ 标准库的重要组成部分。如今 STL 已完全被内置到支持 C++ 的编译器中,无需额外安装。STL 就位于各个 C++ 的头文件中,即它并非以二进制代码的形式提供,而是以源代码的形式提供。

2023-07-06 12:11:41 89

原创 C++11:右值引用

右值引用是一种新的 C++ 语法,基于右值引用引申出了 2 种 C++ 编程技巧,分别为移动语义和完美转发。本文主要介绍什么是右值引用以及它的基本用法。

2023-07-05 12:46:47 92

原创 C++11:使用using定义别名

本文介绍 C++11 中使用 using 定义别名的用法。

2023-07-04 18:22:53 605

原创 C++11:decltype类型推导

decltype 是 C++ 11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导。moredecltype 是 “declare type” 的缩写,译为“声明类型”。既然已经有了 auto 关键字,为什么还需要 decltype 关键字呢?这是因为 auto 并不适用于所有的自动类型推导场景,在某些特殊情况下 auto 用起来非常不方便,甚至压根无法使用,所以 decltype 关键字也被引入到 C++11 中。

2023-07-03 13:57:20 90

原创 C++11:auto类型推导

auto 的一个典型应用场景是用来定义 STL 的迭代器。我们在使用 STL 容器的时候,需要使用迭代器来遍历容器里面的元素;不同容器的迭代器有不同的类型,在定义迭代器时必须指明。return 0;可以看出来,定义迭代器 i 的时候,类型书写比较冗长,容易出错。然而有了 auto 类型推导,我们大可不必这样,只写一个 auto 即可。

2023-07-02 15:38:44 242

原创 Python+Selenium实现自动刷新网页

Selenium是一个用于Web应用程序测试的工具,本文介绍利用Python+Selenium实现自动刷新网页。

2023-07-01 14:26:14 831

原创 C++引用计数

引用计数(reference count)的核心思想是使用一个计数器来标识当前指针指向的对象被多少类的对象所使用(即记录指针指向对象被引用的次数)。它允许有多个相同值的对象共享这个值的实现。引用计数的使用常有两个目的:简化跟踪堆中(也即C++中new出来的)的对象的过程。一旦一个对象通过调用new被分配出来,记录谁拥有这个对象是很重要的,因为其所有者要负责对它进行delete。但是对象所有者可以有多个,且所有权能够被传递,这就使得内存跟踪变得困难。引用计数可以跟踪对象所有权,并能够自动销毁对象。

2023-06-30 15:45:08 938 1

原创 算法设计与分析之分治法

分治法的就是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。

2023-06-29 13:37:17 157

原创 算法设计与分析之贪心算法

贪心算法(Greedy Algorithm)是一种基于贪心思想的算法策略。它通过每一步选择当前状态下最优的解决方案,从而逐步得到全局最优解。贪心算法通常在问题具有贪心选择性质和最优子结构性质时被应用。more贪心算法的基本思想是,每一步选择当前情况下看起来最好的解决方案,而不考虑之后可能发生的情况。它不进行回溯,也不考虑全局最优解,而是根据局部最优选择来构建解决方案。

2023-06-28 13:21:01 490

原创 算法设计与分析之回溯法

回溯法,又叫试探法,是一种寻找最优解的暴力搜寻法。由于暴力,回溯法的时间复杂度较高,因此在比较一些数字较大的问题,比如最短路径问题等时,运行时间一般比较长。

2023-06-27 16:14:13 571

原创 动态规划算法

动态规划(Dynamic programming),是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。动态规划对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格中,当需要某个子问题的解时,直接取值即可,从而避免重复计算。动态规划是一种灵活的方法,不存在一种万能的动态规划算法可以解决各类最优化问题(每种算法都有它的缺陷)。

2023-06-26 14:25:20 1817

原创 Linux下向Mysql数据库持续插入图片数据

在软件的性能或压力测试中,需要向服务器的数据库持续输入数据,来验证大量IO情况下服务器及应用软件能否正常工作。本文介绍一种向mysql数据库持续插入图片数据的简单方法。

2023-06-25 09:16:31 77

原创 卷积神经网络CNN

卷积神经网络(convolutional neural network, CNN),是一类包含卷积计算且具有深度结构的前馈神经网络。卷积神经网络是受生物学上感受野(Receptive Field)的机制而提出的。卷积神经网络专门用来处理具有类似网格结构的数据的神经网络。例如,时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看作是二维的像素网格)。

2023-06-24 10:15:31 867

原创 人工神经网络ANN

人工神经网络的灵感来自其生物学对应物。生物神经网络使大脑能够以复杂的方式处理大量信息。大脑的生物神经网络由大约1000亿个神经元组成,这是大脑的基本处理单元。神经元通过彼此之间巨大的连接(称为突触)来执行其功能。

2023-06-23 09:37:00 920

原创 随机森林算法

将多个决策树结合在一起,每次数据集是随机有放回的选出,同时随机选出部分特征作为输入,所以该算法被称为随机森林算法。可以看到随机森林算法是以决策树为估计器的Bagging算法。

2023-06-22 10:49:54 1172

原创 支持向量机

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面。对于线性可分两类数据,支持向量机就是条直线(对于高维数据点就是一个超平面), 两类数据点中的的分割线有无数条,SVM就是这无数条中最完美的一条,怎么样才算最完美呢?

2023-06-21 21:00:14 1262

原创 决策树(Decision Tree)

决策树,顾名思义,就是帮我们做出决策的树。现实生活中我们往往会遇到各种各样的抉择,把我们的决策过程整理一下,就可以发现,该过程实际上就是一个树的模型。more决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树,这里我们只讨论分类树。比如选择好瓜的时候:我们可以认为色泽、根蒂、敲声是一个西瓜的三个特征,每次我们做出抉择都是基于这三个特征来把一个节点分成好几个新的节点。

2023-06-20 14:18:41 12051 1

原创 朴素贝叶斯算法

条件概率:记事件A发生的概率为P(A),事件B发生的概率为P(B),则在B事件发生的前提下,A事件发生的概率即为条件概率,记为P(A|B)。1、需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。2、对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。后验概率:则是从条件概率而来,由因推果,是基于当下发生了事件之后计算的概率,依赖于当前发生的条件。

2023-06-19 12:12:34 985 2

原创 逻辑回归(Logistic Regression)

逻辑回归(Logistic Regression)虽然被称为回归,但其实际上是分类模型,并常用于二分类。逻辑回归与线性回归本质上是类似的,相较线性回归只是多了一个Logistic函数(或称为Sigmoid函数)。moreimport numpy as np import matplotlib . pyplot as plt # sigmod函数,即得分函数,计算数据的概率是0还是1;得到y大于等于0.5是1,y小于等于0.5为0。

2023-06-18 10:56:51 926

原创 K-means算法

K-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,即待处理数据对象没有任何先验知识,而分类过程为有监督过程,即存在有先验知识的训练数据集。

2023-06-17 20:43:56 885

原创 KNN算法

KNN(K Nearest Neighbors,又称k近邻法)是一种基本的分类和回归方法,是监督学习方法里的一种常用方法。KNN算法通过距离判断两个样本是否相似,使用与未知样本最近的k个样本(近邻)的类别来分类,数量最多的标签类别就是新样本的标签类别。more。

2023-06-16 10:16:53 1056

原创 距离和相似性度量

在机器学习中,经常需要比较个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)等。其中,衡量个体间差异的方法,主要分为距离度量和相似性度量。为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn)。

2023-06-15 11:16:01 393

原创 PCA算法

在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量。更重要的是在很多情形下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性。如果分别对每个指标进行分析,分析往往是孤立的,不能完全利用数据中的信息,因此盲目减少指标会损失很多有用的信息,从而产生错误的结论。

2023-06-14 11:05:32 2376

原创 SIFT算法

SIFT (Scale-invariant feature transform),尺度不变特征转换,是一种图像局部特征提取算法,它通过在不同的尺度空间中寻找极值点(特征点,关键点)的精确定位和主方向,构建关键点描述符来提取特征。SIFT提取的关键点具有尺度不变性、旋转不变性,而且不会因光照、仿射变换和噪音等因素而干扰。SIFT所查找到的关键点是一些十分突出、不会因光照、仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

2023-06-13 10:38:47 7351

原创 LBP特征提取

LBP指局部二值模式,英文全称:Local Binary Pattern,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。

2023-06-12 09:14:09 2002

原创 霍夫变换(Hough Transform)

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由PaulHough首次提出,最初的Hough变换是设计用来检测直线和曲线,起初的方法要求知道物体边界线的解析方程,但不需要有关区域位置的先验知识。这种方法的一个突出优点是分割结果的Robustness,即对数据的不完全或噪声不是非常敏感。然而,要获得描述边界的解析表达常常是不可能的。

2023-06-11 14:20:18 9400

原创 图像分割算法

图像分割是指将图像分成若干互不重叠的子区域,使得同一个子区域内的特征具有一定相似性,不同子区域的特征呈现较为明显的差异。之前介绍了基于阈值的分割方法,比如Otsu法等;基于边缘检测的分割方法,比如Sobel算子、Canny算子等。

2023-06-10 15:19:31 3053

空空如也

空空如也

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

TA关注的人

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