【发布时间】:2014-03-26 21:01:07
【问题描述】:
我有一个 class User 有 3 个对象(?)我不确定术语。
- 一个 (int) ID 代码
- 创建用户的 (int) 日期
- 和一个(字符串)名称
我正在尝试创建一个方法
- 将用户添加到我的数据结构 (1)
- 根据 ID 号返回用户名 (2)
- 返回按日期排序的所有用户的完整列表 (3)
- 返回名称有特定字符串的用户列表,按日期排序(4)
- 返回在特定日期之前加入的用户列表 (5)
我根据加入的年份(2004-2014)制作了 10 个数组,然后按日期再次对数组中的元素进行排序(按月和日排序)
我是否正确地认为这意味着方法 (3) 和 (5) 具有 O(1) 时间复杂度,但 (1)、(4) 和 (2) 具有 O(N)?
还有另一种数据结构/方法可以让我的所有方法使用O(1)?我反复尝试想出一个,但是方法(2)的包含让我很难过。
【问题讨论】:
-
基于比较的排序总是 O(N*log N),添加到已经排序的容器是 O(log N)。为避免这种情况,您需要水桶,就像您多年来拥有它们的方式一样。这会用内存换取执行时间。
-
所有这些都无法使用 O(1)。例如,#4 需要线性搜索。
-
@hyde 我的桶不是基于年份的 10 个数组吗?
标签: java arrays performance sorting hashmap