Algorithm 使用部分计数排序算法返回a和b之间的元素数
我在一个关于计数排序算法的网站上发现了这个问题,这个问题是一个练习!我解决了这个问题,我想知道这是正确的吗 练习: 使用计数排序算法的思想,提供一个n个整数在0到k范围内的算法,在时间O(1)中,回答这n个元素中有多少在区间[a,b]中?当然,您的算法应该处理n个元素,这些元素可以帮助您获取a和b(0)之间的数字≤ a、 b≤ k) 。这一基本过程应及时(n+k)。 这是我的算法:Algorithm 使用部分计数排序算法返回a和b之间的元素数,algorithm,analysis,Algorithm,Analysis,我在一个关于计数排序算法的网站上发现了这个问题,这个问题是一个练习!我解决了这个问题,我想知道这是正确的吗 练习: 使用计数排序算法的思想,提供一个n个整数在0到k范围内的算法,在时间O(1)中,回答这n个元素中有多少在区间[a,b]中?当然,您的算法应该处理n个元素,这些元素可以帮助您获取a和b(0)之间的数字≤ a、 b≤ k) 。这一基本过程应及时(n+k)。 这是我的算法: Algorithm Range(A,k,a,b) {Consider C is the output array
Algorithm Range(A,k,a,b)
{Consider C is the output array of PartOfCountingSort algorithm}
C<--PartOfCountingSort(A,k)
//finding the number of elements between a and b
numberOfElements<-- C[b]-C[a]+1
return numberOfElements
//end of the Range algorithm
------------------------------------
PartOfCountingSort(A,k) // Theta(n+k)
OutPut: array C is the output of this algorithm
for i<-- 1 to k
C[i]<-- 0
for j<-- 1 to A. length
C[A[j]]<--C[A[j]]+1
for i<--2 to k
C[i]<--C[i]+C[i-1]
算法范围(A、k、A、b)
{考虑C是计算排序算法的一部分的输出数组}
C
numberOfElements@matin1234-否,对于a=0
返回C[b]
,对于a=1
返回C[b]-C[0]
。问题是,在计算排序的部分
函数中没有初始化C[0]
。它也应该初始化为0。还有,我为什么要处理“a=0,a=1”?我想我应该检查这个“a=b或bI”并用第一个for循环初始化C[0],我认为计数排序中的所有范围都以0开头!!@matin1234-如果需要,您可以检查b
,在这种情况下没有解决方案。但是,您的问题陈述说[a,b]
是一个区间,因此通常b
不能低于a
。您应该处理a=0
,因为C[b]-C[a-1]
是C[b]-C[-1]
当a=0时,并且C[-1]
没有意义。您不初始化C[0]
在第一个循环中,因为第一个循环从1
开始。它需要从0
开始。