该算法的大 O 复杂度是多少?

2024-04-16

我有一个在下面编写的函数。这个函数本质上是一个归并排序。

public static long nlgn(double[] nums)  {

        if(nums.length > 1)     {
            int elementsInA1 = nums.length/2;
            int elementsInA2 = nums.length - elementsInA1;
            double[] arr1 = new double[elementsInA1];
            double[] arr2 = new double[elementsInA2];

            for(int i = 0; i < elementsInA1; i++)
            arr1[i] = nums[i];

            for(int i = elementsInA1; i < elementsInA1 + elementsInA2; i++)
            arr2[i - elementsInA1] = nums[i];

            nlgn(arr1);
            nlgn(arr2);

            int i = 0, j = 0, k = 0;

            while(arr1.length != j && arr2.length != k) {
                if(arr1[j] <= arr2[k]) {
                    nums[i] = arr1[j];
                    i++;
                    j++;
                } else {
                    nums[i] = arr2[k];
                    i++;
                    k++;
                }
            }

            while(arr1.length != j) {
                nums[i] = arr1[j];
                i++;
                j++;
            }
            while(arr2.length != k) {
                nums[i] = arr2[k];
                i++;
                k++;
            }
        }

        return nuts;
    }

由于这是一个合并排序,我从我的研究中知道这个算法的大O复杂度是O(n lgn)。然而,当我运行计时测试时,我得到的结果并不表明它在 O(n lgn) 时间内运行。不过,这似乎是 O(n lgn) 时间,因为直到我们到达开头的两个 for 循环的末尾。它运行时间为 O(n)。一旦超过这个时间,它应该在 O(lgn) 时间内运行,因为它对每个元素进行排序。

我的问题是,有人可以确认这段代码在 O(nlogn) 时间内运行吗?如果没有,我想知道我的理解哪里出了问题。


O(nlogn) 是渐近紧界。这意味着,只有当n足够大时,其运行时间才接近复杂度。当n很小时,由于函数调用开销和许多其他因素,界限并不紧密。

您可以使 n 更大,并比较输入之间的比率,看看它是否接近 O(nlogn)。虽然我真的怀疑你必须让n有多大......

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

该算法的大 O 复杂度是多少? 的相关文章

  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 按偶数和奇数排序

    我想知道是否可以使用 std sort 函数按偶数或奇数对数字进行排序 我有以下代码 但我不确定如何在 std sort 中实现 inline bool isEven const Point n return n getX 2 0 它是否正
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 按降序排序映射java8 [重复]

    这个问题在这里已经有答案了 private static
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 使用 SQL 查找给定 x、y 坐标的填充矩形

    给定以下填充的 x y 坐标 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 4 0 4 1 5 0 5 1 如何编写 SQL 查询来确定所有填充的矩形 矩形由其左上角和右下角定义 期望的结果 x1 y1 x2 y2
  • UWP StoreProductQueryResult 不返回任何产品

    我们无法返回 Windows 应用商店应用程序的附加产品列表 我们在 Windows 应用商店中有一个包含 3 个订阅附加组件的应用程序 这些附加组件被标记为隐藏 因为我们不希望它们只能通过我们的应用程序在商店中可见 我们正在开发针对 Wi
  • 通过键盘快捷键重新缩进 XML

    我正在浏览数百个 xml 文件 当我在记事本 中打开它们时 我必须对每个文件执行 HTML Tidy gt re indent XML 对于一个文件来说 这一步骤并不会花费太长的时间 但是加起来就会产生很多很多的文件 有没有办法将其放在记事
  • Linux 上的 mpc / mpd:如何播放本地 wav 文件

    我正在尝试将本地文件添加到 mpd 通过 mpc 并播放它 我的平台是OpenWRT嵌入式linux 因此 从手册页来看 它指出 mpc add
  • 如何将 .sql 文件的内容读入 R 脚本以运行查询?

    我已经尝试过readLines和read csv功能 但随后不起作用 以下是该内容的内容my script sql file SELECT EmployeeID FirstName LastName HireDate City FROM E
  • Node Express 中的 res.sendfile 并传递数据

    有没有办法从 Node JS 应用程序重定向到 HTML 文件 例如 res sendFile http expressjs com api html res sendFileExpress 并将 JSON 数据传递到 html 文件 我知
  • Bash 子 shell:括号:() VS 美元括号:$()

    在 bash 中 两者 and 创建一个子shell 彼此之间有什么区别 它们的典型用途是什么 只是创建一个复合命令 运行括号内的命令 做同样的事情 但也替换输出 来自文档 list list在子shell环境中执行 变量赋值和内置 影响
  • Docker Swarm如何实现卷共享?

    Docker Swarm 可以管理两种类型的存储 volume and bind While bindDocker 文档不建议这样做 因为它在本地目录 在每个 swarm 节点上 与任务之间创建了绑定 volume没有提到实现 所以我不明白
  • apache centos 上的多个 php

    如何在 Centos 6 5 上同时运行多个 php 版本 就是这样 要求Centos 6 5 可能适用于 6 6 和 7 Apache Apache 2 2 15 可能与其他版本一起使用 本指南安装和使用FASTCGI 请参阅替代安装的注
  • 获取 JavaScript 数组中的下一个和上一个元素

    我有一个很大的数组 带有非连续的 ID 看起来像这样 PhotoList 89725 new Array PhotoList 89725 ImageID 89725 PhotoList 89725 ImageSize 123 PhotoLi
  • 如何创建ear文件,并在其中包含war和jar文件

    我正在尝试从命令提示符创建 EAR 文件 我用过 jar cvf myServletWAR ear 但我的问题是 如何让这个 EAR 文件中包含 WAR 文件和 JAR 文件 我需要单独创建war文件并包含在ear文件中吗 我无法为此使用
  • 使用prepareForReuse的正确方法是什么?

    需要帮助了解如何在 UIKit 中使用prepareForReuse 这文档 https developer apple com reference uikit uitableviewcell 1623223 prepareforreuse
  • Django:为索引列指定 HASH 而不是 BTREE

    Django 模型中有没有好的方法来指定特定的索引存储类型 例如 MySQL 的默认存储类型是 BTREE 而对于我的特定列 使用 HASH 哈希表 作为存储类型可能会更有效 如果不创建自定义字段或修改 django 核心 我找不到一个好方
  • 黑莓中的队列线程

    我查看了 BB API 5 0 但找不到任何串行执行一批线程的方法 我知道 BB 对启动的线程数量有限制 所以如果用户点击速度足够快但我找不到像线程池这样的东西 我不想启动 7 是否有一个简单的解决方案 或者我是否必须创建一个数据结构 如果
  • Swift 2 错误处理和 while

    例如下面的代码 while let data Provider getData 使用 Swift 2 你会遇到两个错误 条件绑定的初始化程序必须具有可选类型 而不是 字符串 调用可以抛出 但它没有标记为 try 并且错误不会被处理 在这里进
  • 小样式自定义评级栏(只读自定义评级栏)

    我尝试创建一个自定义评级栏 我不使用style因为我只用过一次 所以 我创建了一个layer list in the drawable文件夹 其名称是custom rating bar xml
  • 在 UIWebView 中打开的 HTML 页面中自动填充用户名和密码

    使用 UIWebView 自动填充数据时如何使用 RegsEx 查找登录表单 我使用以下代码来获取所有表单数据 int NoOfForms self browser stringByEvaluatingJavaScriptFromStrin
  • RenderStrategy.ONE_PASS_RENDER 是摆脱 Wicket 应用程序中的 ?1 等页面版本参数的合理方法吗?

    我们已经使用 Wicket 1 3 7 几年了 目前正在将我们的项目升级到 wicket 6 x 我对页面版本参数做了很多研究 例如 1 附加到每个 URL 以及如何删除它们 不幸的是 在官方文档中找不到这方面的详细信息 在这样做的同时 我
  • Python/Windows,防止子进程(外部程序)显示弹出窗口

    Python 2 7 操作系统 Windows 程序始终在 Windows 上运行 因此交叉兼容性不是问题 我被迫使用外部应用程序作为验证过程的一部分 并且在隐藏作为该外部程序的输出的弹出窗口时遇到了麻烦 基本上我这样做 args A pa
  • 该算法的大 O 复杂度是多少?

    我有一个在下面编写的函数 这个函数本质上是一个归并排序 public static long nlgn double nums if nums length gt 1 int elementsInA1 nums length 2 int e