二分插入排序和复杂度

2024-06-21

我有一个关于在插入排序算法中使用二分搜索的简单问题。更准确地说,在通常的插入排序的每一步中,我们不是将元素与前一个(已排序)子数组中的所有元素进行线性比较,而是在该已排序子数组中使用二分搜索来查找该元素所属的位置。

我知道这减少了算法进行的比较次数(O(log n) 而不是 O(n)),但每一步所需的交换次数仍然占主导地位,复杂度仍然是 O(n^2)。

我也知道复杂性与运行时间并不那么容易相关。我尝试比较两种算法对于 n(数组大小)的“小”值(最多大约 500000)的运行时间。二进制插入排序总是比通常的插入排序更快。

两者都是 O(n^2) 的事实告诉我,当 n 足够大时,运行时间应该相似,对吗?您知道在这种情况下“足够大”到什么程度才能真正看到类似的运行时间?


两者都是 O(n^2) 的事实告诉我,当 n 足够大时,运行时间应该相似,对吗?

小心——这不是真的。n^2 and 2n^2永远不会像n变大;他们的距离越来越远。但两者都是O(n^2).

那么,说你的两种算法都是意味着什么?O(n^2)?好吧,这意味着最终每个人都可以以某个恒定倍数为界n^2。对于您的二进制插入排序,它可能是10n^2,而对于您的标准插入排序,它可能是1000n^2。两者都是n^2尽管效率可能会有所不同100(在本例中)。

复杂性更多地告诉您特定函数的行为,而不是该函数如何与其他函数相比较。如果你知道你的函数是O(n^2),例如,您知道对于较大的值n, f(n+1)将增长不超过一些常数倍n + 1(为什么?因为导数n^2 is 2n,线性,它告诉您连续项之间的差异呈线性增长)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二分插入排序和复杂度 的相关文章

  • 在地图元素上使用 for_each

    我有一个映射 我想在其中对每个数据类型对象成员函数执行调用 我还知道如何在任何序列上执行此操作 但是是否可以在关联容器上执行此操作 我能找到的最接近的答案是 Boost Bind 访问 std for each 中的 std map 元素
  • 将一个 numpy 数组按另一个排序

    我有一个确定元素顺序的数组 order 3 1 4 2 然后我想对另一个更大的数组 仅包含这些元素 进行排序 a np array 4 2 1 1 4 3 1 3 这样首先出现的元素order结果第一等在直接的 Python 中 我会使用一
  • 什么是日历队列?

    我正在致力于构建一个离散事件模拟器 维基百科提到有几种通用优先级队列非常适合在 DES 中使用 具体来说 它提到日历队列是一个很好的结构 我找到了一份 pdf 1988 年的 其中提到了日历队列 但在大多数情况下我找不到关于它们的任何其他内
  • 验证是否存在唯一字符串的组合

    class Details String name String age String email String location 1 如果有详细信息列表 如下所示List
  • 如何从 SYSOUT 中删除 DFSORT 消息

    DFSORT 有多个消息 由具有多个排序操作的 COBOL 程序内部使用 我想删除那些 DFSORT 消息并仅保留 COBOL 程序中的消息 你有三个选择 使用 OUTDD ddname Enterprise COBOL 编译器选项更改用于
  • SQL数据库数据排序

    我能够获取名字和姓氏的组合长度以及按 ID 排序 但我无法按字典顺序对其进行排序 SELECT CUSTOMER ID CUSTOMER FIRST NAME CUSTOMER LAST NAME FROM CUSTOMER WHERE L
  • O(log n) 总是比 O(n) 快吗

    如果有 2 种算法以不同的复杂度计算相同的结果 O log n 总是会更快吗 如果是这样请解释一下 顺便说一句 这不是作业问题 不会 如果一种算法运行在N 100另一个在 log N 100 那么对于较小的输入大小 第二个将会较慢 渐近复杂
  • 运动结构,根据 2D 图像点对应关系重建 3D 点云

    Use case 物体绕其中心以不同的速度旋转 固定摄像机正在观察物体 给定 2D 图像点对应关系重建 3D 点云 当物体旋转时 相机可以看到它的不同部分 从而检测到不同的点和对应关系 Scene A N 张图片b N 1 图像对C N 1
  • 查找邻接表中所有连接的节点

    我有一个 DAG 的邻接列表 我需要从所有节点中找到所有连接的节点 例如 对于下面的 DAG 1 gt 3 gt 4 2 gt 4 3 gt 2 4 gt 5 5 gt NULL 我需要这个 1 gt 2 3 4 5 2 gt 4 5 3
  • 高效查找最近的字典键

    我有一堆日期和货币价值对SortedDictionary
  • Swift3 中的数组排序

    在我的代码中 我有一个如下所示的结构 struct Object var name String var count Int 我现在正在创建一个包含 10 个对象的数组 这些对象具有随机名称和随机计数 有没有一个简单的方法a 按字母顺序对它
  • 如何显示带有排序下拉列表的页面?

    我有一个选择列表
  • 准备与大数据相关的设计和架构问题的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 哪种算法可以解决我的婚礼餐桌问题?

    我的婚礼有 x 位客人 有 y 张桌子 有 z 个座位 客人A可以与客人B同桌 客人C不能与客人D同桌 给定所有客人之间所有连接的数据集 是否有已知的算法可以解决此类问题 我确信这种问题有一个抽象的父问题 称为 问题 x 或其他问题 或者它
  • 根据 cron 规范计算下一个计划时间

    在给定当前时间和 cron 规范的情况下 计算事件下一次运行时间的有效方法是什么 我正在寻找 每分钟循环检查是否符合规范 以外的东西 规格示例可能是 每月1日 15日15 01 每小时整点的 10 20 30 40 50 分钟 Python
  • 如何使用 C 中的 Banker's Rounding 将 double 舍入为 int

    我想编写一个函数 使用银行家的舍入方法将双精度数舍入为整数 将一半舍入为偶数 http en wikipedia org wiki Rounding Round half to even http en wikipedia org wiki
  • Welzl 算法的迭代版本

    我正在使用 Welzl 算法来查找点云的最小外接圆 2d 或最小外接球体 3d 不幸的是 该算法具有非常高的递归深度 即输入点数 这个算法有迭代版本吗 我找不到任何并且不知道如何将递归更改为循环 我发现了一些迭代的最小包围圆 球算法 但它们
  • n维匹配算法

    在这里寻求一些建议 有谁知道在 n 维空间中开始研究匹配算法的好地方 例如 任何约会网站都必须使用某种算法来匹配 2 个人 我读到的是 我们可以将一个人的特征映射到一个 n 维数组中 每个特征都有一个点系统 一旦我们拥有一个人的所有 可用
  • 删除 MongoDB 查询结果中的 "scanAndOrder" : true

    所以我的数据库中有一个带有以下分片键的集合 cl yyyy mm user id N 当我执行以下查询时 db collection find cl 2012 03 user id in users id lt new ObjectId 4
  • 优化完美平方问题,类似于Python中的硬币找零

    我这里有一个硬币兑换的解决方案 python 中的 leetcode 硬币兑换 https stackoverflow com questions 69517078 coin change leetcode in python 因为完全平方

随机推荐

  • SDL2 库的静态链接

    我正在使用 Windows 7 Code Blocks 和 MinGW 在编译 构建任何东西时 我几乎没有经验 特别是当 Code Blocks 不使用 makefile 时 我从以下位置下载了 SDL2 devel 2 0 0 mingw
  • minidump stackwalk 与 gdb 回溯

    我的 Firefox 中有一个漏洞触发器 CVE 2018 18492 它会崩溃并给出 SIGSEGV 我用过breakpadminidump stackwalk从崩溃时生成的小型转储文件中获取其堆栈跟踪 我得到如下内容 Thread 0
  • Play 2.0 意外异常 StackOverflowError: null

    当我尝试编译我的项目时 出现以下异常 Internal server error for request GET gt play api UnexpectedException Unexpected exception StackOverf
  • 检查点是否在 OpenLayers 3 中的多边形内部

    当我在 OpenLayers 地图中绘制多边形时 我想知道标记是否位于多边形内部 我在OpenLayers API中搜索 但没有找到解决方案 你可以在这里看到我的完整代码link http plnkr co edit iI92XbxVDAg
  • 在 CsvHelper.CsvWriter 中手动添加标头

    我在用着CsvHelper用于写入行的类DataTable到 csv 文件 该代码有效 但我无法让它写入标题 如何在不创建类映射的情况下手动添加标头 http joshclose github io CsvHelper http joshc
  • 如何在android中点击画布上绘制的圆圈?

    我正在开发一个人脸检测应用程序 在这个应用程序中 我必须在脸上的眼睛和嘴巴用户可以点击拖动圆圈 在检测到的人脸上根据自己设置位置 因此 所有圆圈都已成功绘制在脸上 但我无法单击特定圆圈并使用缩小选项在整个脸上移动 请建议我有关相同问题的正确
  • 在 python 中执行 Class.objects.filter(...) 模式

    我希望使用 django 模型中使用的模式Model objects filter 跨数据构建过滤器 这可能是 pandas 的一个很好的用例 但我更感兴趣的是在尝试之前改进我的 python 首先 如果我有以下数据 DATA id 1 n
  • 从前端更改记录顺序

    我在编写下一个功能时遇到问题 我希望用户能够重新排列记录并更改 display order 值 我使用 Jquery UI 的可拖放功能来促进这一点 我可以看到如何简单地交换 display order 值 但我想为一条记录设置一个显示顺序
  • 始终执行代码和 python 脚本的结尾

    Python中有没有一种方法可以让代码块始终在程序末尾执行 除非kill 9 我们有一个 Jenkins 项目 它在构建过程中启动 python 脚本 如果开发人员决定中止工作 那么就会留下大量工件 这些工件可能 并且正在 影响未来的构建
  • pyinstaller错误:OSError:[WinError 6]句柄无效

    该文件使用终端命令获取 wifi 密码netsh wlan show profiles我之前使用 pyinstaller 创建了一些 exe 它们工作得很好 代码 import subprocess import time import s
  • ReactJS 部署应用程序错误无法复制到剪贴板:命令失败:xsel --clipboard --input

    我正在尝试部署一个ReactJS我的应用程序乌班图16 04服务器但是当我执行命令时 serve s build 这是我的package json file name client version 0 1 0 private true de
  • schematron 报告 python lxml 问题

    我正在使用 lxml schematron 模块验证 xml 文档 它运行良好 但我无法显示设置为属性的验证报告 我找不到如何将其作为 XML 树进行处理 这是我使用的代码片段 xdoc etree parse mydoc xml sche
  • 在 HTML 表单中使用 PUT 方法

    我可以在 HTML 表单中使用 PUT 方法将数据从表单发送到服务器吗 根据HTML标准 https www w3 org TR html5 sec forms html element attrdef form method 你可以not
  • 只为一个目录中的文件添加 html 扩展名

    尝试重写如下所示的链接 content about me 对此 content about me html 这对于我正在做的事情是必要的 我不断收到此 htaccess 规则的内部服务器错误 RewriteRule content cont
  • 当选项卡到另一个组件位置时,QML 中相应的滚动

    我想做的是 如果我从TextField到另一个组件 aComboBoxwtv 我希望滚动能够适应这一点 当我认为这非常重要时 当我执行连续选项卡时 我会转到滚动视图显示的内容下方的控件 一个例子是 假设我在这里 now i do 2 tab
  • 处理长时间运行的报告

    我正在开发一个用 C 和 Sql Server 2000 数据库编写的 ASP net 应用程序 我们有多个 PDF 报告供客户用于满足其业务需求 问题是这些报告需要一段时间才能生成 gt 3 分钟 通常最终发生的情况是 当用户请求报告时
  • 从Python调用和控制GDB

    我正在运行一个 Python GUI 应用程序 我想从中调用和控制GDB 比如加载可执行文件 设置断点等 我看到GDB有一个命令行界面 可以通过向GDB进程发送字符串来使用它 但我想用Python方式来做 有没有gdb py 我看到 arc
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • 如何将 IPSec / Openswan 与 Amazon 的虚拟私有云 (VPC) 和 EC2 结合使用?

    有谁知道如何使用 Openswan 在 EC2 上创建到 Cisco 路由器的 IPSec 隧道 我一直读到人们可以或不能在亚马逊云上设置 IPSec 隧道 可能还是不可能 如果是这样 有人可以指点我一个成功的教程吗 Update AWS
  • 二分插入排序和复杂度

    我有一个关于在插入排序算法中使用二分搜索的简单问题 更准确地说 在通常的插入排序的每一步中 我们不是将元素与前一个 已排序 子数组中的所有元素进行线性比较 而是在该已排序子数组中使用二分搜索来查找该元素所属的位置 我知道这减少了算法进行的比