排序数组和 indexOf() 运行时
Sorting an array and indexOf() runtime
假设 array.indexOf()
从数组的开头进行线性搜索是否安全?
所以如果我经常搜索最大值,在调用 indexOf
之前对数组进行排序是否会使它 运行 更快?
备注:
我只想排序一次,搜索多次。
"biggest value"实际上是最流行的搜索关键字,它是一个字符串。
是的,indexOf 是从第一个开始到最后一个。根据排序算法的性能,在询问第一个条目之前对其进行排序会在性能上有所不同。通常,快速排序中的 O(N log N) 到线性搜索中的 O(n)。我建议您使用随机值计数对其进行简单测试,看看性能如何表现。
当然要看你的DataObject:
数组列表:
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
也许 TreeSet 也可以帮助您一直订购。
最后我想说:"Depends on your data-container and how the ordering or search is implemented and where the performance in the whole process is needed"。
正如评论所说,对于纯数组,您可以制作 binarySearch,它具有与快速排序相同的性能影响。
所以最后不仅仅是算法性能的问题,还有你在什么时候需要过程中的性能。例如,如果您有很多时间添加值而没有时间获取所需的值,则排序结构可以很好地改进它,例如 Tree-Collections。如果您需要通过添加东西来提高性能,则可能相反。
假设 array.indexOf()
从数组的开头进行线性搜索是否安全?
所以如果我经常搜索最大值,在调用 indexOf
之前对数组进行排序是否会使它 运行 更快?
备注:
我只想排序一次,搜索多次。
"biggest value"实际上是最流行的搜索关键字,它是一个字符串。
是的,indexOf 是从第一个开始到最后一个。根据排序算法的性能,在询问第一个条目之前对其进行排序会在性能上有所不同。通常,快速排序中的 O(N log N) 到线性搜索中的 O(n)。我建议您使用随机值计数对其进行简单测试,看看性能如何表现。
当然要看你的DataObject: 数组列表:
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
也许 TreeSet 也可以帮助您一直订购。
最后我想说:"Depends on your data-container and how the ordering or search is implemented and where the performance in the whole process is needed"。
正如评论所说,对于纯数组,您可以制作 binarySearch,它具有与快速排序相同的性能影响。
所以最后不仅仅是算法性能的问题,还有你在什么时候需要过程中的性能。例如,如果您有很多时间添加值而没有时间获取所需的值,则排序结构可以很好地改进它,例如 Tree-Collections。如果您需要通过添加东西来提高性能,则可能相反。