Algorithm 顺序搜索与二进制搜索的比较
假设我有一个未排序的实数数组,长度Algorithm 顺序搜索与二进制搜索的比较,algorithm,quicksort,binary-search,asymptotic-complexity,linear-search,Algorithm,Quicksort,Binary Search,Asymptotic Complexity,Linear Search,假设我有一个未排序的实数数组,长度N。我想找到数组中最大的非正数y,然后是小于y的第一个数x,以及大于y的第一个数z 我想从理论上比较顺序搜索和二进制搜索的非渐近性(即,不仅仅是大操作系统),以找到这些值。是否有理由声明: 顺序搜索需要 0排序比较 3*N搜索比较(三次连续搜索) 二进制搜索需要 2*N*ln(N)≈ 1.39*N*log_2(N)排序比较() , 最多进行log_2(N)比较以进行搜索(由于数组已排序,因此只有一次搜索,因此我们可以在找到y后查看排序数组中的相邻值以查找
N
。我想找到数组中最大的非正数y
,然后是小于y
的第一个数x
,以及大于y
的第一个数z
我想从理论上比较顺序搜索和二进制搜索的非渐近性(即,不仅仅是大操作系统),以找到这些值。是否有理由声明:
- 顺序搜索需要
排序比较0
搜索比较(三次连续搜索)3*N
- 二进制搜索需要
排序比较() ,2*N*ln(N)≈ 1.39*N*log_2(N)
- 最多进行
比较以进行搜索(由于数组已排序,因此只有一次搜索,因此我们可以在找到log_2(N)
后查看排序数组中的相邻值以查找y
和x
)z
1.39*N*log_2(N) + log_2(N) < 3*N
<=>
0 < N < 3.44779
1.39*N*logu2(N)+logu2(N)<3*N
0
i、 e.仅适用于非常小的阵列?是的,您的结论是正确的。然而,通常情况下,使用排序数组(或任何其他有组织的结构)的要点是只执行一次预处理步骤或很少执行预处理步骤,而不是频繁查询。经过多次查询,预处理成本得到了回报。是的,您的结论是正确的。然而,通常情况下,使用排序数组(或任何其他有组织的结构)的要点是只执行一次预处理步骤或很少执行预处理步骤,而不是频繁查询。经过多次查询,预处理成本得到了回报。是的,您的结论是正确的。然而,通常情况下,使用排序数组(或任何其他有组织的结构)的要点是只执行一次预处理步骤或很少执行预处理步骤,而不是频繁查询。经过多次查询,预处理成本得到了回报。是的,您的结论是正确的。然而,通常情况下,使用排序数组(或任何其他有组织的结构)的要点是只执行一次预处理步骤或很少执行预处理步骤,而不是频繁查询。经过多次查询,预处理成本得到了回报。不,这不是一个有效的结论,原因有几个
- 你只考虑比较的成本(这是次要的),而不是分行和掉期的成本
- 您使用的是quicksort执行的平均比较次数的近似值,该值仅渐近有效
- 您使用“操作数”作为“速度”的替代。真正的处理器不需要固定的时间来执行给定的操作,它们在一个过程上花费的总时间不是每个操作执行时间的总和
- 你只考虑比较的成本(这是次要的),而不是分行和掉期的成本
- 您使用的是quicksort执行的平均比较次数的近似值,该值仅渐近有效
- 您使用“操作数”作为“速度”的替代。真正的处理器不需要固定的时间来执行给定的操作,它们在一个过程上花费的总时间不是每个操作执行时间的总和
- 你只考虑比较的成本(这是次要的),而不是分行和掉期的成本
- 您使用的是quicksort执行的平均比较次数的近似值,该值仅渐近有效
- 您使用“操作数”作为“速度”的替代。真正的处理器不需要固定的时间来执行给定的操作,它们在一个过程上花费的总时间不是每个操作执行时间的总和
- 你只考虑比较的成本(这是次要的),而不是分行和掉期的成本
- 您使用的是quicksort执行的平均比较次数的近似值,该值仅渐近有效
- 您使用“操作数”作为“速度”的替代。真正的处理器不需要固定的时间来执行给定的操作,它们在一个过程上花费的总时间不是每个操作执行时间的总和
不,这不是一个有效的结论,有几个原因
不,这不是一个有效的结论,有几个原因
不,这不是一个有效的结论,有几个原因