priority_queue模拟实现
目录
介绍
模拟实现
无参构造函数
迭代器构造
push插入
pop删除
top返回队首元素
返回队列元素个数
判空
仿函数
补充:反向迭代器
模拟实现反向迭代器
构造和析构
重载++和--
解引用*和地址访问->
!=
反向迭代器在容器中实现
补充练习
数组中第K大元素
介绍
在C++的<queue>头文件中一共定义了两个容器,准确来说是容器适配器,分别是queue队列和priority_queue优先级队列,两者比较相似,主要区别是priority_queue会对数据进行排序,会将数据中的最大值或最小值放再头部,其他基本上没有区别。
priority_queue优先级队列与数据结构堆比较相似。
关于queue队列和heap堆下面有详细介绍。
二叉树(C语言)_二叉树 csdn-CSDN博客文章浏览阅读1.4k次,点赞22次,收藏20次。帮助读者快速掌握树这一数据结构,了解堆的功能,能够实现堆排序,以及如何再大量数据中快速找到前K个最大元素,如何处理普通二叉树,普通二叉树的遍历等知识。_二叉树 csdnhttps://blog.csdn.net/2401_87944878/article/details/145262931
std::stack和std::queue-CSDN博客文章浏览阅读818次,点赞26次,收藏37次。本文通过对stack和queue两个容器适配器的模拟实现,对deque容器的解释来让读者能够更好的理解使用stack和queue的功能,文章结尾配有习题来供读者练习。https://blog.csdn.net/2401_87944878/article/details/146024780
模拟实现
前面说过priority_queue是容器适配器,所以在模板参数的位置也需要添加一个容器的模板参数。其默认迭代器是vector。
无参构造函数
template<class T,class Container=vector<T>>
class priority_queue
{
public:priority_queue() //类的成员是自定义类型,会调用其自己的构造函数{}private:Container _con;
};
迭代器构造
迭代器构造就要将数据依次插入,然后调整。
此处采用向下调整的方式,因为向下调整的效率是要高于向上调整的,具体请看二叉树(C语言)_二叉树 csdn-CSDN博客文章浏览阅读1.4k次,点赞22次,收藏20次。帮助读者快速掌握树这一数据结构,了解堆的功能,能够实现堆排序,以及如何再大量数据中快速找到前K个最大元素,如何处理普通二叉树,普通二叉树的遍历等知识。_二叉树 csdnhttps://blog.csdn.net/2401_87944878/article/details/145262931
//向下调整
void AdjustDown(int parent)
{int child = 2 * parent + 1;while (child < _con.size()){//对于堆即满二叉树来说,一个父节点有两个子节点,所以要对左右节点进行比较if (child + 1 < _con.size() && _con[child + 1] > _con[child]){++child;}//子节点大于父节点,子节点向上调整if (_con[child] > _con[parent]){std::swap(_con[child], _con[parent]);parent = child;child = 2 * parent + 1;}else{break;}}
}//迭代器构造
template<class InputIterator>
priority_queue(InputIterator first, InputIterator last)
{//先将数据插入while (first != last){_con.push_back(*first);++first;}//将数据进行调整for (int i = _con.size() - 1; i >= 0; --i){//进行向下调整AdjustDown(i);}
}
push插入
此处我们以大堆来模拟实现优先级队列(最大元素在队首)。
优先级队列本质是堆,即二叉树,此处要用到父节点和子节点,代码实现是直接使用。对代码有疑问可转至二叉树(C语言)_二叉树 csdn-CSDN博客。
优先级队列的插入就是,先将数据插入到尾部,再对新数据向上调整,找到新数据的合适位置。
//向上调整
void AdjustUp(int child)
{int parent = (child - 1) / 2;while (child > 0){if (_con[child] > _con[parent]) //子节点大于父节点,将子节点向上调整{std::swap(_con[child], _con[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}
}void push(const T& val)
{//将数据插入到尾部_con.push_back(val);//进行向上调整AdjustUp(_con.size()-1);}
此处如果想要建小堆,应该怎么办???再写一个优先级队列???
此处可以使用仿函数实现,结尾会讲解。
pop删除
pop删除的是队首的元素。
pop的时候为了防止堆的整体结构被破坏。先将队首元素和队尾元素交换,将尾节点pop再对队首元素进行向下调整,找到其目标位置。
//向下调整
void AdjustDown(int parent)
{int child = 2 * parent + 1;while (child < _con.size()){//对于堆即满二叉树来说,一个父节点有两个子节点,所以要对左右节点进行比较if(child+1<_con.size()&&_con[child+1]>_con[child]){++child;}//子节点大于父节点,子节点向上调整if (_con[child] > _con[parent]){std::swap(_con[child], _con[parent]);parent = child;child = 2 * parent + 1;}else{break;}}
}void pop()
{//先将队首和队尾元素进行交换std::swap(_con[0], _con[_con.size() - 1]);//将队尾元素pop_con.pop_back();//对队首元素进行向下调整AdjustDown(0);
}
top返回队首元素
T& top()
{return _con[0];
}
返回队列元素个数
size_t size()
{return _con.size();
}
判空
bool empty()
{return _con.size() == 0;
}
仿函数
上面我们实现了一个大堆的优先级队列,那如果要实现小堆的优先级队列应该怎么办???再写一个类???再写一个类是可以实现的,但是代码长度会变大也是毫无疑问的。因此引入了仿函数。
仿函数虽然叫函数但是其实际上是自定义类。只不过这个类可以像函数一样使用。
下面实现一个比较是否小于的仿函数。
template<class T>
class Less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};
可以看到以上代码只是实现了一个<小于运算符重载,但是在外部只需要定义一个Less类就可以直接使用该比较。
Less<int> com; //定义一个类
int a = 10;
int b = 20;
com(a, b);
可以看到以上是调用的类,com(a,b)就像调用函数一样,因此将其命名为仿函数。
因此在实现优先级队列的时候需要再添加一个类,用于比较,来决定是大堆还是小堆。
因此上面的模拟实现需要修改。
需要再添加一个私有成员,来定义一个比较类的对象。
private:Container _con;Comp _com;
对模板进行修改。
template<class T,class Container=vector<T>,class Comp=Less<T>>
对向上,向下调整的比较进行修改。
if (_com(_con[child] , _con[parent]))
补充:反向迭代器
反向迭代器与正向迭代器一样可以是内置类型的指针,也可以是类。库中的反向迭代器是用类实现的,直接调用正向迭代器模拟实现。
模拟实现反向迭代器
正向迭代器的区间和反向迭代器的区间是镜像对称的。
库中的反向迭代器的++是调用这里其对应的正向迭代器的--实现,而--就用++实现。正向的begin()是反向的rend(),正向的end()是反向的rbegin(),所以在重载*和重载&的时候要注意位置。
构造和析构
反向迭代器与正向迭代器相比,反向迭代器多了一个模板参数iteartor,来接受不同的正向迭代器。
//模拟实现反向迭代器
template<class Ref ,class Ptr ,class Iterator>
class Reverse_iterator
{typedef Reverse_iterator<Ref, Ptr, Iterator> Self;
public:Reverse_iterator(const Iterator& it):_it(it){}~Reverse_iterator(){}private:Iterator _it; //反向迭代器的成员是正向迭代器所以不需要写其构造和析构会自动调用。
};
重载++和--
反向迭代器的++就是正向迭代器的--,反向迭代器的--同理。
//重载++
Self& operator++()
{--_it;return *this;
}//重载--
Self& operator--()
{++_it;return *this;
}
解引用*和地址访问->
注意反向迭代器与正向迭代器是进行对称的,正向迭代器是左闭右开的所以反向迭代器是左开右闭的,因此在解引用的时候应给是对右边一个数进行操作的。
//重载*解引用
Ref operator*()
{return *(--_it); //先--后解引用
}//重载->访问
Ptr operator->()
{return &(operator*());
}
!=
//重载!=
bool operator!=(const Self& rit)
{return _it == rit._it;
}
反向迭代器在容器中实现
//实现反向迭代器
//非const版本
typedef Reverse_iterator<T&, T*, iterator> reverse_iterator;
typedef Reverse_iterator<const T&, const T*, const_iterator> const_reverse_iterator;
reverse_iterator rbegin()
{return reverse_iterator(end()); //临时变量
}reverse_iterator rend()
{return reverse_iterator(begin());
}
//const版本
const_reverse_iterator rbegin()const
{return const_reverse_iterator(end());
}
const_reverse_iterator rend()const
{return const_reverse_iterator(begin());
}
补充练习
数组中第K大元素
数组中的第K个最大元素https://leetcode.cn/problems/kth-largest-element-in-an-array/
解法:只用优先级队列,设置一个有k个元素的小堆优先级队列,先放入k个元素,再依次将数组中比队首元素小的交换。最后堆顶的元素就是第K大元素。
class Solution {
public:int findKthLargest(vector<int>& nums, int k) {priority_queue<int,vector<int>,greater<int>> ans;int i=0;while(k--){ans.push(nums[i++]);}while(i<nums.size()){if(ans.top()<nums[i]){ans.pop(); //将队列中最小元素pop,再插入下一个元素ans.push(nums[i++]);}else{++i;}}return ans.top();}
};
相关文章:
priority_queue模拟实现
目录 介绍 模拟实现 无参构造函数 迭代器构造 push插入 pop删除 top返回队首元素 返回队列元素个数 判空 仿函数 补充:反向迭代器 模拟实现反向迭代器 构造和析构 重载和-- 解引用*和地址访问-> ! 反向迭代器在容器中实现 补充练习 数组中第…...
ChatGPT、DeepSeek、Grok:AI 语言模型的差异与应用场景分析
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 人工智能(AI)语言模型正在快速发展,ChatGPT(OpenAI)、DeepSe…...
Nginx 刷新后 404 的原因与解决方案
文章目录 Nginx 刷新后 404 的原因与解决方案静态资源路径问题(单页应用 SPA)解决方案:使用 try_files Nginx 资源路径 (root 或 alias) 配置错误示例:正确的 root配置 浏览器缓存或 Nginx 缓存影响清除浏览器缓存给静态资源加版本…...
AI赋能实时安全背带监测解决方案
背景:安全背带检测的行业刚需与技术痛点 在建筑施工、石油化工、仓储物流等高危行业中,安全背带是保障作业人员生命安全的最后一道防线。据统计,超过30%的高空坠落事故与未正确佩戴安全背带直接相关。传统依赖人工巡检的监督方式存在效率低、…...
【ES6】03-Set + Map
本文介绍两种集合 set map 的操作和方法。 目录 1. Set 1.1 set基本使用 1.2 add 1.3 delete 1.4 has 1.5 size 1.6 set转换为数组 1.7 拓展运算符 1.8 for...of 1.9 forEach 1.10 set给数组去重 2. Map 2.1 创建map集合 2.2 set添加元素 2.3 delete删除元素 …...
GHCTF web方向题解
upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…...
网页制作15-Javascipt时间特效の记录网页停留时间
01效果图: 02运用: window.setTimeout()刷新function()函数document.forms():表单if条件语句window.alert()窗口警示 03、操作代码:…...
LeetCode 解题思路 15(Hot 100)
解题思路: 引入哑节点: 简化头节点删除操作,统一处理所有边界条件。快慢指针法: 快指针先移动 n 步,确保快慢指针距离为 n,之后同步移动快慢指针。当快指针到达末尾时,慢指针指向倒数第 n 个节…...
STM32 - 在机器人领域,LL库相比HAL优势明显
在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...
如何查看mysql某个表占用的空间大小
在MySQL中,有几种方法可以查看某个表占用的空间大小。这通常涉及到查询数据库的元数据表,如 information_schema.TABLES,或者使用特定于存储引擎的命令(例如对于InnoDB引擎)。以下是几种常用的方法: 方法一…...
加固脱壳技术:DEX动态加载对抗
1. 加固技术原理剖析 1.1 DEX保护演进路线 加固方案发展历程: graph LR A[2015 代码混淆] --> B[2017 DEX动态加载] B --> C[2019 VMP指令虚拟化] C --> D[2022 全链路加密] 1.1.1 主流加固方案对比 厂商核心防护技术弱点分析梆梆加固DEX文件分片…...
树莓派 连接 PlutoSDR 教程
在树莓派5上安装PlutoSDR(ADALM-Pluto)的驱动程序,主要需要安装相关的库和工具,以便与PlutoSDR通信,比如libiio和libad9361,并确保系统能够识别设备。由于树莓派5运行的是基于Linux的系统(通常是…...
山东省新一代信息技术创新应用大赛-计算机网络管理赛项(样题)
目录 竞赛试题 网络拓扑 配置需求 虚拟局域网 IPv4地址部署 OSPF及路由部署 配置合适的静态路由组网 MSTP及VRRP链路聚合部署 IPSEC部署 路由选路部署 设备与网络管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 竞赛试题 本竞赛使用HCL(华三云实验室)来进行网络设备选择…...
文件上传漏洞
文件上传条件 有上传点 后缀没有过滤且可解析 能找到web路径 常见的绕过方式 前端绕过:上传一张图片,抓包修改后缀为php content-type绕过: applicaition/x-www-form-urlencoded multipart/form-data application/json image/jpeg image/png…...
Java 绘制图形验证码
在 Spring Boot 中生成图形验证码并校验其正确性,通常包括以下步骤: 生成验证码图片和对应的验证码值。将验证码值存储到 Session 或其他存储中(如 Redis)。将验证码图片返回给客户端。客户端提交表单时,校验用户输入的…...
APP自动化测试-备忘录:Appium 2.X的安装和启动服务方法
一、Appium 1.X 启动appium服务:appium --session-override 也可以这样启动appium服务:appium 二、Appium 2.X Appium 2.X 是一个自动化测试开源工具,用于测试原生、移动 Web 和混合应用程序。下面为你介绍其下载步骤: 1. 安装…...
卡尔曼滤波算法从理论到实践:在STM32中的嵌入式实现
摘要:卡尔曼滤波(Kalman Filter)是传感器数据融合领域的经典算法,在姿态解算、导航定位等嵌入式场景中广泛应用。本文将从公式推导、代码实现、参数调试三个维度深入解析卡尔曼滤波,并给出基于STM32硬件的完整工程案例…...
k8s serviceaccount在集群内指定apiserver时验证错误的问题
在主机上,找到TOKEN,可以直接指定apiserver使用 rootubuntu-server:/home# kubectl auth can-i --list --server https://192.168.85.198:6443 --token"eyJhbGciOiJSUzI1NiIsImtpZCI6IlFlMHQ3TzhpcGw1SnRqbkYtOC1NUWlWNUpWdGo5SGRXeTBvZU9ib25iZD…...
自动化测试脚本
一、自动化测试脚本是什么? 自动化测试脚本是由测试人员或开发人员编写的 代码或工具指令,用于 自动执行测试用例,模拟用户操作(如点击按钮、输入数据),并对结果进行验证。 它与手动测试的核心区别在于&am…...
练习-串串变变变(字符串变换)
问题描述 小蓝现在有一个长度为 n 仅由小写字母组成的的字符串 s ,小蓝可以对字符串进行任意次操作,每次操作小蓝可以选择一个整数 ii ,其中 i∈[1,n−1],然后选择如下两种操作之一: 将 si 变为其字典序加一的小写…...
99.HarmonyOS NEXT跑马灯组件教程:动画配置与参数详解
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT跑马灯组件教程:动画配置与参数详解 文章目录 HarmonyOS NEXT跑马灯组件教程:动画配置与参数详解1. 跑马灯动…...
【web逆向】优某愿 字体混淆
地址:aHR0cHM6Ly93d3cueW91enkuY24vY29sbGVnZXMvc2NvcmVsaW5lP2NvbGxlZ2VDb2RlPTEwMDAzJm5hbWU9JUU2JUI4JTg1JUU1JThEJThFJUU1JUE0JUE3JUU1JUFEJUE2 接口分析 接口:eW91enkuZG1zLmRhdGFsaWIuYXBpLmVucm9sbGRhdGEuZW50ZXIuY29sbGVnZS5lbmNyeXB0ZWQudj…...
MSP430 Proteus 仿真作品
https://www.dong-blog.fun/post/1998 1 、 电子万年历(采用 DS1302 及 及 TC72 等芯片) 基本要求: 可显示年、月、日、星期、时、分、秒; 有温度显示功能。 发挥部分: 可调节时间和日期; 有农历显示功能 &…...
八股文——C 语言宏、`volatile`、`static`、动态内存管理、堆与栈的区别
文章目录 1. #(字符串化操作符)作用:示例: 2. ##(符号连接操作符)作用:示例1:动态生成变量名 3. volatile 关键字作用:示例: 4. static 关键字作用࿱…...
创新实践分享:基于边缘智能+扣子的智能取物机器人解决方案
在 2024 年全国大学生物联网设计竞赛中,火山引擎作为支持企业,不仅参与了赛道的命题设计,还为参赛队伍提供了相关的硬件和软件支持。以边缘智能和扣子的联合应用为核心,参赛者们在这场竞赛中展现出了卓越的创新性和实用性…...
【QT笔记---QText】
文章目录 概要1、字体样式设置1.1效果1.2demo1.3常用成员函数 概要 QText基本应用:1、字体样式设计; 1、字体样式设置 1.1效果 1.2demo //若需要设置字体、字体大小、字宽或者斜体状态的话,可以直接初始化时一起设置 // QFont::QFont(cons…...
Html label标签中的for属性(关联表单控件:将标签与特定的表单元素(如输入框、复选框等)关联起来;提高可用性;无障碍性)
文章目录 示例代码for属性含义完整代码示例 示例代码 <div class"form-group"> <!-- 表单组,包含省份输入框和标签 --><label for"province">省份名称:</label> <!-- 省份输入框的标签 --><input…...
二叉树的基本操作与实现:C语言深度剖析
目录 代码整体框架 1. #define _CRT_SECURE_NO_WARNINGS 2. 头文件引入 3. typedef int BTtype; 4. 二叉树节点结构体定义 二叉树的创建 1. BuyNode 函数 2. CreatNode 函数 二叉树的遍历 前序遍历 中序遍历 后序遍历 二叉树属性的计算 节点个…...
【人工智能】Deepseek 与 Kimi 联袂:重塑 PPT 创作,开启智能演示新纪元
我的个人主页 我的专栏:人工智能领域、java-数据结构、Javase、C语言,希望能帮助到大家!!!点赞👍收藏❤ 前言 在当今快节奏的工作与学习场景中,PPT 制作常常是一项耗时耗力的任务。从前期的资…...
Nest系列:NestJS 中 Logger 完全指南:从基础到企业级实践-04
一、Logger 的核心价值 在服务端应用中,日志系统承担着三大核心职责: 系统监控:实时反馈应用健康状态问题追踪:快速定位异常根源行为审计:记录关键业务操作NestJS 内置的日志系统提供了开箱即用的解决方案,支持: ✅ 多日志级别管理 ✅ 上下文感知日志 ✅ 自定义输出格式…...
行为模式---模版模式
概念 模版模式是设计模式行为模式的一种,它的核心思想是定义一个算法骨架,将某些步骤提取到到子类中实现。解决当项目中出现多个处理分支,这几个处理分支有重复步骤的时实现代码的复用和扩展。在这种模式下不用修改逻辑结构,使用…...
C++博客分享
本周的一些 C视频分享, 或许后续会做一些内容总结. 博客 Polymorphic, Defaulted EqualityConstexpr factors_ofC26: Removing language featuresBypassing the branch predictor Meeting C 2024 Clean CMake for C (library) developers - Kerstin KellerAn Introduction …...
Cesium 入门教程(基于 vue3)
目录 Cesium 介绍: 下载 Cesium,2种路径: 下载成功后,创建 vue3 项目: 编写内容 一个“纯”地球 添加图层 坐标系及其数值转换 相机位置及动态交互 添加物体和3维建筑物 Cesium 介绍: Cesium 是一个开源的 JavaScript …...
Power Apps 技术分享:连接SharePoint列表数据源
前言 在使用Power Apps的时候,使用列表作为数据源是非常方便和经济的,列表创建简单,SharePoint的存储也不像Dataverse需要按照容量付费。 正文 1.我们先在SharePoint中建一个列表,添加一些测试数据,如下图:…...
Flutter FloatingActionButton 从核心用法到高级定制
目录 1. 引言 2. FloatingActionButton 的基本用法 3. 主要属性 4. 进阶定制技巧 4.1 扩展型 FAB 4.2 动态变形动画 4.3 多个 FAB 协同 5. 主题与动效集成 5.1 全局主题配置 5.2 平台适配方案 5.3 高级动画控制器 6. 最佳实践 6.1 布局规范 6.2 性能优化 6.3 无…...
42、【OS】【Nuttx】【OSTest】内存监控:堆空间初始化
背景 接上篇blog 41、【OS】【Nuttx】【OSTest】内存监控:堆空间申请 分析了堆空间的申请,下面分析堆管理器如何初始化申请后的堆空间 用户堆空间初始化 回到 umm_initialize 函数,之前 blog 40、【OS】【Nuttx】【OSTest】内存监控&#…...
STM32---FreeRTOS消息队列
一、简介 1、队列简介: 队列:是任务到任务,任务到中断、中断到任务数据交流的一种机制(消息传递)。 FreeRTOS基于队列,实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量…...
Web前端开发——CSS入门
CSS入门 一、CSS是什么?二、CSS的基本语法三、如何使用CSS1. 内联样式2. 内部样式表3. 外部样式表 四、CSS选择器1. 元素选择器2. 类选择器3. ID选择器 五、CSS的常用属性1. 文本样式2. 布局3. 背景 一、CSS是什么? CSS(Cascading Style She…...
C#核心笔记——(五)框架概述
.NET Ftamework中几乎所有功能都是通过大量的托管类型提供的。这些类型组织在层次化的命名空间中,并打包为一套程序集,与CLR一起构成了.NET平台。 有些.NET类型是由CLR直接使用的,且对于托管宿主环境而言是必不可少的。这些类型位于一个名为…...
前端---CSS(前端三剑客)
1.基本语法规范 选择器 {⼀条/N条声明} • 选择器决定针对谁修改 (找谁) • 声明决定修改啥. (⼲啥) • 声明的属性是键值对. 使⽤ ; 区分键值对, 使⽤ : 区分键和值 比如: <!DOCTYPE html> <html lang"en"> <head><meta…...
JS基础部分
引入方式 内部脚本 外部脚本 变量 使用let声明变量,弱类型,使用const声明常量 因为箭头函数中this指针有问题,会默认指向父级对象 DOM 文档对象模型,将标记语言的各个部分封装成对应的对象。js通过dom就能够对html进行操作 …...
五大基础算法——模拟算法
模拟算法 是一种通过直接模拟问题描述的过程或规则来解决问题的算法思想。它通常用于解决那些问题描述清晰、步骤明确、可以直接按照规则逐步实现的问题。以下是模拟算法的核心概念、适用场景、实现方法及经典例题: 一、核心概念 问题描述清晰 问题的规则和步骤明确…...
蓝桥杯学习-12递归
12递归 1.概述 2.几个递归模板 (1)求阶乘 int f(int n){ if(n 1) return 1; return f(n-1) * n; }(2)斐波拉契序列 int f(int n){ if(n 1 || n 2) return n; return f(n - 1) f(n - 2); }例题一-蓝桥5194 int f(int n){if(n 0) return 1;if(n % 2 0) return f(n / 2)…...
K8S的搭建
一。关闭防火墙和SELinux 1.1systemctl stop firewalld 1.2setenfoce 0 二。配置内核转发以及网桥过滤 2.1vi /etc/sysctl.d/k8s.conf 2.2sysctl -p /etc/sysctl.d/k8s.conf :让文件生效 2.3modprobe br_netfilter:加载模块 三。启动ipvsÿ…...
Python学习第十八天
Django模型 定义:模型是 Django 中用于定义数据库结构的 Python 类。每个模型类对应数据库中的一张表,类的属性对应表的字段。 作用:通过模型,Django 可以将 Python 代码与数据库表结构关联起来,开发者无需直接编写 S…...
Linux 命令学习记录
Linux 命令详解与进阶指南 Linux 是一种广泛使用的开源操作系统,掌握 Linux 命令是开发者和系统管理员的必备技能。本文将详细介绍 Linux 的常用命令,并涵盖一些高级进阶技巧,帮助你更高效地使用 Linux。 目录 基础命令 文件与目录操作文本…...
Python中的uv run时,--with参数的作用
在Python生态中,工具链的效率和场景适应性始终是开发者关注的焦点。UV工具链的uv run命令不仅继承了Rust的高性能基因,其--with参数更是将临时依赖管理提升到全新维度。本文将深度解析这一核心参数的原理与应用场景。 一、–with参数的技术突破 1. 功能本质 --with参数实现…...
【算法学习之路】10.二叉树
二叉树 前言一.简介二.题目123 前言 我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新,其他的也会陆陆续续的更新,希望大家点…...
【大模型实战篇】使用GPTQ量化QwQ-32B微调后的推理模型
1. 量化背景 之所以做量化,就是希望在现有的硬件条件下,提升性能。量化能将模型权重从高精度(如FP32)转换为低精度(如INT8/FP16),内存占用可减少50%~75%。低精度运算(如INT8…...
点灯、点各式各样的灯
鱼离水则身枯,心离书则神索。 前言闪灯呼吸灯流水灯二进制数显示灯蜂鸣器节拍流水音乐会总结 前言 上回书咱们简单了解了一点有关特殊功能寄存器sfr、通用输入输出GPIO、位操作运算符sbit和一个不靠单片机上的晶振(拿来定时的)的依托于单片机CPU空操作的ms级延时函…...