我被要求写伪代码并分析我的函数的运行时间。
我得到2个降序排序数组和1个整数k 然后要求找出2个阵列联合中第k个最大的数字。
我已经运行了我的代码,因为分配的duedate还没有通过,我不能在这里发布代码,对不起。
有一些缺陷, 问题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)?
请帮忙,
我感谢任何帮助。非常感谢。
答案 0 :(得分:0)
请记住,你正在使用伪代码;伪代码看起来不应该像C ++。
您应该尝试使用在作业或课堂中给出的尽可能多的信息,并尽可能少地做出假设。根据我为学校作业编写伪代码的经验,可以假设获得数组的长度是O(1)时间。
如果你的作业告诉你一个k的范围会很好,但是如果没有,你应该像你提到的那样检查案件。如果k无效,我认为引发异常是可以接受的。或者你可以提到某些情况下没有指定程序的行为。一般来说,如何专门处理赋值中未提及的案例并不是太关键,但以某种方式处理它们肯定是好的。