七、基于比较的排序算法总结

1 问题

至此,总结一下已经研究过的排序算法:

insertion sort,Θ(n2)\Theta(n^2)Θ(n2)
merge sort, Θ(nlogn)\Theta(nlogn)Θ(nlogn)
quicksort, Θ(nlogn)\Theta(nlogn)Θ(nlogn)
heapsort,Θ(nlogn)\Theta(nlogn)Θ(nlogn)

  • 从上面这个现象发现,这些算法的算法复杂度≥Θ(nlogn)\ge\Theta(nlogn)Θ(nlogn);
  • 从算法的细节上看,算法的最基本的思想是比较元素大小

从上面的发现中,可以提出这样一个猜想:

所有基于比较的排序算法,算法复杂度≥Θ(nlogn)\ge\Theta(nlogn)Θ(nlogn)

2 证明结论

数学证明的思路分两步,1⃣️找到一种更加抽象的数学结构表达各种基于比较排序算法;2⃣️研究这种抽象的数学结构的性质;3⃣️利用得到的性质说明结论。

2.1 Decision-tree(抽象数学结构)

这个决策树和Machine Learning里的决策树本质上是一个意思。

  • 先看一个简单的例子
    在这里插入图片描述
  • 三个元素的Decision-tree很容易画出,但是≥4\ge44就不容易画出了,因为有Cn2C_n^2Cn2种比较,而每一次比较又有两种结果,这些比较的结果中一部分就可以决定全序…,已经超出人脑处理范畴,计算机也不太容易处理;
  • 仔细品品基于比较的排序算法,也是一顿比较之后确定一个全序,而这顿比较恰恰是Decision-tree所有比较之一,也就是Decision-tree的一条路径;
  • 不过我们不必过于纠结Decision-tree的细节结构,只需要知道它的存在性就足够解决我们今天的问题了,这就是数学抽象之美;

2.2 Decision-tree的数学性质

在这里插入图片描述

2.3 结论得证

决定基于比较的排序算法的复杂度是比较的次数,用decision tree就是某一个路径的高度hhh,现在已经证明整个二叉树的高度h≥Ω(nlogn)h\ge\Omega(nlogn)hΩ(nlogn),那就说明基于比较的排序算法的复杂度≥Ω(nlogn)\ge\Omega(nlogn)Ω(nlogn)

3 强调重点

  • 决定基于比较的排序算法的复杂度是比较的次数;
  • 在input确定的情况下,某种基于比较的排序算法的比较序列和decision tree的结构可以确定,该算法的比较序列只是decision tree的某一条路径;
  • 基于比较的排序算法随机化后仍符合上面的逻辑框架,结论仍然成立;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转账为demo,spring事务

spring 事务使用1. 业务代码2. xml配置3. 注解配置1. 业务代码 数据表结构 dao package com.lovely.dao.impl;import com.lovely.dao.AccountDao; import org.springframework.jdbc.core.JdbcTemplate;/*** author echo lovely* date 2020/8/9 11:01*/ public class AccountD…

八、计数排序及其应用分析

1 本节思路 之前的算法的最基本的思想是比较元素大小,所以算法复杂度最好是Θ(nlogn)\Theta(nlogn)Θ(nlogn),本节不再基于元素比较,而是基于计数的Counting sort,然后应用在Radix sort上。 2 Counting sort 2.1 算法思想 Cou…

Google开发者模式调试css样式的方法

界面如下,你需要调试css样式… 看下图,高仿某云播放界面部分 需求 1.h5开发手机端界面,禁用缩放 2.如何精准的定位像上图一样,或者更好 3.使用Google调试器,调试css样式如何调样式 选择对应的样式 确定多个元素…

OD汇编需要标签

如何解决,看那红体字。。。 push 0046ad70 标签就是地址的引用 zai破解的道路上面面前行 技术参考:http://zhidao.baidu.com/link?url8JP8KFxTinclhl6MwpaZw5buhtv1p4zgpjy8rKkBPvD4YqCq2uudXQZrhuBLPGZm5ahe3d7YsLb3MeAFDXfsua转载于:https://www.cnbl…

git与github使用

1 从github上clone到本地 配置Git 首先在本地创建ssh key; $ ssh-keygen -t rsa -C "your_emailyouremail.com"后面的your_emailyouremail.com改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车…

bootstrap panel 布局

panel1. 效果2. 基于bootstrap实现用于页面分专栏展示 1. 效果 成品 2. 基于bootstrap实现 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>panel 布局</title><link rel"stylesheet" href"cs…

35款让你爱不释手的网页元素PSD素材

网页元素是构成一个网页的基本元素&#xff0c;包括按钮、表单、文本框、进度条等。这里收集了30款让你爱不释手的网页元素PSD素材。 1、国外个性网页模板UI设计PSD素材 下载地址>>> 2、带分享按钮的网页导航栏UI设计PSD素材 下载地址>>> 3、两款简洁的搜索框…

DHCP中继

拓扑如下&#xff1a; R0配置&#xff1a; (config)#ip dhcp pool aaa (dhcp-config)#network 8.8.8.0 255.255.255.0 (dhcp-config)#default-router 8.8.8.1 (dhcp-config)#dns-server 114.114.114.114(config)#ip dhcp pool bbb (dhcp-config)#network 88.88.88.0 255.255.25…

maven项目,如何导入本地jar包

maven项目导入本地jar包&#xff0c;然后以pom坐标的方式引入项目。为何有这种奇怪的需求&#xff1f; maven 上找不到了对应的jar包了&#xff0c;没有对应的坐标。导入方式 将你本地的项目放入maven仓库&#xff0c;使用maven命令。而不是简单的复制进maven仓库。参数说明&…

centos7配置jdk1.8环境变量

目录1. Oracle下载linux版本的jdk2. 上传到linux服务器3. 解压4. 编辑环境变量1. Oracle下载linux版本的jdk https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html 2. 上传到linux服务器 使用工具 mobaxterm 上传jdk https://mobaxterm.mobatek…

spring mvc 入门DispatcherServlet转发

目录一&#xff0c;配置相关二&#xff0c;java类测试三&#xff0c;测试一&#xff0c;配置相关 maven坐标依赖 <dependencies><!-- spring context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context&…

web音乐播放器+后台歌曲,歌单管理

项目地址 https://github.com/sevenyoungairye/web_music_palyer技术点 - 基于h5, css3, js, bootstarp, jquery,- 后台基于structs1, spring, spring-jdbcTemplate功能 - 用户curd- 歌单curd&#xff0c;为歌单新增&#xff0c;移除歌曲- 上传歌曲&#xff0c;修改歌曲- 查询…