Python中常量时间更新字典

2024-09-28 05:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑一个由4个字符串组成的大列表。在

例如:['P0BH'、'LF3J'、'MA1Y'、'STSM'、'8Y74'、'JWBD']

我想按以下精确方式添加新字符串:

如果给定列表中已存在新字符串,请从列表中删除旧值,并在列表前面添加新字符串。例如,如果添加了字符串“MA1Y”,则输出列表如下所示: ['MA1Y'、'P0BH'、'LF3J'、'STSM'、'8Y74'、'JWBD']。如果列表中不存在新字符串,则只需将新字符串放在前面。例如,如果添加了字符串“FSH7”,那么输出列表将如下所示:['FSH7'、'P0BH'、'LF3J'、'MA1Y'、'STSM'、'8Y74'、'JWBD']。在

还有一个警告:算法必须以恒定的时间复杂度运行。我不在乎空间的复杂性。

当然,我已经实现了一个解决方案,如下所示。我相信它在持续的时间复杂性中运行,但我希望我们改进它或重新设计更好的东西。我的理解是一个映射有持续的时间删除、成员资格测试和分配。**在

我的tickerMap类中的addTicker方法是否以固定时间运行?

class tickersMap:
    def __init__(self, tickersList):
        self.Map = {t:i for i, t in enumerate(tickersList)}
        self.firstIndex = 0

    def addTicker(self, newTicker):
        if newTicker in self.Map:
            print('exists')
            del self.Map[newTicker]
            self.Map[newTicker] = self.firstIndex - 1
            self.firstIndex -= 1
        else:
            self.Map[newTicker] = self.firstIndex - 1
            self.firstIndex -= 1

    def listTickers(self):
        # This is O(nlog(n)) but is only required for printing 
        return sorted(self.Map, key=self.Map.get)

Tags: 字符串selfmap列表def时间复杂性firstindex
1条回答
网友
1楼 · 发布于 2024-09-28 05:23:52

你少了一个日志细节。在

而且,OrderedDict似乎非常符合您的需要。在

在我们分配了N个条目之后,赋值是O(1),只要N在此之后不再增长。但是,对于创建一个新条目的每个赋值,它被摊销为O(logn)。Python每次超过分配量就会加倍。如果继续添加和删除而不增加N,那么赋值将是O(1)。在

addTicker()可以有条件地del,然后无条件地执行最后两个语句,因为它们在任何一种情况下都是相同的。在

O(N)注释应该是O(nlogn),因为这是排序所需的时间,没有理由相信所有条目都已经按排序顺序排列了。在

相关问题 更多 >

    热门问题