0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

插入排序算法的复杂性、性能、分析

星星科技指导员 来源:NVIDIA 作者:Richmond Alake 2022-04-08 14:28 次阅读

算法在数据科学和机器学习领域很常见。算法为社交媒体应用程序、谷歌搜索结果、银行系统等提供动力。因此,数据科学家和 机器学习 实践者在分析、设计和实现算法方面拥有直觉是至关重要的。

当应用于大规模计算任务时,高效算法为公司节省了数百万美元,并减少了内存和能源消耗。本文介绍了一种简单的算法,插入排序。

虽然知道如何实现算法是必不可少的,但本文也包括了数据科学家在选择利用时应该考虑的插入算法的细节。因此,本文提到了算法复杂性、性能、分析、解释和利用等因素。

为什么?

重要的是要记住为什么数据科学家应该在解释和实现之前研究数据结构和算法。

数据科学和 ML 库和包抽象了常用算法的复杂性。此外,由于抽象,需要 100 行代码和一些逻辑推导的算法被简化为简单的方法调用。这并没有放弃数据科学家研究算法开发和数据结构的要求。

当给定一组要使用的预构建算法时,确定哪种算法最适合这种情况需要了解基本算法的参数、性能、限制和鲁棒性。数据科学家可以在分析并在某些情况下重新实现算法后了解所有这些信息

选择正确的特定于问题的算法和排除算法故障的能力是理解算法的两个最重要的优势。

K-Means 、 BIRCH 和 Mean Shift 都是常用的 clustering 算法,数据科学家决不具备从头开始实施这些算法的知识。尽管如此,数据科学家仍有必要了解每种算法的特性及其对特定数据集的适用性。

例如,基于质心的算法有利于高密度数据集,在这些数据集中可以清楚地定义集群。相反,在处理噪声数据集时,首选基于密度的算法,如 DBSCAN (基于密度的带噪声应用程序空间聚类)。

在排序算法的上下文中,数据科学家遇到了数据湖和数据库,在这些数据湖和数据库中,如果对包含的数据进行排序,则遍历元素以识别关系的效率更高。

识别适用于数据集的库子例程需要了解各种排序算法和首选的数据结构类型。使用数组时,快速排序算法是有利的,但如果数据以链表形式显示,则合并排序的性能更高,尤其是在大数据集的情况下。不过,两者都使用分而治之的策略对数据进行排序。

出身背景

什么是排序算法?

排序问题是数据科学家和其他软件工程师面临的一个众所周知的编程问题。排序问题的主要目的是按升序或降序排列一组对象。排序算法是执行的顺序指令,用于将列表或数组中的元素有效地重新排序为所需的顺序。

分类的目的是什么?

在数据领域中,数据集中元素的结构化组织支持高效遍历和快速查找特定元素或组。在宏观层面上,使用高效算法构建的应用程序转化为引入我们生活的简单性,如导航系统和搜索引擎。

插入排序是什么?

插入排序算法涉及基于列表中每个元素与其相邻元素的迭代比较创建的排序列表。

指向当前元素的索引指示排序的位置。排序开始时(索引= 0 ),将当前值与左侧相邻的值进行比较。如果该值大于当前值,则不修改列表;如果相邻值和当前值是相同的数字,也会出现这种情况。

但是,如果当前值左侧的相邻值较小,则相邻值位置将向左移动,并且仅当其左侧的值较小时才停止向左移动。

该图说明了插入算法在未排序列表上执行的步骤。下图中的列表按升序排列(从低到高)。

图 1 : GIF 中的插入排序 (此文件在 Creative Commons 下获得许可)。

算法步骤和实现( PythonJavaScript )

台阶

要按升序排列元素列表,插入排序算法需要以下操作:

从未排序元素的列表开始。

从第一项到最后一项遍历未排序元素的列表。

在每个步骤中,将当前元素与前面所有位置左侧的元素进行比较。

如果当前元素小于前面列出的任何元素,则将其向左移动一个位置。

Python 实现

JavaScript 实现

性能和复杂性

在计算机科学领域,“大 O ”表示法是一种测量算法复杂性的策略。在这里,我们不会对大 O 符号太过威廉希尔官方网站 化。不过,值得注意的是,计算机科学家使用这个数学符号来根据时间和空间需求对算法进行量化。

大 O 表示法是根据输入定义的函数。字母“ n ”通常表示函数输入的大小。简单地说, n 表示列表中的元素数。在不同的场景中,实践者关心函数的最坏情况、最佳情况或平均复杂度。

插入排序算法的最坏情况(和平均情况)复杂度为 O ( n ²)。这意味着,在最坏的情况下,对列表进行排序所需的时间与列表中元素数量的平方成正比。

插入排序算法的最佳时间复杂度为 O ( n )时间复杂度。这意味着对列表进行排序所需的时间与列表中元素的数量成正比;当列表的顺序已经正确时,就是这种情况。在这种情况下,只有一次迭代,因为当列表已经有序时,内部循环操作是微不足道的。

插入排序常用于排列小列表。另一方面,插入排序并不是处理包含大量元素的大型列表的最有效方法。值得注意的是,在使用链表时,最好使用插入排序算法。虽然该算法可以应用于数组中结构化的数据,但其他排序算法,如快速排序,也可以应用于其他排序算法。

总结

最简单的排序方法之一是插入排序,它涉及一次一个元素构建一个排序列表。通过将每个未检查的元素插入排序列表中,在小于它和大于它的元素之间进行排序。正如本文所演示的,这是一个简单的算法,可以在多种语言中掌握和应用。

通过清晰地描述插入排序算法,伴随着所涉及的算法程序的逐步分解。数据科学家能够更好地实现插入排序算法,并探索其他类似的排序算法,如快速排序和气泡排序等。

对于许多数据科学家来说,算法可能是一个敏感的话题。这可能是由于主题的复杂性。“算法”一词有时与复杂性有关。有了适当的工具、培训和时间,即使是最复杂的算法,当您有足够的时间、信息和资源时也很容易理解。算法是数据科学中使用的基本工具,不容忽视。

关于作者

Richmond Alake 是一名机器学习和计算机视觉工程师,他与多家初创公司和公司合作,整合深度学习模型,以解决商业应用中的计算机视觉任务。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7489

    浏览量

    87877
  • 机器学习
    +关注

    关注

    66

    文章

    8408

    浏览量

    132580
收藏 人收藏

    评论

    相关推荐

    芯片的失效分析与应对方法

    老化的内在机理,揭示芯片失效问题的复杂性,并提出针对的应对策略,为提升芯片可靠提供全面的分析与解决方案,助力相关行业在芯片应用中有效应对挑战,保障系统的高效稳定
    的头像 发表于 12-20 10:02 767次阅读
    芯片的失效<b class='flag-5'>性</b><b class='flag-5'>分析</b>与应对方法

    集成电路电磁兼容及应对措施相关分析(一) — 电子系统性能要求与ESD问题

    浪费。在开发过程中,为了解决 EMC 问题,需要投入大量的人力、物力和时间进行测试、改进和优化,这增加了开发的复杂性和成本,同时也可能导致项目延期。 一、电子系统性能要求与ESD问题 l 电子模块开发中的EMC问题: 工业、消费及汽车电子系统必须满足不
    的头像 发表于 12-17 09:24 118次阅读
    集成电路电磁兼容<b class='flag-5'>性</b>及应对措施相关<b class='flag-5'>分析</b>(一) — 电子系统<b class='flag-5'>性能</b>要求与ESD问题

    光伏连接器外壳:超越简单塑料的复杂性与重要

    将深入探讨光伏连接器外壳的设计要求及其超越简单塑料的复杂性与重要。 一、光伏连接器外壳的设计要求 材料选择 光伏连接器的外壳并非简单的塑料,而是需要经过精心选择的材料,以满足以下要求: 耐候:光伏系统通常安
    的头像 发表于 11-04 14:50 157次阅读
    光伏连接器外壳:超越简单塑料的<b class='flag-5'>复杂性</b>与重要<b class='flag-5'>性</b>

    时间复杂度为 O(n^2) 的排序算法

    作者:京东保险 王奕龙 对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法。因为时间复杂度并不代表实际代码的执行时间,它省去了低阶、系数和常数,仅代表的增长趋势,所以在小
    的头像 发表于 10-19 16:31 1144次阅读
    时间<b class='flag-5'>复杂</b>度为 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    浅谈逻辑分析仪的威廉希尔官方网站 原理和应用领域

    。这些分析功能有助于工程师快速定位故障原因、验证系统设计的正确以及调试复杂算法和高速数据传输。 此外,逻辑分析仪还具备高精度定时、多通道
    发表于 09-12 15:04

    为什么电路要设计得这么复杂

    电路设计的复杂性主要源于以下几个方面: 功能需求:电路需要实现特定的功能,如信号处理、数据传输、控制等。为了实现这些功能,电路必须包含相应的电子元件和连接,这自然增加了设计的复杂性性能要求:电路
    的头像 发表于 08-21 17:32 487次阅读

    飞凌OK-全志T527开发板nbench性能测试

    -计算波形级数近似的数值分析程序。 ASSIGNMENT一个著名的任务分配算法。 IDEA一种比较新的分组密码算法。 HUFFMAN哈夫曼压缩-一个著名的文本和图形压缩算法。 NEUR
    发表于 08-20 10:25

    戴尔科技如何帮助客户克服多云环境的复杂性

    进入智能化时代,云的基础设施地位更加稳固。在云上运行人工智能,可以更全面地收集、使用和分析数据,从而形成更加深刻的洞察。
    的头像 发表于 07-30 11:22 526次阅读

    手把手教你排序算法怎么写

    今天以直接插入排序算法,给大家分享一下排序算法的实现思路,主要包含以下部分内容:插入排序介绍插入排序
    的头像 发表于 06-04 08:03 683次阅读
    手把手教你<b class='flag-5'>排序</b><b class='flag-5'>算法</b>怎么写

    FPGA 原型设计开发复杂性策略

    FPGA 被封装在更大的封装中,从而提供了更多的 I/O。"然而,I/O 的增加并不像逻辑资源那样引人注目。
    发表于 04-11 11:48 285次阅读
    FPGA 原型设计开发<b class='flag-5'>复杂性</b>策略

    用FPGA实现双调排序的方法(2)

    典型的排序算法包括冒泡排序、选择排序插入排序、归并排序、快速
    的头像 发表于 03-21 10:28 636次阅读
    用FPGA实现双调<b class='flag-5'>排序</b>的方法(2)

    FPGA实现双调排序算法的探索与实践

    双调排序(BitonicSort)是数据独立(Data-independent)的排序算法,即比较顺序与数据无关,特别适合并行执行。在了解双调排序
    发表于 03-14 09:50 641次阅读
    FPGA实现双调<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索与实践

    SAGE算法性能分析

    电子发烧友网站提供《SAGE算法性能分析.pdf》资料免费下载
    发表于 02-28 10:38 0次下载

    C语言实现经典排序算法概览

    冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
    的头像 发表于 02-25 12:27 447次阅读
    C语言实现经典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概览

    解决选择合适安全控制器的复杂性

    作者:Jeff Shepard 投稿人:DigiKey 北美编辑 工业系统中的安全是一个关键而复杂的主题,因此为给定应用指定最佳安全控制器具有挑战。其中考虑因素包括与安全控制器相关的众多
    的头像 发表于 02-13 13:32 562次阅读
    解决选择合适安全控制器的<b class='flag-5'>复杂性</b>