Data structures 编程和数据结构

Data structures 编程和数据结构,data-structures,Data Structures,假设给定的数组p[1……N]和q[1……N]都未初始化,即每个位置可能包含一个任意值),以及一个初始化为0的变量计数。考虑下面的程序集和ISHOSET: set(i) { count = count + 1; q[count] = i; p[i] = count; } is_set(i) { if (p[i] ≤ 0 or p[i] > count) return false; if (q[p[i]] ≠ i)

假设给定的数组p[1……N]和q[1……N]都未初始化,即每个位置可能包含一个任意值),以及一个初始化为0的变量计数。考虑下面的程序集和ISHOSET:

set(i) { 
    count = count + 1; 
    q[count] = i; 
    p[i] = count; 
} 
is_set(i) {
    if (p[i] ≤ 0 or p[i] > count)
        return false; 
    if (q[p[i]] ≠ i)
        return false;
    return true;
}
表明如果集合(i)没有被某些i调用,那么不管p[i]包含什么,is_集合(i)都将返回false

我的推理:-是_集(i)
如果p[i]为0,那么我们知道计数为零,因此第一个If中的第二个条件将为真。因此,无论p[i]可能包含什么,它都将始终输入该If并返回false。如果错误,请更正我。如果未设置
i
,则
p[i]
可能包含任何可能的值,可能低于0或高于
count
,但它有可能包含这两者之间的一个可能值。因此,如果确实如此,我们需要检查第二个if语句
p[i]
包含您设置的
i
顺序中的位置,因此当然,
q[p[i]
应该等于
i
,因为
q[]
是存储时间顺序中的
i
值的数组。因此,如果没有设置
i
,则
p[i]
将存储不同数字的位置,因此
q[p[i]
将返回一个不同于
i
的数字,该数字将被设置在该位置,
设置(i)
对于某些
i
未被调用的确切含义是什么?它的意思是“对于每个
i
都没有调用
set(i)
”还是说“有一个
i
没有调用
set(i)
”?你推理中唯一的错误是,你假设任意值超出了你的范围,但一个任意值确实是,信不信由你,任意的,所以它实际上可能在这些界限之间。当然,如果你有一个小的N,几率是非常低的,但是让我们假设
N=2000000000
,它更接近最大整数值。现在机会有多大?你需要考虑每一个possibility@Codor老实说,这很容易理解。您可以调用
set(1)
set(2)
set(3)
set(5)
set(i)
是否未为某些
i
调用?是的,例如,对于
i=4
,或
i=6
,或
i=1000000
…如果未设置
i
,则
p[i]
可能包含任何可能的值,可能低于0或高于
count
,但它可能包含这两者之间的可能值。因此,如果确实如此,我们需要检查第二个if语句
p[i]
包含您设置的
i
顺序中的位置,因此当然,
q[p[i]
应该等于
i
,因为
q[]
是存储时间顺序中的
i
值的数组。因此,如果没有设置
i
,则
p[i]
将存储不同数字的位置,因此
q[p[i]
将返回一个不同于
i
的数字,该数字将被设置在该位置,
设置(i)
对于某些
i
未被调用的确切含义是什么?它的意思是“对于每个
i
都没有调用
set(i)
”还是说“有一个
i
没有调用
set(i)
”?你推理中唯一的错误是,你假设任意值超出了你的范围,但一个任意值确实是,信不信由你,任意的,所以它实际上可能在这些界限之间。当然,如果你有一个小的N,几率是非常低的,但是让我们假设
N=2000000000
,它更接近最大整数值。现在机会有多大?你需要考虑每一个possibility@Codor老实说,这很容易理解。您可以调用
set(1)
set(2)
set(3)
set(5)
set(i)
是否未为某些
i
调用?是,例如,对于
i=4
,或
i=6
,或
i=1000000
。。。