栈与队列
本篇文章将详细讲述数据结构 栈与队列 章节的内容。
本教程编程语言采用 JAVA ,文章框架参考自 HUST数据结构PPT ,源码内容参考自 尚硅谷 JAVA 数据结构教程 。
栈与队列章节部分概念方面比较简单,将放在具体的代码实现过程中。
栈的定义与操作定义与术语
栈的基本操作
Initstack(s) // 置 s 为空栈
Push(s,e) // 元素 e 进栈 s
Pop(s,e // 元素 e 出栈 s
Gettop(s,e) // 顶元素拷贝到 e
Empty(s) // 判断是否为空栈
栈的应用场景:
子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。如方法中调用方法。
处理递归调用:和子程序调用类似,只是除了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
表达式的转换(中缀表达式转后缀表达式)与求值(实际解决)
二叉树的遍历
图形的深度优先(depth-first)搜索法
栈的存储表示和操作实现顺序栈(用数组来模拟栈)
实现思路
定义一个数组,来模拟栈。
定义一个top变量 ...
线性表
本篇文章将详细讲述数据结构 线性表 章节的内容,没想到距离上次更新已经快两个礼拜了。
本教程编程语言采用 JAVA ,文章框架参考自 HUST数据结构PPT ,源码内容参考自 尚硅谷 JAVA 数据结构教程 。
线性表章节部分将简单讲述概念方面的问题,重点将放在具体的代码实现过程中。
线性表的定义线性表的逻辑结构
线性表:由$n(n≥0)$个数据元素$(a_1,a_2,…, a_n)$构成的有限序列,记作: $L=(a_1,a_2,…,a_n)$,$a_1$称为首元素,$a_n$称为尾元素。
表长:线性表中数据元素的数目。
空表:不含数据元素的线性表。
在线性表$L=(a_1,a_2,…,a_n)$中:
$a_{i-1}$是$a_i$的直接前驱(1<i<=n)
$a_{i+1}$是$a_i$的直接后继(1<=i<n)
$a_1$没有前驱,$a_n$没有后继,$a_i$有且仅有一个前驱和后继(1<i<n)
抽象数据类型线性表的定义抽象类型的线性表主要定义几个属性和方法
InitList(&L) //构造空表 L。
Lengt ...
Win10/11任务栏透明美化
本文主要通过 TranslucentTB 和 RoundedTB 两款轻量软件来实现 win10/11 的任务栏美化,在阅读本教程之前,请确保你的电脑安装了 Microsoft Store 并可以正常下载应用
教程除任务栏透明化外还有进阶的边角美化教程,读者可根据需要自行选择阅读
安装应用 点击查看安装应用
打开 Microsoft Store(微软商店),搜索 TranslucentTB安装 TranslucenTB
注意安装的是 TransclucentTB 原版而不是汉化版,汉化版本只适用与 win10 任务栏完全透明化
TranslucentTB 在 2022 年 12 月的一次更新中添加了中文版本,并解决了之前版本任务栏透明顶部仍有一条细线的问题(之前此问题可配合RoundedTB解决),现阶段 TranslucentTB 支持中文并且可独立实现 Windows 任务栏透明美化
基本设置介绍配置参数样式预览
Norma ...
数据结构绪论
前言在数据结构课程结课之后,我打算重开之前一直搁置的数据结构教程书写,一方面为加深数据结构的学习印象,另一方面为以后复习做一个参考。
本教程编程语言采用 JAVA ,文章框架参考自 HUST数据结构PPT ,源码内容参考自 尚硅谷 JAVA 数据结构教程 。
绪论部分主要以定义介绍为主,掌握概念即可,复杂度方面将具体对复杂度进行分析,其中具体对时间复杂度进行分析
数据结构的定义
数据结构本身概念的基本定义:数据结构是计算机中存储、组织数据的方式。
数据结构这门学科的基本定义:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等相关问题的学科。
基本概念和术语
数据(data):所有能输入到计算机中并被计算机程序加工、处理的符号的总称。如:整数、实数、字符、声音、图象、图形等。
数据元素(data element):数据的基本单位。(元素、记录、结点、顶点)在计算机程序中通常作为一个整体进行考虑和处理。
数据项(data item):是数据的不可分割的最小单位。如:姓名、年龄等。一个数据元素可由一个或多个数据项组成。如: (姓名、年龄)
数据对 ...
机器学习基本概念与知识
本文主要介绍机器学习的基本概念与知识,文字比较简洁内容并不长,主要用于记录学习内容,方便之后复习
主要任务
分类(classification): 将实例数据划分到合适的类别中。
应用实例: 判断网站是否被黑客入侵(二分类 ),手写数字的自动识别(多分类)
回归(regression): 主要用于预测数值型数据。
应用实例: 股票价格波动的预测,房屋价格的预测等。
监督学习(supervised learning)
特点:训练样本同时具有特征与目标变量的机器学习算法。
特征通常是训练样本集的列,它们是独立测量得到的。
目标变量: 目标变量是机器学习预测算法的测试结果。
监督学习需要注意的问题:
偏置方差权衡
功能的复杂性和数量的训练数据
输入空间的维数
噪声中的输出值
非监督学习(unsupervised learning)
特点:训练样本没有目标变量,即是指在没有类别信息情况下,通过对所研究对象的大量样本的数据分析实现对样本分类的一种数据处理方法。
非监督学习包括的类型:
聚类: 在无监督学习中,将数据集分成由类似的对象组成多个类的过程称为聚类。
密度估计: ...
使用numpy实现k-means聚类算法
k-means 算法基础原理
本文注重对 k-means 算法的实现作出分析,基础原理不作赘述。
k-means 算法的特点1. k-means 算法的基本概念:
k 代表分为几个簇
means 表示寻求新质心点的时候采用求均值的方法
2. k-means 算法的特点:
k-means 算法与 knn 算法类似,都是需要“聚类”
k-means 算法是无监督学习算法的一种
k-means 算法的实现步骤:
随机选取 K 个对象,并以它们为质心;
计算数据集样本点到质心的距离;
根据样本点距离质心的距离将其分簇(类),距离哪个近,划分到哪个簇(类);
以簇内所有样本点的均值重新计算质心,,然后重复第二步,直到划分的簇(类)不在变化后停止。
k-means 算法代码实现模块的导入与 K 均值聚类算法类的定义123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import random
import numpy as np
from matplotlib i ...
使用Numpy实现k-Nearest-Neighbor算法
KNN 算法基本原理kNN 算法的核心思想是用距离最近的 k 个样本数据的分类来代表目标数据的分类。 用俗话来说就是 “近朱者赤,近墨者黑”,采用距离最近的 k 个样本中占比最高的类别来代表测试数据的类别。
注意 KNN 算法仍然是有监督学习算法的一种
KNN 算法的特点
优点:
监督学习:可以看到,kNN 算法首先需要一个训练样本集,这个集合中含有分类信息,因此它属于监督学习。
通过计算距离来衡量样本之间相似度,算法简单,易于理解和实现。
对异常值不敏感
缺点:
需要设定 k 值,结果会受到 k 值的影响,不同的 k 值,最后得到的分类结果不尽相同。k 一般不超过 20。
计算量大,需要计算样本集中每个样本的距离,才能得到 k 个最近的数据样本。
训练样本集不平衡导致结果不准确问题。当样本集中主要是某个分类,该分类数量太大,导致近邻的 k 个样本总是该类,而不接近目标分类。
KNN 算法的流程
一般情况下,kNN 有如下流程:
收集数据:确定训练样本集合测试数据;
计算测试数据和训练样本集中每个样本数据的距离;
常用的距离计算公式:
欧式距离计算公式:d(x, ...
Python实现决策树(Decision Tree)算法
决策树算法基础原理分析信息的不纯度(决定决策树分支的指标)
不纯度是在决策树中衡量特征分裂优异性的最主要的指标,用于衡量样本在根据某一特征的分类标准分裂后,样本是否被正确分类的准确程度。
主要有 3 种计算方式,分别对应了 3 类决策树:
决策树类别
不纯度计算方式
ID3
信息增益(Information Gain)
C4.5
信息增益率(Information Gain Ratio)
CART
基尼系数(Gini index)
信息熵的计算信息熵的计算公式为: $ H(D)=-\displaystyle\sum_{i=1}^n p_i log_2 p_i $ 其中$ n $为样本D的类别数,$ p_i $为该样本所占样本总数的比例
信息增益的计算信息增益的计算公式:$ g(D,A)=H(D)-H(D|A) $ 其中,$ H(D|A) $代表在以$ A $为标准分类后的所有样本的信息熵之和
信息增益率信息增益率的计算公式: $$ IGR=\frac{g(D,A)}{H(A)} $$ 其中 $ H(A) $代表 $ A $
基尼系数基尼 ...
Numpy实现逻辑回归(Logistic Regression)算法
前言:本文旨在对如何使用 numpy 实现逻辑回归拟合的过程做具体分析,有关逻辑回归原理部分不做过多论述。
数据集准备准备用于二分类的数据集,可直接复制到对应的 txt 文件-0.017612 14.053064 0
-1.395634 4.662541 1
-0.752157 6.538620 0
-1.322371 7.152853 0
0.423363 11.054677 0
0.406704 7.067335 1
0.667394 12.741452 0
-2.460150 6.866805 1
0.569411 9.548755 0
-0.026632 10.427743 0
0.850433 6.920334 1
1.347183 13.175500 0
1.1 ...
线性回归 (Linear Regression)
利用 Numpy 实现简单的机器学习算法
线性回归(Linear Regression) 可能是最流行的机器学习算法。线性回归就是要找一条直线,并且让这条直线尽可能地拟合散点图中的数据点。
前言
线性回归作为高中数学统计题比较重要的内容,先对其原理与推导过程不做详细讨论,重点通过代码来运用 python 模块实现线性回归算法。
线性回归算法的简单介绍线性模型:给定由 d 个属性描述的示例,线性模型试图学得一个通过属性的线性组合来进行预测的函数。
线性回归试图学得一个线性模型以尽可能准确的预测实值输出标记,公式: $ f(x) = w^Tx+b $$ f(x_i) = wx_i + b $,使得 $ f(x_i) ≈ y_i $
实现线性回归算法的目标与方法我们的任务就是求出 w 和 b,可用均方误差最小化的方法,基于均方误差最小化来进行模型求解的方法称为最小二乘法,在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本数据点到达直线的欧氏距离最小。总距离是所有数据点的垂直距离的平方和。其思想是通过最小化这个平方误差或距离来拟合模型。
代码具体实现过程定义线性回归函数
np. ...
关于cloudflare对网站搭建的使用
为 hexo 博客添加自定义域名
域名注册方面不做赘述,下面详细讲述利用 cloudflare 中 DNS 解析域名至 hexo 博客站的过程
cloudflare 中域名的解析
注册 cloudflare 账号(过程比较简单就不放图了,推荐使用 gmail 或者 outlook 邮箱)
cloudflare 中添加站点
注意此处添加的站点为你所购买的域名
添加站点
注意你需要在域名管理网站中设置好对应的 nameserver, 每个人分配的服务器都不一样,记得到注册域名的网站修改为对应的 nameserver!!!
填写 DNS 解析域名的地址
将域名添加到 github 中
进入到 github 项目中的 settings 中的 pages 中
此时项目 main 分支里会出现 CNAME 文件,内容为你的域名(如 xxx.com)
最后在本地的博客文件夹中hexo/source文件夹下新建 CNAME 文件,内容也为你所拥有的域名、
最后输入域名博客站就可以正常访问啦!