- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
计算机科学的任何人都知道 HeapSort 在理论上是 O(n log n)
最坏情况,而 QuickSort 是 O(n^2)
最坏情况。然而,在实践中,一个良好实现的 QuickSort(具有良好的启发式)将在每个数据集上优于 HeapSort。一方面,我们几乎观察不到最坏的情况,另一方面,例如CPU 缓存行、预取等在许多简单任务中产生巨大差异。而例如QuickSort 可以在 O(n)
中处理预排序数据(具有良好的启发式),HeapSort 将始终在 O(n log n)
中重新组织数据,因为它不会利用现有结构。
对于我的玩具项目 caliper-analyze ,我最近一直在研究根据基准测试结果估算算法的实际平均复杂度的方法。特别是,我尝试了使用不同多项式拟合 Lawson 和 Hanson 的 NNLS。
但是,它还不太好用。有时我会得到有用的结果,有时我不会。我认为做更大的基准测试可能会有所帮助,尤其是尝试更多参数。
以下结果用于对 Double 对象进行排序,采用具有 10% 随机性的 SAW 模式。这次运行的 n 最多只有 500,因此对于实际使用来说并不是很有代表性……这些数字是估计的运行时对大小的依赖性。输出是手动编辑和手动排序,因此它不反射(reflect)工具当前提供的内容!
BubbleSortTextbook LINEAR: 67.59 NLOG2N: 1.89 QUADRATIC: 2.51
BubbleSort LINEAR: 54.84 QUADRATIC: 1.68
BidirectionalBubbleSort LINEAR: 52.20 QUADRATIC: 1.36
InsertionSort LINEAR: 17.13 NLOG2N: 2.97 QUADRATIC: 0.86
QuickSortTextbook NLOG2N: 18.15
QuickSortBo3 LINEAR: 59.74 QUADRATIC: 0.12
Java LINEAR: 6.81 NLOG2N: 12.33
DualPivotQuickSortBo5 NLOG2N: 11.28
QuickSortBo5 LINEAR: 3.35 NLOG2N: 9.67
您可以看出,虽然在此特定设置中(通常它根本无法令人满意),但结果在很大程度上与已知行为一致:冒泡排序的成本确实很高,而 QuickSort 上的良好启发式算法要好得多。然而,例如例如,具有三中值启发式的快速排序以 O(n + n^2)
估计结束,而其他 QuickSort 的估计为 O(n + n log n)
现在回答我的实际问题:
让我再次强调,我对理论的复杂性或形式分析不感兴趣。我有兴趣了解实现(理论上什至相同的算法)如何在真实 CPU 上对基准数据执行...我对常见范围的数值因素很感兴趣,更多比渐近行为。 (不,从长远来看,这不仅仅是时间复杂度和排序。但我对索引结构和其他参数感兴趣。卡尺还可以测量内存消耗,如果我没记错的话)另外,我是在 java 中工作。仅调用 Matlab 内置函数的方法对我没有用,因为我不生活在 matlab 世界中。
如果我有时间,我会尝试使用更多的尺寸重新运行其中一些基准测试,以便获得更多的数据点。也许它会起作用......但我相信有更强大的回归方法可以用来获得更好的估计,即使是从较小的数据集中。另外,我想检测样本何时太小而根本无法进行任何预测!
最佳答案
如果你想要实际的复杂性,你最好测量它。在没有测量的情况下试图猜测程序将如何执行是非常不可靠的。
同一个程序在不同机器上的表现可能大相径庭。例如一种算法在一台机器上可能更快,但在另一台机器上可能更慢。
您的程序可能会变慢,具体取决于机器正在做什么,因此看起来不错但大量使用缓存等资源的算法可能会变慢,并且在必须共享这些资源时会使其他程序变慢。
在机器上单独测试算法比尝试在真实程序中使用它快 2-5 倍。
Do you know rules-of-thumb of how many samples one needs to get a reasonable estimate? (in particular, when should the tool refrain from giving any estimate, as it will likely be inaccurate anyway?)
要确定像 90% 或 99% 这样的百分位数,您需要 1/(1-p)^2,即对于 99% 的分位数,您在预热后至少需要 10,000 个样本。对于 99.9% 的瓷砖,您需要一百万。
关于java - 估计实现的实际(非理论)运行时复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493629/
简单的单词自动完成功能仅显示与已输入字符相匹配的单词列表。但是我想根据单词出现的概率对自动完成列表中的单词进行排序,这取决于之前输入的单词,依赖于文本语料库的统计模型。为此我需要什么算法和数据结构?你
今天再来说下网站推广的五种基本方式。可能今天的文章比较宏观,按民间的说法就是比较“虚”,所以不愿看此类文章的同志请慎重。个人认为,要想把推广工作做好,不能只懂得务实,以为成天闷头干活就成了;一定要对
引言 众所周知,数据流分析是实现污点分析的一种常用技术 数据流分析分为过程内的数据流分析与过程间的数据流分析。前者是对一个方法体内的数据流分析,主要是基于CFG分析,不涉及方法调用;后者是基于不同
本文分享自华为云社区《大模型LLM之分布式训练》,作者: 码上开花_Lancer。 随着语言模型参数量和所需训练数据量的急速增长,单个机器上有限的资源已无法满足大语言模型训练的要求。需要设计分布式训
本文分享自华为云社区《五大基础算法--动态规划法》,作者: 大金(内蒙的)。 一、基本概念 动态规划法,和分治法极其相似。区别就是,在求解子问题时,会保存该子问题的解,后面的子问题求解时,可以直接拿来
**摘要:**介绍了Angular中依赖注入是如何查找依赖,如何配置提供商,如何用限定和过滤作用的装饰器拿到想要的实例,进一步通过N个案例分析如何结合依赖注入的知识点来解决开发编程中会遇到的问题。 本
使用 xUnit 2.4.1,我正在寻找一种方法让它在动态跳过集成测试时执行我的扭曲命令。 我知道 xUnit 不是为集成测试而设计的,但我无意将 xUnit 用于某些测试,不是-xUnit 用于其他
我遇到了这个问题; “无损压缩算法声称可以保证使某些文件变小而没有文件变大。 这是; a) Impossible b) Possible but may run for an indeterminat
指向结构的指针如此频繁,以至于有一个特殊的运算符:->。以下表达式是等效的: (*x).y x->y 将这个运算符简单地定义为这样的预处理器宏是否公平: #define (x)-> (*(x).)
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 11 年前关闭。 Improve this
我正在使用各种 jquery 插件,包括延迟加载、scrollTo、图像效果以及从阅读本网站上的人们的帖子中收集的各种片段。现在,所有这些效果都从页脚处发出,并且出现了滞后现象。效果就像是,犹豫,或神
我已经搜索了 1 个小时来了解(并获得可行的来源)调整大小在 CSS(媒体)中发生时如何触发以及由哪个组件触发。 我想要的是它在浏览器中的工作方式,调整窗口大小时它的作用。不是代码。 这样做的目的是创
我有一个问题,我不想实现。我只是想在我的推理中得到一点帮助。 我想确定两个对象是否重叠(它们的 x 和 y 坐标,以及它们的高度和宽度都存储在一个 vector 中),然后,如果重叠,则将它们从当前
我的问题实际上与代码无关,我知道如何反转字符串。 这是一个非常常见的面试问题,所以我想澄清一下我认为正确的解决方案是什么。 所以前提开始了,你在字符串的末尾有一个计数器,然后在开头有一个。然后交换它们
我正在尝试在 Android 上编写一个 GPS 跟踪(类似于慢跑应用程序),但 GPS 位置抖动问题使它变得丑陋。当精度为 FINE 且精度在 5 米以内时,位置每秒抖动 1-n 米。您如何从合法运
这个问题在这里已经有了答案: Why does adding 0.1 multiple times remain lossless? (3 个答案) 关闭 8 年前。 以下表达式返回 false(例
问答系统(Question Answering System,QA) 是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获
NLP问答任务 相似度和规则匹配,都是早期的方法,现在主流的方法,都是基于生成的方法 结构化数据问答,有两种形式,一种是知识图谱形式、一种是关系型数据库形式。 主要应用在企业中,减少销售的
什么是任务型对话: 任务型:用于帮助用户完成某领域的特定任务,例如订餐、查天气、订票等 闲聊型:也称作开放域对话系统,目标是让用户持续的参与到交互过程,提供情感陪伴 问答
常见的对话系统 个人助手 •Apple Siri, Amazon Alexa, Baidu Xiaodu 客户服务•餐厅预定、商品咨询、债务催收 休闲娱乐 •Micr
我是一名优秀的程序员,十分优秀!