- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在参加 CS 入门类(class),第一个项目有以下限制:
You may NOT:
- Make your program part of a package.
- Add additional public methods or variables.
- Use any built in Java Collections Framework classes anywhere in your program (e.g. no
ArrayList
,LinkedList
,HashSet
, etc.).- Use any arrays anywhere in your program.
- Add any additional
import
statements (or use the “fully qualified name” to get around addingimport
statements).
看到该项目的限制让我想知道在这些限制内人们实际上还可以做哪些其他事情。我看到的主要限制是“无数组”子句。
是否可以设计一个受这些约束影响的数据结构来模拟数组的性能特征?具体来说,数据结构应该表示一个固定长度的序列,支持通过索引“获取”或“设置”的操作,并且这些操作应该花费O(1)的时间,与序列的长度无关。
虽然可以构建类似图的结构,例如链表和树,但对这些数据结构的“获取”和“设置”操作将分别花费 O(n) 或 O(log n) 时间。我能想到的唯一的另一件事是一个具有几千个私有(private)字段和一个通过索引“获取”或“设置”的 switch
语句的类,但这仅适用于固定的序列长度。
最佳答案
我认为,如果您遵循规则的精神,那么您显然无法比 O(log n) 时间更好地获取或设置元素。原因是您实例化的每个对象最多可以存储固定数量的数据项和对其他对象的固定数量的引用,由该对象拥有的字段数量定义。
设 D 为对象保存的数据项的(最大)数量,F 为对象保存的引用字段的(最大)数量。需要明确的是,D 计算用于存储实际“数组”数据的字段,F 计算用于数据结构本身的字段。
如果您的访问时间为 O(1),那么您最多可以遵循 O(1) 次引用来访问单元格,这意味着您的“数组”大小仅限于 O(D * F^R),其中 R 是对完成一项操作所允许遵循的引用数量的固定限制。如果 D、F 和 R 三个都恒定,那么“数组”的大小也是恒定的。因此,在给定的限制下,模拟任意大小的数组数据结构的性能特征是不可能的。
这个论点可以进一步扩展,以证明 R 必须至少为 O(log n) 才能达到 n 个不同的数据项;即您必须遵循至少 O(log n) 次引用才能访问某个项目。您可以使用完全二叉树来实际实现此限制。
<小时/>也就是说,至少有一种方法可以遵循规则的文字而不遵循规则的精神。
严格禁止您使用数组或 JCF 库类,但关于第三方库类的唯一规则是不允许您导入它们或通过完全限定名称引用它们。您可以使用 ClassLoader.loadClass
方法从第三方库加载集合类,通过反射实例化它,将其赋值给Object
类型的变量,然后通过反射调用其方法。从技术上讲,这是允许的,因为 loadClass
采用“二进制名称”,而不是要加载的类的“完全限定名称”。 (我将让律师来争论您是否需要加载一个二进制名称不是完全限定名称的类。)
对于学究来说:我将有关数组的规则解释为您的代码中不能有数组(大概除了 main 方法中的 String[] args
),而不是您的代码调用的其他人的代码中没有数组;否则例如您的程序被禁止打印任何输出,因为写入 System.out 的数据会缓冲在数组中。我认为该规则不太可能旨在禁止打印任何输出。
关于java - 数据结构可以在不使用任何数组的情况下拥有 O(1) 访问时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59887976/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!