算法(15):sorting complexity-6.3
这一节的名字叫“排序复杂度Sorting Complexity”但它实际上在回答一个更根本的问题“只靠比较大小来排序最快能有多快有没有可能比归并排序更快”结论归并排序在“比较次数”上已经是最优的但为了理解为什么我们需要把“算法运行时间”和“物理极限”分开看。1. 三组核心定义先锁死术语计算模型Model of Computation允许算法执行哪些操作。在排序问题中我们限定为基于比较Compare-based的模型——你只能通过a b来获取两个元素相对顺序的信息不能直接读取元素的内存地址来推算它的大小比如不能像基数排序那样按位拆数字。上界Upper Bound某个已知算法在最坏情况下需要的操作次数。例如归并排序能保证最多~ N log₂ N次比较所以“排序问题的上界是N log₂ N”。下界Lower Bound任何算法包括还没被发明出来的在最坏情况下都不可能少于这个次数。它是对问题本身难度的证明。如果上界 下界在常数因子范围内这个算法就是这个问题在对应成本模型下的最优算法Optimal Algorithm。2. 为什么比较排序的下界是~ N log₂ N想象你对N个互不相同的元素进行排序。你只能靠比较a[i]和a[j]来判断它们的顺序。物理事实输入有N!种可能的排列例如 3 个元素有 6 种排列4 个元素有 24 种。每一次比较最多只能产生两种结果小于或大于等于。因此每次比较最多只能把“可能的排列数量”分成两半。为了区分出N!种不同的排列你至少需要做log₂(N!)次比较。根据斯特林公式Stirlings formulalog₂(N!) ≈ N log₂ N。这意味着任何基于比较的排序算法在最坏情况下都不可能少于N log₂ N次比较。比较次数必然大于Nlog2N以最坏情况为标准否则比较无意义。避免一次就比出来的情况3. 结合归并排序看这张图你已经知道归并排序的最坏情况比较次数就是~ N log₂ N。现在把这个结论和刚学的下界合在一起看下界证明说“无论你怎么设计都不可能少于N log₂ N次比较。”归并排序说“我能做到N log₂ N次比较。”所以在“比较次数”这个成本模型下归并排序已经是最优的不可能再被超越了。这就是为什么 PPT 会说Optimal algorithm mergesort。4. 这个“最优”的局限性“最优”只适用于比较次数不是“所有资源”。归并排序的空间成本它需要额外的aux数组N个额外空间所以它不是“空间最优”。存在原地排序算法如堆排序但它们的常数因子通常比归并排序大。如果允许不同操作模型如果你不是只靠比较而是利用键的物理表示比如知道输入是 32 位整数你可以使用基数排序Radix Sort它在某些情况下能达到O(N)时间突破N log N的限制。但这是因为你换了计算模型而不是解决了比较排序的极限。5. 对你目前学习的意义这一节的作用是告诉你当你在归并排序和快速排序之间选择时你不再需要担心“有没有可能发明一个比归并排序更快的基于比较的通用排序算法”——因为数学上已经证明了不存在。你能优化的只有常数因子、内存使用和缓存行为。现在你已经知道了归并排序的理论天花板在哪里下一节快速排序出现时你就能直接看到它在实践层面缓存、原地性如何与理论最优的归并排序形成对比。如果你准备好进入快速排序Quicksort可以继续推进。

相关新闻

IS300T030-C-EST伺服驱动器电源部分测绘图

IS300T030-C-EST伺服驱动器电源部分测绘图

开关电源部分284438XXUC38XX简化框图UC38XX说明三川ISE-2004-DB电源

2026/10/12 19:12:21 阅读更多 →
OpenClaw爆火背后:AI Agent开发框架选型指南

OpenClaw爆火背后:AI Agent开发框架选型指南

1. OpenClaw为何突然爆火? 最近技术圈里OpenClaw的热度突然飙升,GitHub星标数在两周内从300暴涨到8500。这个现象让我想起2017年TensorFlow刚开源时的场景——开发者们疯狂涌入,但多数人其实并不清楚它能解决什么具体问题。OpenClaw的走红同样…

2026/10/15 2:20:48 阅读更多 →
从原理图到PCB:硬件工程师必须掌握的工程实践与设计思维

从原理图到PCB:硬件工程师必须掌握的工程实践与设计思维

上周,一个刚入行的硬件工程师朋友给我发来一张他画的PCB图,问我为什么板子打样回来,电源部分总是发热严重,偶尔还会重启。我打开文件一看,问题很典型:电源芯片的输入输出电容放得老远,关键信号线…

2026/10/15 5:35:06 阅读更多 →

最新新闻

强化学习期末备考:从A卷原题拆解高频考点与答题模板

强化学习期末备考:从A卷原题拆解高频考点与答题模板

简介:A卷强化学习期末考试原题加答案,是一份面向备考强化学习课程的本科生、研究生及自学入门者的试卷详解,用于考前快速回顾核心概念、对照解题思路。压缩包共含1个PDF文件,大小约332KB,内容按题目顺序组织&#xff0…

2026/10/15 6:20:43 阅读更多 →
airllm:异构多卡环境下的大模型推理显存调度与分层KV缓存实践

airllm:异构多卡环境下的大模型推理显存调度与分层KV缓存实践

airllm这个开源项目,我第一次见到这个名字是在某个技术社区的讨论帖里。当时有人吐槽手里几块不同显存的GPU,跑大模型要不就是显存不够直接OOM,要不就是小卡闲着大卡累成狗。底下有人回了一句:试试airllm。我那时候第一反应是又一…

2026/10/15 6:20:43 阅读更多 →
博世力士乐350拧紧系统EIP信号控制与流程图设计要点

博世力士乐350拧紧系统EIP信号控制与流程图设计要点

简介:一份面向工业自动化工程师、设备调试人员及机电专业学生的技术资料,内容为PLC与博世力士乐350拧紧系统基于EIP(Ethernet/IP)协议的信号控制流程图。文档聚焦螺丝枪拧紧场景,从逻辑控制出发,依次阐述监…

2026/10/15 6:20:43 阅读更多 →
一文搞懂CSR、SSR、SSG:前端渲染原理、选型与工程落地

一文搞懂CSR、SSR、SSG:前端渲染原理、选型与工程落地

一次技术评审会上,团队又为新项目该用哪种渲染方案争论起来。支持纯客户端渲染的同学说部署简单、交互爽;坚持服务端渲染的说SEO不能丢;还有人直接拍板要搞静态站,理由是性能最好。争了半小时,发现大家连一个问题都没对…

2026/10/15 6:20:43 阅读更多 →
城市级智慧物业监管平台怎么建?先打通这4张网

城市级智慧物业监管平台怎么建?先打通这4张网

城市级智慧物业监管平台怎么建?先打通这4张网 一个城市,少则几千个、多则上万个住宅小区和物业项目,分属成百上千家物业企业。过去,这些项目的数据分散在各个街道、各家企业、各类系统里,主管部门想了解全市物业管理的…

2026/10/15 6:20:43 阅读更多 →
AI辅助开发中的“失忆”难题:用context-mode实现轻量级上下文管理

AI辅助开发中的“失忆”难题:用context-mode实现轻量级上下文管理

做 AI 辅助开发半年多,我踩过最深的坑不是 prompt 写得不够好,而是上下文丢了。今天聊的项目 context-mode,就是专门解决这个问题的一套轻量级上下文管理方案。它本身是一个跑在终端里的命令行工具,负责把每次 AI 协作会话里的“记…

2026/10/15 6:19:43 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →