我已经研究排序算法几个星期了,但我的一个问题仍然没有答案:对于固定大小的和随机访问的集合,是否有最佳的顺序比较排序?大多数排序算法都适应于集合的大小,但是知道要排序的集合的大小可以为这个大小选择特定的排序算法。例如,下面的算法应该用最优比较数和最佳交换或赋值数(它是C++,但应该很容易翻译成任何语言)对三个值进行排序:
void sort3(int& x, int& y, int& z)
{
if (x < y) {
if (z < y) {
if (z < x) {
合并一个未排序数组类型的集合与下面的代码有什么不同?
Comparable [][] collections {colA, colB, colC};
在搜索之后,我找到了一种合并原始数据的两个排序数组的方法。
public static int[] merge(int[] a, int[] b) {
int[] answer = new int[a.length + b.length];
int i = 0, j = 0, k = 0;
while (i < a.length && j < b.length)
{
if (a[i] < b[j])
动态规划问题具有最优子结构,其解可以用递推关系来描述。
排序列表是将元素添加到已经排序的列表中,因此插入排序具有最佳的子结构。递归关系可以描述为
Sorted_List_n = Sorted_list_n-1 + next element
那么,为什么插入排序不被视为动态规划算法呢?我理解它是如何在Fibonacci数和编辑距离中应用的,但并不是超出了这一点。
给定一组区间,[x,y] where 0 <= x,y <= 2000如何求出能覆盖的最小点数(即每个区间至少包含一个点集),所有区间?
示例:
Given Set of intervals:
[2,5]
[3,7]
[7,10]
那么答案应该是2(覆盖所有间隔所需的最小点数),因为点x=3,x=7是一个解决方案。
问题:
将任意三个不同的值按升序排列到一个列表中的最优算法(基于比较值)中所需的最小比较数是多少?四种不同的价值观的答案是什么?
选项:
a. 2 and 3
b. 3 and 4
c. 3 and 5
d. 3 and 6
e. 6 and 12
我正在准备AP考试,并发现了这个问题。
我知道泡泡排序和选择排序,所以我想也许泡泡排序应该是最有效的。所以,我把它应用在一个虚构的列表{a, b, c}和{a, b, c, d}上,得到了3和6的比较数,但是测试页面上说它是不正确的。
在第一种情况下,我是如何得到3 的?--我不得不在第二次测试中比较指数0, 1、1, 2和0, 1 --总
考虑到我是否可以使用BFS实现图形着色,我提出了下面的伪代码方法。
虽然它看起来确实像一个贪婪的算法,但我不确定它的正确性。有什么专家的意见吗?
colors[MAX_COLORS];
colorsUsedSoFar[] = NIL;
like BFS, color first node u with colors[0] i.e color[u] = colors[0];
colorsUsedSoFar[] += colors[0];
for each node v adjacent to u{
(if v not already colored){
color[v] = co
我在我的代码中使用了这些,但我认为它们可能没有手动编码的过程那么快。我搜索了一下,发现一些文章说System.arraycopy()实际上比手动复制数组更快。我不太确定这是对还是错。
此外,与我们用代码编写的函数相比,函数Array.sort()是否更快?
// I am merging the arrays here into a new integer array called newarray3
int[] newarray3= new int[input1.length + input2.length];
System.arraycopy(input1, 0, new