数据结构与算法实现
数据结构与算法实现 1, 顺序表(SeqList) 顺序表是线性表的顺序存储结构,它是用一组地址连续的存储单元依次存储线性表中的各个元素。 特点: 随机访问: 可以在O(1)时间内通过下标直接访问任意元素 存储密度高: 数据元素之间不需要额外空间存储逻辑关系 插入和删除操作需要移动大量元素: 时间复杂度为O(n) 需要预分配内存空间: 可能存在空间浪费或溢出问题 时间复杂度分析: 按位查找(getElem):O(1) 按值查找(locateElem):平均O(n) 插入操作(insertElem):平均O(n),最坏O(n) 删除操作(deleteElem):平均O(n),最坏O(n) 追加操作(appendElem):O(1) 顺序表扩容机制: 通常顺序表满时,会创建一个更大的数组(如原来的1.5倍或2倍),并将原数据复制到新数组中,然后释放旧数组。这是动态数组(如C++ STL...
JavaGame实现笔记
JavaGame:一个用Java实现的Pygame风格游戏开发模块 一、项目背景 Pygame是Python生态中非常流行的游戏开发库,它提供了简单易用的API,让开发者能够快速创建2D游戏。然而,对于Java开发者来说,虽然有JavaFX、LibGDX等游戏开发框架,但缺乏一个像Pygame那样轻量级、易于上手的选择。 为此,我开发了JavaGame模块,这是一个用Java实现的类似Pygame的游戏开发库,基于JavaFX构建,提供了简洁明了的API,让Java开发者也能享受到Pygame式的开发体验。 二、设计理念 JavaGame的设计理念主要有以下几点: 简单易用:提供类似Pygame的简洁API,降低游戏开发门槛 轻量级:核心模块只有几个Java文件,易于集成和扩展 高性能:采用双缓冲技术,避免屏幕闪烁,提供流畅的游戏体验 线程安全:事件队列采用线程安全设计,确保多线程环境下的稳定性 跨平台:基于JavaFX,支持Windows、macOS和Linux等主流操作系统 三、核心功能 1....
C++后端服务器实现笔记
C++后端服务器实现笔记 仓库 项目结构 123456789101112131415161718192021222324252627282930313233343536├── .github/ # GitHub配置目录│ └── workflows/ # GitHub Actions工作流├── .gitignore # Git忽略配置├── 3rdparty/ # 第三方库目录│ ├── mysql/ # MySQL客户端库│ │ ├── include/ # MySQL头文件│ │ └── lib/ # MySQL库文件│ └── redis/ # Redis客户端库│ ├── include/ # Redis头文件│ └── lib/ # Redis库文件├── CMakeLists.txt # CMake构建配置├── LICENSE ...
Transformer大语言模型架构原理学习笔记
Transformer大语言模型架构原理学习笔记 1. 模型架构与优化方法 在架构里面,我们做的就是把输入的x映射到输出的y,这个映射过程就是模型架构。但是如果模型里面的参数或者是这个模型是随机的,那么这个模型就没有意义,所以我们需要优化方法来优化模型。 就笔者的理解,模型内部实际上就是一堆矩阵(线性变换),与输入x进行矩阵乘法,得到输出y。通过训练,我们希望模型内部的矩阵能够尽量使得输入x映射到输出y。 但是完全的映射是不能的,因为输入和输出都是离散的,所以我们需要一个函数来衡量模型的预测结果与真实结果之间的差距,然后通过优化方法来最小化这个函数,从而优化模型内部的矩阵。 这个函数就是所谓的损失函数,常见的损失函数有均方误差、交叉熵等。(交叉熵是分类任务常用的损失函数,均方误差是回归任务常用的损失函数) 优化方法有梯度下降、牛顿法等。 这里Transformer模型架构的学习我采用了交叉熵(原因参见下文)作为损失函数,采用梯度下降作为优化方法(这个算法成本最低,其他的都还不懂)。 2....
快速幂、逆元与组合数学
快速幂、逆元与组合数学 快速幂 快速幂是一种用于计算 $a^b$ 的算法,其时间复杂度为 $O(\log b)$。 原理 快速幂的原理是利用二进制分解指数,将指数 $b$ 转化为二进制表示,然后通过不断平方和乘法来计算 $a^b$。 例如,计算 $a^{13}$,我们可以将其转化为 $a^{1101}_2$,然后通过以下步骤计算: $a^1 = a$ $a^2 = a^1 \times a^1 = a \times a$ $a^4 = a^2 \times a^2 = (a \times a) \times (a \times a)$ $a^8 = a^4 \times a^4 = ((a \times a) \times (a \times a)) \times ((a \times a) \times (a \times a))$ $a^{13} = a^8 \times a^4 \times a^1 = ((a \times a) \times (a \times a)) \times ((a \times a) \times (a \times...
常用数据结构
常用数据结构 1,头文件 1234567891011121314#include <iostream>#include <iomanip>#include <cmath>#include <string>#include <vector>#include <algorithm>#include <map>#include <set>#include <unordered_map>#include <unordered_set>#include <queue>#include <deque>#include <stdexcept>#include <random> 2,自定义数据结构 1, 线段树 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152// 1>,...
THYTHM 音游
THYTHM 音游 项目地址 :https://github.com/Sakjijdidji55/Thythm-2.0/tree/master
力扣每日一题讲解
力扣每日一题讲解 2025-07-24 2322 从树中删除边的最小分数 题目链接: https://leetcode.cn/problems/minimum-score-after-removals-on-a-tree/ 问题描述: 存在一棵无向连通树,树中有编号从 0 到 n - 1 的 n 个节点, 以及 n - 1 条边。 给你一个下标从 0 开始的整数数组 nums ,长度为 n ,其中 nums[i] 表示第 i 个节点的值。另给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] = [ai, bi] 表示树中存在一条位于节点 ai 和 bi 之间的边。 删除树中两条 不同 的边以形成三个连通组件。对于一种删除边方案,定义如下步骤以计算其分数: 分别获取三个组件 每个 组件中所有节点值的异或值。 最大 异或值和 最小 异或值的 差值 就是这一种删除边方案的分数。 例如,三个组件的节点值分别是:[4,5,7]、[1,9] 和 [3,3,3] 。三个异或值分别是 4 ^ 5 ^ 7 = 6、1 ^ 9 = 8 和 3 ^ 3 ^ 3 =...
数据结构入门
数据结构入门 1, 哈希表的c语言与c++实现 1.1...
四至五月学习笔记
学习笔记 力扣 982 按位与为零的三元组 思路:暴力枚举 先枚举一二个数,再看第三个数是否满足条件 前者是O(n^2) 123456unordered_map<int, int> cnt; // 记录每个数出现的次数for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { cnt[arr[i] & arr[j]]++; // 记录每个数出现的次数 }} 然后用一个循环遍历所有可能的数,看是否满足条件,并且找到每个数的补码集合 12345678for (int i:arr){ int mask = i^((1<<16)-1); // 找到补码,因为数据最大是16位,所以补码是1<<16-1 int sub = mask; do{ ans += cnt[sub]; sub = (sub-1)&mask; //...









