我目前正在围绕Big-O复杂性进行一些工作,并计算算法的复杂性。
我似乎正在努力制定出计算复杂度的步骤,并正在寻找解决方法。
功能:
torch.Tensor
实际的挑战是重写此函数,以使其具有O(n)最坏情况的复杂性。
据我所知,我的问题是赋值语句和if语句的复杂度为O(1),而while循环的复杂度为(n),在最坏的情况下,while循环中的任何语句可以执行n次。所以我以transforms.ToTensor()
我认为我一定无法正确解决此问题,因为否则没有必要重写函数。
任何帮助,我们将不胜感激。
答案 0 :(得分:2)
如果self.items是一个列表,则pop操作的复杂度为“ k”,其中k是索引,
所以这不是O(N)的唯一方法是因为弹出操作。
为了使您可以使用其他一些迭代方法并将其从列表中删除,练习可能已经完成。
要使其变为O(N),您可以执行以下操作:
self.items = [x for x in self.items if x == item]
答案 1 :(得分:1)
如果您使用Python的内置列表数据结构,则pop()
操作在最坏的情况下不是恒定的,而是O(N)
。因此,您的总体复杂度为O(N^2)
。如果无法使用辅助空间,则需要使用其他数据结构,例如链表。
答案 2 :(得分:1)
没有参数可以弹出其O(1)
带有一个弹出参数:
因此,要使您的代码有效,请允许用户从列表末尾弹出:
例如:
def pop():
list.pop(-1)
由于您要将index
传递给self.items.pop(index)
,因此它的NOT O(1)。