博客
关于我
统治世界的 10 大算法,你知道几个?
阅读量:177 次
发布时间:2019-02-28

本文共 2249 字,大约阅读时间需要 7 分钟。

排序算法

排序是使一串记录按照某个或多个关键字的大小递增或递减排列的操作。排序算法则是实现这一目标的具体方法,它在处理大量数据中具有重要地位。一个优秀的排序算法不仅能提高效率,还能节省资源。

稳定的排序算法

以下是一些常见的稳定排序算法及其时间复杂度:

  • 冒泡排序(Bubble sort) — O(n²)
  • 鸡尾酒排序(Cocktail sort) — O(n²)
  • 插入排序(Insertion sort) — O(n²)
  • 桶排序(Bucket sort) — O(n); 需要 O(k) 额外空间
  • 计数排序(Counting sort) — O(n + k); 需要 O(n + k) 额外空间
  • 合并排序(Merge sort) — O(n log n); 需要 O(n) 额外空间
  • 原地合并排序 — O(n²)
  • 二叉排序树排序(Binary tree sort) — O(n log n) 期望时间; O(n²) 最坏时间;需要 O(n) 额外空间
  • 鸽巢排序(Pigeonhole sort) — O(n + k); 需要 O(k) 额外空间
  • 基数排序(Radix sort) — O(n·k); 需要 O(n) 额外空间
  • Gnome 排序 — O(n²)

不稳定的排序算法

以下是一些常见的不稳定排序算法及其时间复杂度:

  • 选择排序(Selection sort) — O(n²)
  • 希尔排序(Shell sort) — O(n log n) 如果使用最佳的实现
  • 堆排序(Heapsort) — O(n log n)
  • 快速排序(Quicksort) — O(n log n) 期望时间, O(n²) 最坏情况;对大型乱序数据来说是最快的已知排序算法
  • Introsort — O(n log n)

不实用的排序算法

以下是一些不实用的排序算法及其时间复杂度:

  • Bogo排序(Bogosort) — O(n × n!); 最坏情况是无限的
  • Stupid sort — O(n³); 递归版本需要 O(n²) 额外存储器
  • 珠排序(Bead sort) — O(n) 或 O(√n),但需要特别的硬件
  • Pancake sorting — O(n),但需要特别的硬件
  • Stooge sort — O(n².7)

傅立叶变换与快速傅立叶变换

傅立叶是一位法国数学家和物理学家,原名是 Jean Baptiste Joseph Fourier (1768-1830)。Fourier于 1807 年在法国科学学会上发表了一篇论文,描述了如何用正弦曲线来描述温度分布。Fourier的论文在当时引发了争议,因为他提出任何连续周期信号都可以由一组适当的正弦曲线组合而成。

争议与贡献

当时的拉格朗日坚决反对Fourier的论文发表,认为正弦曲线无法组合成带有棱角的信号。然而,Fourier的理论在接下来的 50 年里被证明是正确的。正弦曲线虽然无法精确表示带有棱角的信号,但可以非常逼真地模拟它。

为什么选择正弦曲线?

Fourier选择使用正弦曲线是因为它们具有保真度的性质。与方波、三角波等其他信号表示方法不同,正弦曲线在频率和波形上与原信号保持一致。这种性质使得正弦曲线成为研究信号分解的理想选择。


Dijkstra 算法

Dijkstra 算法是典型的算法,广泛应用于图的最短路径问题。该算法采用永久和临时标号的方式,要求图中不存在负权边。


RSA 算法变换

RSA 是目前最有影响力的公钥加密算法之一。它能够抵抗已知的绝大多数密码攻击,并被 ISO 推荐为公钥数据加密标准。RSA 的安全性主要依赖于其钥匙的长度,只要钥匙足够长,加密信息在强力计算中无法被破解。然而,在分布式计算和量子计算机理论日趋成熟的今天,RSA 的安全性受到挑战。


安全哈希算法

安全哈希算法是一种对输入信息(如消息)进行摘要的算法。其特点是:

  • 不同的输入信息绝对不会具有相同的指纹。
  • 相近输入信息经过摘要后,输出信息具有较大的差异。
  • 计算上难以生成一个与给定输入具有相同指纹的输入。

整数因式分解

整数因式分解是计算机领域被广泛使用的数学算法。它是 NP 完难问题的延伸,极其难以解决。许多加密协议(如 RSA 算法)都基于整数因式分解的难易性。如果一个算法能够快速地对任意整数进行因式分解,RSA 的安全性就会受到威胁。


链接分析

链接分析源于对 Web 结构中超链接的多维分析。其应用主要体现在网络信息检索、网络计量学、数据挖掘和 Web 结构建模等领域。链接分析是 Google 核心技术之一,已展现出显著的商业价值。


比例积分微分算法

比例积分微分算法是现代工程和自动化控制中广泛应用的算法。它通过控制回路反馈机制,将期望输出信号和实际输出信号之间的错误最小化。无论何处,只要需要进行信号处理或自动化控制,这个算法都会发挥重要作用。


数据压缩算法

在电子信息技术领域,数据压缩技术是数字化革命的关键。由于数字视频和音频信号的数据量庞大,压缩技术在通信、广播、存储和多媒体娱乐中具有重要地位。


随机数生成

随机数生成在统计学、蒙特卡罗模拟和数据分析等领域有广泛应用。它在从总体中抽取样本、分配实验试验组等场景中具有重要作用。


结语

以上内容涵盖了排序算法、傅立叶变换、Dijkstra 算法、RSA、安全哈希、整数因式分解、链接分析、比例积分微分算法、数据压缩和随机数生成等多个主题。如果你对某一主题感兴趣,欢迎随时探讨!

转载地址:http://teyj.baihongyu.com/

你可能感兴趣的文章
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>