数据结构和算法(2)
散列表、栈、队列 数据结构和算法(2)散列表 散列表(Hash Table,又称哈希表)是一种高效的数据结构(可以简单的理解为一种高效的数组),用于实现键值对(Key-Value)的存储和快速查找。 查找的平均效率为O(1) 原理 举个简单的例子A = 1B = 2C = 3D = 4 通过将字符串转化为数字串的过程就是散列,用于对照的密码叫做散列函数。既然是函数,一定是通过某种法则。例如BAD会转化为214,通过数字求和的函数我们可以得到哈希值2 + 1 + 4 = 7,通过求积的函数我们可以得到哈希值2 x 1 x 4 = 8。但是散列函数必须满足调用同一字符串时,返回的哈希值相同的条件,否则就会出问题。 定义:将任意大小的键(如字符串、对象等)转换为固定大小的整数值(哈希值) 处理冲突有时候我们会遇到一些问题。在前面散列表的一个键BAD返回的哈希值(乘法散列函数)为8,现在我们想加入DAB,我们会发现返回的哈希值仍然是8,这会造成冲突。 解决散列冲突的方法有两种:开放寻址法(open address...
数据结构和算法(1)
算法、大O记法 数据结构和算法(1)什么是算法?算法,即解决某个问题的一套流程。例如最简单的一个问题,如何把大象装进冰箱?第一步,打开冰箱;第二步,将大象装进冰箱;第三步,关上冰箱。而这整个的流程,就叫算法。但是每个人都有不同的方法,比如小明在装大象时,把大象切成块,多了一个步骤,现在小明需要四步才能把大象装进去,而之前的方法只需要三步,这就叫做时间复杂度。随着要装的大象越来越多,小明所用的步骤越来越多,即n*3步,在这里我们使用大O记法来描述步骤,即O(3n)。但是在大O记法中,我们忽略常数。所以,小明装大象的时间复杂度为O(n)。在程序设计中,我们会想方设法的优化我们的算法,以此来让程序运行相应得更快,发挥代码的极限性能。因此,学习算法是很有必要的。 大O记法的规则:1、忽略常数2、只关注最高阶的N 排序算法和其效率现在我们要对数组 int arr[5] = {4, 2, 7, 1 ,3}进行排序 冒泡排序123456789101112131415161718192021void BubbleSort(){ for (int i...
串口通信
你会看到,unsigned char的一万种用法(bushi)、串口通信的原理和操作方法、try-catch有什么用?虽然是AI生成的(),但是我们可以借助它来学习 unsigned char 解释unsigned char 是C/C++中的一种基本数据类型,表示无符号字符型数据。以下是详细解释: 基本特性 无符号性:只能表示非负整数,范围是0到255(在大多数平台上) 大小:通常占用1字节(8位)内存空间 用途: 存储原始字节数据 处理小范围的非负整数 实现位操作和字节级操作 与char和signed char的区别 char:可能是signed或unsigned,取决于编译器实现 signed char:明确表示有符号字符,范围-128到127 unsigned char:明确表示无符号字符,范围0到255 示例代码123456unsigned char byte = 200; // 有效unsigned char max_val = 255; // 最大值// unsigned char negative = -1; // 错误,不能赋负值/...
多线程编程
多线程编程(基于C++)目录 什么是多线程 创建线程 线程管理 线程的传参 线程的同步与互斥 什么是多线程首先我们需要了解什么是线程。 线程(Thread)是操作系统能够进行调度的最小单位,它比进程更小,是进程的一个子集。线程是程序执行的最小单位,用于实现并发执行。 多线程指的是一个程序中包含两个或者两个以上的线程,多线程的提出是为提高代码的执行效率,这就好比工厂中的流水线,只有一条称为单线程,有多条流水线就称为多线程。 我这里还有更形象一点的例子。AI生成 线程比喻:餐厅里的服务员 想象你走进一家餐厅,餐厅就像一个程序,而餐厅里的服务员就像线程。 餐厅(进程) 餐厅是整个程序的运行环境,它有自己的资源,比如厨房(内存)、餐具(文件句柄)、服务员(线程)等。 餐厅的资源是有限的,但它可以同时为多个顾客服务。 服务员(线程) 服务员是餐厅里的线程,他们负责完成各种任务,比如点菜、送餐、清理桌子等。 每个服务员可以独立完成任务,但他们共享餐厅的资源(比如厨房和餐具)。 顾客(任务) 餐厅里的顾客代表程序中的任务。每个顾客有不同的需求,比如点不同的菜或者要...
第1章:绪论 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第1章 绪论(Introduction)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。 1引言与基本术语机器学习致力于研究如何通过计算手段,利用经验来改善系统自身的性能。 核心术语速查 西瓜书用语 英文 含义(用西瓜举例) 数据集 data set 一筐西瓜的记录集合 样本 / 示例 sample / instance 一个具体的西瓜 属性 / 特征 attribute / feature 色泽、根蒂、敲声…… 属性值 attribute value 青绿、蜷缩、浊响…… 属性空间 / 样本空间 attribute space 所有色泽×根蒂×敲声组合张成的 3 维空间 标记 / 标签 label “好瓜”/“坏瓜” 样例 example 样本 + 标记(一个有标签的西瓜记录) 三类学习任务 监督学习 有标记(分类/回归) 给出标准答案 无监督学习 无标记(聚类/降维) 没有标准答案 半监督学习 少量有标记 有部分提...
第2章:模型评估与选择 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第2章 模型评估与选择(Evaluation & Selection)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。 1经验误差与过拟合基础概念 术语 定义 备注 错误率 E=a/mE = a/mE=a/m(错分样本数/总样本数) 精度 1−E1 - E1−E 正确率 训练误差(经验误差) 学习器在训练集上的误差 不是泛化能力的真实反映 泛化误差 学习器在新样本上的误差 我们真正关心但无法直接计算的 过拟合 vs 欠拟合 欠拟合 模型太简单 训练误差大 + 泛化误差大 刚刚好 训练误差小 泛化误差小 过拟合 模型太复杂 训练误差小 + 泛化误差大 🍉 通俗类比 欠拟合 = 小学生用”所有人均分”来预测考试成绩;过拟合 = 把”张三那天吃了韭菜饺子所以考砸了”也当成规律。机器学习最难的挑战就是找到那个”刚刚好”的中间地带。 📌 核心定义 过拟合是机器学习面临的关键障碍——无法彻底避免,只能缓解。NP 难问题(如 P ≠ NP),过拟合不可能完全消...
第5章:神经网络 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第5章 神经网络(Neural Networks)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。 1神经元模型M-P 神经元神经网络的基本单元模拟了生物神经元:接收多个输入信号,加权求和,经激活函数后输出。 📐 公式 y=f(∑i=1nwixi−θ) y = f\left(\sum_{i=1}^n w_i x_i - \theta\right) y=f(i=1∑nwixi−θ) 其中 f(⋅)f(\cdot)f(⋅) 为激活函数,θ\thetaθ 为偏置阈值。 常用激活函数 函数 表达式 特点 Sigmoid σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x} }σ(x)=1+e−x1 输出 (0,1),梯度饱和问题 Tanh tanh(x)\tanh(x)tanh(x) 输出 (-1,1),零中心,仍有饱和 ReLU max(0,x)\max(0,x)max(0,x) 缓解梯度消失,计算简单,但”死神经元”问题 LeakyReLU max(αx,x)\ma...
第4章:决策树 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第4章 决策树(Decision Trees)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。 1基本流程决策树是一棵用于分类的树形结构:内部节点对应属性测试,分支对应该属性的可能取值,叶子节点给出分类结果。 算法:TreeGenerate(D) 生成节点 node if D 中样本全属于同一类别 C: 将 node 标记为 C 类叶节点;return if A = ∅ OR D 中样本在 A 上取值相同: 将 node 标记为 D 中样本数最多的类;return 从 A 中选最优划分属性 a* for a* 的每个取值 a_v: 为 node 生成一个分支;令 D_v 为在 a* 上取值为 a_v 的样本子集 if D_v = ∅:将分支节点标记为 D 中样本数最多的类 else:以 TreeGenerate(D_v, A \ {a*}) 为分支节点 🍉 通俗类比 决策树就像你玩**”是谁杀了小明”**的推理游戏。每个问题(节点)都是一个关于嫌疑人的属性测试:ta是男是女?有没有不在场证明?案发时在不...
第3章:线性模型 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第3章 线性模型(Linear Models)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。 1基本形式线性模型试图学得一个通过属性的线性组合来进行预测的函数: 📐 公式 f(x)=w1x1+w2x2+⋯+wdxd+b=w⊤x+b f(\boldsymbol{x}) = w_1 x_1 + w_2 x_2 + \cdots + w_d x_d + b = \boldsymbol{w}^\top \boldsymbol{x} + b f(x)=w1x1+w2x2+⋯+wdxd+b=w⊤x+b 其中 w=(w1,…,wd)\boldsymbol{w} = (w_1,\dots,w_d)w=(w1,…,wd) 是权重向量,bbb 是偏置(bias),x\boldsymbol{x}x 是 ddd 维样本向量。 📌 核心定义 核心思想:用一条直线(二维)、一个平面(三维)、一个超平面(高维)去拟合数据。简单、可解释性强 —— 每个 wiw_iwi 直接反映了对应属性 xix_ixi 对预测结果的影响大小和...
第6章:支持向量机 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第6章 支持向量机(SVM)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。 1间隔与支持向量SVM 的目标是找到一个超平面 w⊤x+b=0w^\top x + b = 0w⊤x+b=0,使两类样本到它的最小距离最大化: 📐 公式 maxw,b2∥w∥s.t.yi(w⊤xi+b)≥1, i=1,…,m \max_{\boldsymbol{w},b} \frac{2}{\|\boldsymbol{w}\|} \quad \text{s.t.} \quad y_i(\boldsymbol{w}^\top \boldsymbol{x}_i + b) \ge 1,\; i=1,\dots,m w,bmax∥w∥2s.t.yi(w⊤xi+b)≥1,i=1,…,m 等价于最小化 12∥w∥2\frac{1}{2}\|\boldsymbol{w}\|^221∥w∥2。距离超平面最近的几个样本称为支持向量(Support Vectors),它们决定了超平面的位置。 wTx+b=0(决策边界) wTx+b=1 w...



