【发布时间】:2017-01-27 00:29:32
【问题描述】:
完全披露这是一个家庭作业问题,因此,我不会要求具体的解决方案,只是对一些问题的一般性答案。问题正文如下:
给定一个 T 类型的排序数组,它必须实现 Comparable 接口, 编写一个在数组中查找特定元素的 Java 泛型方法 并返回它,如果没有找到则返回 null。请注意,您的算法 必须在 log base 3 time 中运行更坏的情况,log base 2(二进制搜索)解决方案 将不会获得任何信用
还有一个额外的规定是算法必须是迭代的,而不是递归的。
1) 所以我的第一个问题是,我如何确定算法以对数基数 3 而非对数基数 2 运行?两者仅相差一个常数因子,因此即使我分析算法的结构,我怎么知道我是在 Log3(n) 时间运行,还是仅在 (~0.63)(Log2(n)) 运行时间?这还重要吗?
2) 我的印象是二进制搜索或多或少是搜索排序数组的标准快速算法,因此除了二进制和线性搜索之外,还有哪些其他搜索算法可以从中寻找灵感?
3) 有没有我遗漏的东西,一些允许比标准二进制搜索更快地搜索数组的规定?
非常感谢任何帮助,如果这个问题相当具体,很抱歉,但我认为它的某些部分可以普遍适用。
【问题讨论】:
-
@dhS:不正确,我们在这里是为了解决恰当的问题,这些问题可以增强 SO 所追求的问题和答案的知识库。恕我直言,这个问题符合这个要求,因此我赞成。
-
不清楚你在问什么,因为你没有具体说明你的意思。
-
这只是我,或者任务意味着使用以 3 为底的搜索而不是 2 ......所以分成三份而不是索引的一半......这是
T(log3(n))但需要 2x @987654323 @ 每次迭代而不是单个迭代。还有其他搜索然后二进制在那里你可以例如看看这个How approximation search works -
如您所见,分配没有意义。您可能希望编写一个三元搜索,它不会比二分搜索快。但是,如果计算机科学对你很重要,你应该弄清楚你是否真的被一个实际上并不了解任何计算机科学的人教过,以及你将要做什么。
-
请告诉我们问题作者的想法!如果您已经知道,那就是。