基于深度学习的图像分类
使用ResNet18预训练模型由于笔记本性能太差,所以在服务器上运行的,显卡配置为4090。经大量实验判断,初始学习率为0.01最后效果较差,所以初始学习率应设为0.001。全部代码代码已上传到:https://github.com/wp-a/-CIFAR10-.git 库函数导入123456789import matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torchvisionimport torchvision.transforms as transformsfrom sklearn.metrics import confusion_matrix, classification_reportfrom itertools import chainimport multiprocessingdevice = torch.device("cuda:0" if torch.cuda.is_available() else...
代码随想录--动态规划
代码随想录--动态规划(1)
常见排序算法详解
排序算法详解排序算法是计算机科学中最基础也是最重要的算法之一。本文将详细介绍几种常见的排序算法,包括它们的实现原理、时间复杂度和适用场景。本文所有代码示例使用 C++ 实现,需要包含以下头文件: 123#include <vector>#include <algorithm>using namespace std; 1. 冒泡排序 (Bubble Sort)冒泡排序是最简单的排序算法之一,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 实现原理 时间复杂度:O(n²) 空间复杂度:O(1) 稳定性:稳定 实现代码1234567891011121314151617void bubbleSort(vector<int>& arr) { int n = arr.size(); bool swapped; for(int i = 0; i < n-1; i++) { swapped = false; // 每一轮比较 ...
代码随想录--图论
代码随想录--图论(1)
图论
图论图论是数学的一个分支,以图为研究对象。 图论中的“图”是一种抽象的数学结构,由顶点(点)和连接顶点的边(线)构成,用于描述事物之间特定的关系。 核心思想: 用点代表事物,用连接两点的线表示事物之间的关系。 [Image of Example Graph with Vertices and Edges]图的例子:顶点和边 图的基本概念 图 (Graph) 一个图 G 由两个基本集合构成: 顶点集 (Vertex Set) V(G): 图中所有顶点的集合。 顶点通常用点、小圆圈或标签表示。 边集 (Edge Set) E(G): 图中所有边的集合。 边连接一对顶点,表示顶点之间的关系。 边通常用线段、曲线或箭头表示。 我们可以用数学符号表示一个图: G = (V, E) 顶点 (Vertex / Node / Point) 图的基本组成部分,代表研究对象或实体。 示例: 在社交网络中,顶点可以代表 人。 在交通网络中,顶点可以代表 城市。 在电路图中,顶点可以代表 电子元件。 边 (Edge / Arc...
代码随想录--回溯算法
代码随想录--回溯算法(1)
回溯算法
回溯算法 回溯算法 是一种通过试错的方式寻找问题解的算法。它尝试逐步构建解决方案,如果在构建过程中的某一步发现当前的构建方案不可行,它会回溯(即取消最近一步的选择),然后尝试其他的可能性。这个过程就像是在迷宫中探索路径,当遇到死路时就退回上一个岔路口,选择另一条路继续前进。 核心思想 试探性选择: 在每一步,都面临多个选择,回溯算法会先选择其中一个进行尝试。 逐步构建: 它一步一步地构建可能的解。 可行性判断 (约束条件): 在每一步构建后,都会检查当前的部分解是否满足问题的约束条件。 回溯 (撤销选择): 如果发现当前部分解不可行,则撤销上一步的选择,回到之前的状态,并尝试其他的选择。 终止条件: 当找到一个完整的可行解,或者当所有可能的选择都尝试完毕且没有找到解时,算法终止。 基本步骤 定义问题的解空间: 确定问题的解可能存在的所有可能组合。例如,对于一个排列问题,解空间就是所有可能的排列。 确定约束条件: 定义问题解必须满足的条件。这些条件用于判断当前构建的部分解是否有效。 选择搜索策略 (通常是深度优先搜索 DFS): ...
线性表
线性表线性表是⼀对⼀的逻辑结构,线性表中除了表头元素每个元素有且仅有唯⼀⼀个前驱元素,除了表尾元素,每个结点都有唯⼀⼀个后继节点。 顺序存储(顺序表)存取顺序表随机存取,存取某个元素的时间复杂度为O(1)。 查找平均时间复杂度O(n) 插入删除平均时间复杂度O(n),删除插⼊元素需要移动⼤量元素。(如果是删除最后⼀个元素或者在最后⼀个节点后⾯插⼊⼀个新的节点,则复杂度为O(1),因为不需要移动元素) 链式存储(链表)链表因其链状的结构,能方便地删除、插入数据,操作次数是 O(1)。但也因为这样,寻找、读取数据的效率不如数组高,在随机访问数据中的操作次数是 O(n)。 单链表单链表的基本组成单元是**节点 (Node)**。 每个节点通常包含两个主要部分: 数据域 (Data): 用于存储实际的数据元素。 数据域可以是任何数据类型,例如整数、浮点数、字符、字符串,甚至更复杂的数据结构。 指针域 (Pointer) 或 下一个节点指针 (Next Pointer): 用于存储指向链表中下一个节点的地址(或引用)。 对于单链表,每个节点只有一个指针,指向它后面的节点。 ...
绪论
绪论数据结构数据结构是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。 逻辑结构线性结构一般线性表:线性表 特殊线性表:栈、队列、字符串 线性表的推广:数组、广义表 非线性结构树结构:树、二叉树 图结构:有向图、无向图 集合结构 存储结构顺序存储逻辑上连续,物理上连续 优点: 随机访问高效:通过下标可直接访问元素,时间复杂度为 **O(1)**。 内存连续,缓存友好:数据连续存放,充分利用 CPU 缓存机制,访问效率高。 空间开销小:仅需存储数据,无需额外指针字段,内存利用率高。 缺点: 插入/删除效率低:在中间或头部操作时,需移动大量元素,时间复杂度为 **O(n)**。 固定容量:需预先分配连续内存空间,扩容需复制全部数据,动态扩展成本高。 内存浪费:若预分配空间过大,可能造成内存冗余。 链式存储逻辑上不要求连续,物理上⼀定连续 优点: 动态内存分配:无需预先分配固定空间,按需动态扩展,内存利用率高。 插入/删除高效:仅需修改指针指向,时间复杂度为...
命题逻辑
命题逻辑基础1. 什么是命题?命题是一个陈述句,它必须具有明确的真值(真或假)。命题是逻辑推理的基本单位。 1.1 命题的例子✅ 是命题的句子: “2 + 2 = 4”(真命题) “地球是方的”(假命题) “所有的素数都是奇数”(假命题) ❌ 不是命题的句子: “你好吗?”(疑问句) “请关门”(祈使句) “x + 1 = 5”(在x未确定时无法判断真假) 2. 命题运算命题可以通过逻辑运算符进行组合,形成复合命题。以下是主要的命题运算符,按优先级从高到低排列: 符号名称 含义 真值表规则(p, q为命题) 其他表示方式 ¬非 命题的否定 $ \neg $命题的否定 $ \neg p $ 为真 $ \leftrightarrow $ p 为假 NOT p ∧与 两个命题同时为真时结果为真 $ p \land q $ 为真 $ \leftrightarrow $ p和q均为真 p AND q ∨或 两个命题至少一个为真时结果为真 $ p \lor q $ 为假 $ \leftrightarrow $ p和q均为假 p OR...