- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个家庭作业问题如下(请注意,我不是在寻找确切的答案,只是在寻找简单的建议以继续前进)。
S is a data structure which supports Insert(x,S), Delete(x, S) and Find_Smallest_Item(S) in time <= T(n). Prove a lower bound for T(n) such as Ω(logn).
到目前为止,这是我的想法:
我想我需要找到一个化简方法,将这个问题化简为一个更简单的问题,并证明它不能低于 logn。我读了很多关于下界的教程,其中大部分都将问题简化为排序,然后他们将排序用作黑盒并证明算法不能低于 nlogn。
但是在这里,我们正在处理 logn,我不知道要减少到这样的算法。也许它必须对树结构的深度做一些事情,logn。但我不知道从哪里开始。
你能给我一些提示吗?
编辑:实际上我想到了一些事情,但我不知道我是否应该用这样的技巧来证明下界。因此,我假设我有插入、删除和 find_smallest 操作,每个操作都有一个 logn 时间复杂度。
例如,要构造一个排序列表,我可以使用 delete 和 find_smallest 函数,例如我可以第一次运行 find_smallest,在找到列表中的最小元素后,我将删除该元素。我将再次运行它,因此我会找到第二小的元素,依此类推。
因此,我可以使用删除和find_smallest函数来实现排序。因此,如果我继续这样做 n 次,它们中的每一个都将占用 logn(用于删除)+ logn(用于查找最小值),因此总的来说,排序将占用 nlogn。
不过,我不知道如何调整它以进行插入。
编辑2: 为了使用插入来证明:找到列表中第i个最小的元素后,如果我将它插入到第i处会怎么样?例如使用上述过程找到第三个最小元素后,我可以将它插入到数据结构的第三个索引中。因此,最后我将得到一个排序的数据结构。
最佳答案
将您的问题简化为另一个问题将为您提供 O() 的上限,而不是下限。
另一方面,如果您可以使用问题的任何解决方案来实现具有众所周知下限的其他算法(有效地将问题减少到您的问题),则可能会给出您正在寻找的下限.
回答:
正如其他人所建议的,您可以使用数据结构 S 来实现排序:
for i in range(input):
Insert(S, input[i])
for i in range(input):
x = Find_Smallest_Item(S)
output[i] = x
Delete(S, x)
对于大小为 N 的输入,此算法对您的三个操作中的每一个都进行 N 次调用。然而,我们知道任何通用排序算法必须有 O(N log N) 的最坏情况。
这意味着在某些情况下,上述排序中数据结构调用的平均时间为每次调用 O(log N)。由于这与渐近优于 log N 的任何 T() 不兼容,因此您有下限。
一些注意事项:
您的问题中描述的数据结构类型称为 priority queue .
由于您试图证明任何可能优先级队列的下限,您不能对实现做出假设。仅仅因为特定的数据结构为您提供了特定的 O() 性能,并不意味着一些完全不同的数据结构再好不过了。
有许多优先级队列数据结构满足所有调用的 O(log N),因此这实际上是一个紧下限。
关于algorithm - 如何证明数据结构的下界 logn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642440/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!