C++排序算法(一)
一.初识排序
排序是将一组数据元素按照特定的顺序(如升序或降序)进行重新排列的操作。排序算法则是实现这种数据重新排列的具体方法。
c/c++中,这些元素可以是各种数据类型,比如整数、浮点数、字符串,甚至是自定义的结构体或类对象。排序的目的通常是为了提高数据检索、分析和处理的效率。例如,在一个已排序的数组中进行二分查找,时间复杂度可以从无序数组的 O(n) 降低到 O(log n)。
不同的排序算法在时间复杂度、空间复杂度和稳定性等方面各有特点:
①时间复杂度:衡量算法执行所需时间随数据规模增长的变化情况,如 O(n^2)、O(n \log n) 等。
②空间复杂度:表示算法在执行过程中临时占用存储空间的大小,例如 O(1) 表示原地排序,不需要额外的大量空间。
③稳定性:若排序前后相同元素的相对顺序保持不变,该排序算法就是稳定的。比如在对包含相同分数的学生成绩进行排序时,稳定排序能保证原有的学生顺序关系不变。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等,每种算法都基于不同的策略来实现数据的排序。
二.常见排序算法的模拟实现
1.插入排序
插入排序是把数据分为已排序和未排序两部分。起初,已排序部分只有第一个元素。接着,算法从第二个元素开始,依次将未排序元素取出,在已排序部分从后往前找合适位置插入。每次插入后,已排序部分依然有序,直至所有元素都插入到已排序部分,完成整个序列的排序。插入排序适用于小规模数据或部分有序的数据,平均和最坏时间复杂度为 O(n^2),最好情况接近 O(n),空间复杂度 O(1),且是稳定排序算法 。
①直接插入排序
当插入第 i(i>=1) 个元素时,前⾯的array[0],array[1],…,array[i-1] 已经排好序,此时
⽤ array[i] 的排序码与 array[i-1],array[i-2],… 的排序码顺序进⾏⽐较,找到插⼊位置即将 array[i] 插入,原来的位置上的元素顺序后移。
如下图所示
参考代码
这段实现直接插入排序的代码。直接插入排序是一种简单直观的排序算法,它将一个数据插入到已经排好序的数组中的适当位置。这段代码中,外层循环逐步扩大有序序列范围,内层循环通过比较和移动元素,把当前无序部分的第一个元素插入到有序序列的合适位置,最终实现整个数组的有序排列。
测试结果 如下
②希尔排序
希尔排序(Shell Sort)是插入排序的改进版,也叫缩小增量排序。
基本思想
先把待排序记录序列分割成若干子序列分别进行直接插入排序,使序列“基本有序”后,再对全体记录进行一次直接插入排序。这里“基本有序”指数据元素相对位置大致正确,离最终位置不远。
算法步骤
1. 选增量序列:确定 h_1, h_2, \cdots, h_t 这样的增量序列,满足 h_1 > h_2 > \cdots > h_t = 1 。常见的如希尔提出的 h_i = \frac{n}{2^k} (n 是待排序序列长度,k 从大到小取值 )。
2. 分组排序:依据增量 h_i 将序列分成 h_i 个子序列(元素下标间隔为 h_i ),分别对这些子序列做直接插入排序。
3. 重复操作:不断减小增量并重复分组排序步骤,当增量为 1 时,进行最后一次直接插入排序,此时序列有序。
性能特点
①时间复杂度:和增量序列选择相关,最坏情况 O(n^2) ,一般比直接插入排序的 O(n^2) 优,平均约 O(n^{1.3}) 。
②空间复杂度:是就地排序,仅需少量额外变量用于元素比较交换,空间复杂度 O(1) 。
③ 稳定性:不稳定,不同子序列排序时相同元素相对位置可能改变。
参考代码
实现希尔排序的代码。希尔排序是对直接插入排序的改进,通过设置不同的增量将数组分组排序。代码中, gap 代表增量,先进行较大增量的分组排序,逐步缩小增量。内层循环中,类似直接插入排序的方式,将待插入元素与有序组内元素比较并移动,直至找到合适位置插入,最终实现数组整体有序。
测试结果如下
2.选择排序
选择排序是简单直观的排序算法。它每次从待排序数据中选出最小(或最大)元素,存放到排序序列起始位置,然后继续从未排序元素中找最值,依次放入已排序序列末尾,直到所有元素排序完毕。其时间复杂度一般为 O(n^2) ,空间复杂度 O(1) ,是不稳定排序算法。
①直接选择排序
1.在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据元素
2. 若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后⼀个(第⼀个)元素 交换
3. 在剩余的 array[i]--array[n-2](array[i+1]--array[n-1]) 集合中,重复上述步 骤,直到集合剩余1个元素为止。
参考代码
直接选择排序代码。通过 while 循环,每次在 begin 到 end 这个范围内找最小和最大的数,分别标记下标。如果起始位置恰好是最大数,就调整下。然后把最小数和起始位置交换,最大数和末尾位置交换,逐步缩小范围,实现数组的排序。
测试结果如下
3. 交换排序
交换排序基本思想:
所谓交换,就是根据序列中两个记录键值的⽐较结果来对换这两个记录在序列中的位置
交换排序的特点是:将键值较⼤的记录向序列的尾部移动,键值较⼩的记录向序列的前部移动
①冒泡排序
冒泡排序是经典排序算法。它重复走访待排序元素,两两比较,若顺序不对则交换,每轮将最大(或最小)元素“冒泡”到末尾。其原理简单,时间复杂度平均和最坏为 O(n^2) ,最好 O(n) (数据已有序时) ,空间复杂度 O(1) ,是稳定排序算法。
参考代码
实现冒泡排序。冒泡排序通过多次比较相邻元素并交换来实现排序。此代码中外层循环控制轮数,内层循环负责每轮比较相邻元素并交换逆序对。 flag 用于标记该轮是否有交换,若无交换说明数组已有序,可提前结束排序,提高效率。
测试结果如下
②快速排序
快速排序是Hoare于1962年提出的⼀种⼆叉树结构的交换排序⽅法,其基本思想为:任取待排序元素 序列中的某元素作为基准值,按照该排序码将待排序集合分割成两⼦序列,左⼦序列中所有元素均⼩ 于基准值,右⼦序列中所有元素均⼤于基准值,然后最左右⼦序列重复该过程,直到所有元素都排列 在相应位置上为⽌。
其平均时间复杂度为 O(nlogn) ,相比一些简单排序算法效率更高,在处理大规模数据时优势明显。但在最坏情况下(如数组基本有序且每次选最小或最大元素作基准) ,时间复杂度会退化到 O(n^2) ,空间复杂度平均为 O(logn) ,属于不稳定排序算法。
参考代码
实现快速排序中查找基准值位置的代码。它选取数组起始元素为基准值,通过左右两个指针( left 和 right )在数组中移动并比较元素,将小于基准值的元素放左边,大于的放右边,最终把基准值放到合适位置,并返回该位置下标,为后续快速排序做准备。
一段实现快速排序的代码。快速排序采用分治思想,此代码中先判断左右边界,若左边界大于等于右边界,说明子数组无需排序,直接返回。然后调用 _QuickSort 函数获取基准值的最终位置 meet ,再分别对基准值左右两侧子数组递归调用 QuickSort 函数,逐步完成整个数组的排序。
测试结果如下
三.比较几种排序的性能
以上代码,功能是创建包含100000个随机整数的数组。代码通过 malloc 函数分配内存,若分配失败则输出错误信息并终止程序。接着利用 srand 结合当前时间设置随机数种子,再通过循环用 rand 函数为数组元素赋值,最后返回指向该数组的指针,为后续排序等操作准备数据。
这段C++ 代码用于记录不同排序算法的运行时间。 recordSingleSortTime 函数实现了对单个排序算法计时的功能,它先调用 CreateData 函数创建包含100000个随机整数的数组,接着用 clock 函数记录排序开始和结束的时间点,计算差值得到排序耗时并输出,最后释放数组内存。
RecordSortTime 函数则负责批量测量多种排序算法的时间,依次调用 recordSingleSortTime 来记录直接插入排序( InsertSort )、希尔排序( ShellSort )、冒泡排序( BubbleSort )、直接选择排序( SelectSort )的耗时。此外,还单独对快速排序( QuickSort )进行计时操作,先创建数据数组,记录排序前后时间,输出快速排序的运行时长,从而方便对比不同排序算法的效率。
main 函数部分,调用 RecordSortTime 函数来测量多种排序算法的运行时间。右侧控制台输出的数值,单位为ms,应分别对应直接插入排序、希尔排序、冒泡排序、直接选择排序和快速排序的耗时。通过这些耗时数据,能直观对比不同排序算法在处理数据时的效率高低。
相关文章:
C++排序算法(一)
一.初识排序 排序是将一组数据元素按照特定的顺序(如升序或降序)进行重新排列的操作。排序算法则是实现这种数据重新排列的具体方法。 c/c中,这些元素可以是各种数据类型,比如整数、浮点数、字符串,甚至是自定…...
链表——C语言
一、单项不带头 #pragma once #include<stdio.h> #include<stdlib.h>typedef int data; typedef struct list {data a;struct list* next; }list;list* buynode(data x);void pushback(list** phead,data x);void popback(list** phead);void pushfront(list** ph…...
Java学习手册:数据库事务相关知识
一、事务的概念与特性 概念 :事务是数据库中一系列操作的集合,这些操作要么全部成功,要么全部失败,是一个不可分割的工作单位。例如,在银行转账系统中,从一个账户扣款和向另一个账户存款这两个操作必须作为…...
碰一碰发视频源码搭建的技术迭代与升级实践
在数字化营销与智能交互场景不断拓展的背景下,碰一碰发视频技术凭借其便捷性和创新性,成为实体商业、文旅宣传等领域的重要工具。然而,随着用户需求升级、技术快速发展,基于源码搭建的碰一碰发视频系统也需持续迭代更新。本文将围…...
Linux 内核学习(6) --- Linux 内核基础知识
目录 Linux 内核基础知识进程调度内存管理虚拟文件系统和网络接口进程间通信Linux 内核编译Makefile 和 Kconfig内核Makefile内核Kconfig 配置项标识的写法depend 关键字select 关键字表达式逻辑关系Kconfig 其他语法 配置文件的编译Linux 内核引导方法Booloader 定义Linux 内核…...
28. C++位图 布隆过滤器 哈希切割相关
文章目录 位图位图概念代码实现将x比特位置1将x比特位置0检测位图中x是否为1全部代码实现 C库中的位图 bitset位图的应用 布隆过滤器布隆过滤器提出布隆过滤器概念布隆过滤器的特点控制误判率布隆过滤器的实现布隆过滤器的插入布隆过滤器的查找布隆过滤器的删除布隆过滤器优点布…...
第2章 神经网络的数学基础
本章我们将梳理一下神经网络所需的数学基础知识,其中大多数内容没有超出高中所学范围,因此读起来不会吃力。 2-1神经网络所需的函数 本节我们来看一下神经网络世界中频繁出现的函数。虽然它们都是基本的函数,但是对于神经网络是不可缺少的。…...
linux环境安装docker
linux环境下载安装docker 参考网址查询服务器的操作系统下载docker1、卸载已安装的docker2、安装dnf-plugins-core 包3、配置镜像仓库4、安装版本安装最新版本安装指定版本 5、设置开机自启动6、运行测试7、卸载重装清理 Docker 系统中不再使用的数据(容器、缓存&am…...
windows使用bat脚本激活conda环境
本文不生产技术,只做技术的搬运工!!! 前言 最近需要在windows上使用批处理脚本执行一些python任务,但是被自动激活conda环境给卡住了,研究了一下解决方案 解决方案 call your_conda_path\Scripts\activa…...
第一章:MySQL 索引基础
第一章:MySQL 索引基础 1. 索引是什么? 定义:索引(Index)是数据库中用于快速查找数据的一种数据结构,类似于书籍的目录。核心作用:通过减少磁盘I/O次数,加速查询速…...
紫光展锐全新奇迹手游引擎,开启游戏“芯”时代
UNISOC Miracle Gaming奇迹手游引擎亮点: • 高帧稳帧:支持《王者荣耀》等主流手游90帧高画质模式,连续丢帧率最高降低85%; • 丝滑操控:游戏冷启动速度提升50%,《和平精英》开镜开枪操作延迟降低80%; • 极速网络&…...
C++ 的未来趋势与挑战:探索新边界
引言 在软件开发的浩瀚宇宙中,C 一直是一颗耀眼的恒星,凭借其卓越的性能和广泛的适用性,在系统编程、游戏开发、嵌入式系统等诸多领域占据着核心地位。随着科技的飞速发展,C 也面临着新的趋势和挑战。本文将深入探讨 C 在 AI 驱动…...
Oracle 开窗函数
Oracle 开窗函数(Window Functions)允许在不合并行的前提下对数据进行复杂分析,常用于排名、累计计算、前后行对比等场景。 一、核心语法结构 函数名() OVER ([PARTITION BY 分区列] [ORDER BY 排序列 [ASC|DESC]] [窗口帧子句 (ROWS | RAN…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.3 动态报表生成(Jupyter Notebook/ReportLab)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:动态报表生成(Jupyter Notebook/ReportLab)一、动态报表生成概述(一)动态报表的重要性&a…...
Oracle OCP认证考试考点详解083系列11
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 51. 第51题: 题目 解析及答案: 关于在 Linux 上安装 Oracle 数据库,以下哪三项是正确的?…...
双11美妆数据分析
1. 导入库使用Python进行分析,需要导入相关库: pythonimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns 1. 读取数据1. 查看数据基本信息 查看前几行:使用 df.head() 查看数据的前5行ÿ…...
github+ Picgo+typora
github Picgotypora 本文将介绍如何使用Picgo在typora中实现上传服务 创建github仓库以及配置token 创建仓库 注意需要Initialize 添加README 配置为public 配置token github点击头像找到setting 选择Developer setting 配置token generate 选第一个第二个都行(我这里选第…...
战术级微波干扰系统:成都鼎轻量化装备如何实现全频段智能压制?
在5G与卫星通信蓬勃发展的今天,成都鼎讯科技推出新一代微波通信干扰设备,以1000-6000MHz全频段覆盖能力,打造单兵可携的"电磁手术刀"。该设备突破传统微波干扰设备"高能耗、大体积"的桎梏,通过军用级模块化设…...
Oracle 数据布局探秘:段与区块的内部机制
前言 在 Oracle 数据库的庞大架构中,数据存储的效率与性能是决定整个系统健康状况的关键因素。Oracle 采用了一套精妙的逻辑存储管理体系来组织和分配数据,其中,“段(Segment)”和“区(Extent)…...
leetcode 142. Linked List Cycle II
题目描述 哈希表解法 这个方法很容易想到,但需要O(N)的空间。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detect…...
探索智能体的记忆:类型、策略和应用
AI Agent 中的记忆:类型、策略和应用 记忆实现是使智能体能够保持上下文、从过去的交互中学习并做出明智决策的关键组成部分。与人类记忆非常相似,智能体记忆允许 AI 系统随时间存储、检索和利用信息,从而为用户创造更连贯和个性化的体验。 …...
mysql集成Qwen大模型MCP计算【附实战代码】
mysql集成Qwen大模型MCP计算 题目分析步骤 1:在 MySQL 中构建核素半衰期数据库1.1 数据库设计1.2 安装和设置 MySQL1.3 创建数据库和表步骤 2:构建放射性活度计算函数2.1 依赖库2.2 Python 函数2.3 函数说明步骤 3:修复 MySQL 访问权限步骤 4:代码实践用户输入指导测试用例…...
006 yum和Linux生态
🦄 个人主页: 小米里的大麦-CSDN博客 🎏 所属专栏: Linux_小米里的大麦的博客-CSDN博客 🎁 GitHub主页: 小米里的大麦的 GitHub ⚙️ 操作环境: Visual Studio 2022 文章目录 Linux 软件包管理器 yum什么是软件包?基于 Linux 系统…...
一种扫描雷达超分辨成像检测一体化方法——论文阅读
一种扫描雷达超分辨成像检测一体化方法 1. 专利的研究目标与产业意义1.1 研究目标与实际问题1.2 产业意义2. 专利的创新方法:低秩稀疏约束与联合优化框架(重点解析)2.1 核心思路与模型构建2.2 迭代优化算法2.3 与传统方法的对比优势3. 实验设计与验证3.1 实验参数3.2 实验结…...
三款实用工具推荐:配音软件+Windows暂停更新+音视频下载!
各位打工人请注意!今天李师傅掏出的三件套,都是经过实战检验的效率放大器。先收藏再划走,说不定哪天就能救命! 一.祈风TTS-配音大师 做短视频的朋友肯定深有体会——配个音比写脚本还费劲!要么付费买声音,…...
云平台的文件如何备份
不同的云平台有不同的文件备份方式,以下以常见的阿里云、腾讯云为例进行介绍: 阿里云 对象存储 OSS 可以通过 OSS 控制台,选择需要备份的 Bucket(存储桶)和文件,手动发起备份操作,将数据复制到…...
密码学系列 - SR25519与ED25519
SR25519 SR25519 是一种高级的数字签名算法,它基于 Schnorr 签名方案,使用的是 Curve25519 椭圆曲线。这种签名算法在密码学社区中广受欢迎,特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。 SR25519 简介 SR25519 是一种 …...
XMP-Toolkit-SDK 编译与示例程序
一、前言 最近在调研图片的元数据读写方案,需要了解 XMP 空间以及如何在 XMP 空间中读写元数据,本文做一个相关内容的记录。 XMP-Toolkit-SDK 以及 XMP标准简介 XMP-Toolkit-SDK 是 Adobe 提供的一套开源软件开发工具包(SDK)&a…...
基于nnom的多选择器
核心组件 元件类型目的接口STM32F103CB微控制器主处理单元-MPU60506 轴 IMU移动侦测I2C 接口W25Q64 系列闪存信号和配置存储SPI 系列按钮用户输入模式选择和激活GPIO (通用输出)搭载了LED用户反馈系统状态指示GPIO (通用输出)RT6…...
铁塔基站项目用电能表有哪些?
简婷 安科瑞电气股份有限公司 上海嘉定 201801 引言:随着5G基站的迅猛发展,基站的能耗问题也越来越突出,高效可靠的基站配电系统方案,是提高基站能耗使用效率,实现基站节能降耗的重要保证,通过多回路仪表…...
ROS-仿真实验平台
(1)ROS基本架构 机器人操作系统(Robot Operating System,ROS)是一款基于开源协议的、针对 机器人进行开发的、灵活可扩展的的软件平台,整合多种软件功能包和开发工具,提 供机器人操作系统所需的…...
Loly: 1靶场渗透
Loly: 1 来自 <Loly: 1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.241 3,对靶机进行端口服务探测 n…...
LeetCode第191题_位1的个数
LeetCode 第191题:位1的个数 题目描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 难度 简单 题目链接 点…...
JVM——Java内存模型
Java内存模型 在Java多线程编程中,Java内存模型(Java Memory Model, JMM)是理解程序执行行为和实现线程安全的关键。下面我们深入探讨Java内存模型的内容。 Java内存模型概述 Java内存模型定义了Java程序中变量的内存操作规则,…...
JVM局部变量表和操作数栈的内存布局
局部变量表和操作数栈 首先看一段Java源码 public class Add_Sample{public int add(int i, int j){int k 100;int result i j k;return result;}public static void main(String[] args){int result new Add_Sample().add(10,20);System.out.println(result);} }使用ja…...
【MongoDB篇】MongoDB的分片操作!
目录 引言第一节:分片核心概念:为什么要分片?它是什么? 🤔💥🚀第二节:分片架构的“三大金刚”:核心组件解析 🧱🧠🛣️第三节ÿ…...
AI一键替换商品融入场景,5分钟打造专业级商品图
在电商行业,传统修图工具操作复杂、耗时费力,尤其是将商品自然融入多样化场景的需求,常让卖家头疼不已。如今,一款专为电商设计的AI工具-图生生,其核心功能“AI商品图-更换背景”,颠覆传统流程。只需上传一…...
《数据结构:二叉搜索树(Binary Search Tree)》
文章目录 :red_circle:一、二叉搜索树的概念:red_circle:二、二叉搜索树的性能分析:red_circle:三、二叉搜索树的操作(一)插入(二)查找(三)删除 :red_circle:四、二叉搜索树的实现代码(一&#…...
isNotBlank和isNotEmpty有什么区别?
如下是hutool的StrUtil工具包下的源码 结果:如果字符串仅由空白字符组成(比如 " "),那么isNotBlank将返回false,而isNotEmpty返回true。 isNotBlank当中的Blank是空白的意思,也就是是否不等于空…...
Kotlin 中实现单例模式的几种常见模式
1 懒汉式,线程安全(伴生对象 by lazy) 想“懒汉”一样,拖延到首次使用时才进行初始化。 通过 companion object 和 lazy 实现懒加载,首次访问是才进行初始化,lazy 默认使用 LazyThreadSafetyMode.SYNCHR…...
挑战用豆包教我学Java
现在的AI发展的越来越快,在学习方面更是让人吃惊,所以我决定用豆包来教我学Java语言。本人现在大二,此前已经学习过了c,所以有一定的基础,相信我肯定可以成功的! 首先我向豆包说明的我的情况: …...
怎么在非 hadoop 用户下启动 hadoop
今天有同学反馈一个问题,比较有代表性。说下 问题描述 在 root 用户下 无法执行如下代码 1.linux执行计划 :crontab 加入 42 17 7 5 * /root/hadoop_op.sh2.hadoop_op.sh内语句: #!/bin/bash su - hadoop cd /opt/module/hadoop-3.3.0/sb…...
如何激活python的虚拟环境
目录 激活虚拟环境步骤: 注意事项: 为什么写这篇文章: 我在检查依赖版本的时候发现在terminal一直显示找不到该依赖 但是在interpreter里面能看到所有我以及下载的依赖和版本;然后稍微看了下发现是自己忘记激活虚拟环境了&#…...
Spring Boot 中的事务管理是如何工作的?
全文目录: 开篇语前言一、什么是事务管理?1. 事务的四大特性(ACID) 二、Spring Boot 中的事务管理1. Spring Boot 中的声明式事务管理1.1 Transactional 注解1.2 使用 Transactional 注解示例: 1.3 Transactional 的默…...
【计算机网络-传输层】传输层协议-UDP
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:HTTP服务器实现 下篇文章:传输层协议-TCP 摘要ÿ…...
【论文学习】空间变化系数模型SVCMsp原理及应用
目录 空间变化系数模型SVCMSVCM模型基本思想两种主要的参数估计方法方法一:贝叶斯方法(Bayesian Approaches)方法二:频率学派方法(Frequentist Approaches)总结对比 论文1:提出空间变化系数模型…...
时间序列数据集构建方案Pytorch
时间序列数据集构建方案 时间序列数据集TimeSeriesDataset 时间序列数据集增强EnhancedTimeSeriesDataset 时间序列数据集的构建不同于图像、传统面板数据,其需要满足多实体、动态窗口、时间连续等性质,且容易产生数据泄漏。本文介绍了一种时间序列数据…...
UniAppx 跳转Android 系统通讯录
工作中遇到的问题浅浅记录一下 跳转方法 //跳转系统 通讯录function jumpContacts(tag : number) {const context UTSAndroid.getUniActivity()!;const intent new Intent(Intent.ACTION_PICK);intent.setData(Uri.parse("content://com.android.contacts/data/phones…...
DeepSeek架构解析:从神经动力学视角解构万亿参数模型的认知涌现机制
一、大语言模型的认知拓扑训练范式 1.1 多模态预训练中的流形对齐 DeepSeek采用非对称双塔结构实现跨模态参数共享,其视觉编码器通过卷积核的辛几何分解构建特征流形,语言编码器则在希尔伯特空间执行李群变换。在预训练阶段(Pre-training&am…...
如何在大型项目中解决 VsCode 语言服务器崩溃的问题
在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况ÿ…...