0

我被要求编写伪代码并分析我的函数的运行时间。

我得到 2 个降序排列的数组和 1 个整数 k,然后被要求找出 2 个数组的并集中的第 k 个最大数。

我已经运行了我的代码,因为作业截止日期还没有过去,我不能在这里发布代码,对不起。

有一些缺陷,问题 1:我不知道我是否需要处理 k>sum(arraylen(a & b)) 之类的场景,或者如果给定 2 个数组为空的场景......说如果我必须,什么我应该使用返回值吗?-1?如果第 k 个最大的恰好是 -1 怎么办……我不确定。

问题2:当我试图获取数组的长度时,我使用了sizeof(ArrayA)/4,(C++),我的朋友指出: - 一方面,sizeof可能不是伪代码的组成部分,所以我可能需要像 ArrayA.length() 一样使用 - 另一方面,如果我使用 length(),它将使我的算法采用 O(n) 而不是 O(k),因为数组需要完全通过自身才能获得长度。他的观点是真的吗?如果是,我应该如何修改我的代码,以便它可能是 O(k) ?请帮忙,

我很感激任何帮助。多谢。

4

1 回答 1

0

请记住,您使用的是伪代码;伪代码不应该看起来像 C++。

你应该尽量使用在作业或课堂上提供的尽可能多的信息,并尽可能少地做出假设。根据我为学校作业编写伪代码的经验,假设获取数组的长度是 O(1) 时间是可以接受的。

如果您的作业告诉您 k 的范围会很好,但如果没有,您应该检查您提到的案例。如果 k 无效,我认为引发异常是可以接受的。或者你可以提到在某些情况下没有指定程序的行为。一般来说,你如何具体处理作业中没有提到的情况并不是很关键,但以某种方式处理它们肯定看起来不错。

于 2014-01-29T17:49:20.997 回答