我遇到了一个针对以下问题的高效算法遇到了一些麻烦,我想知道这里是否有人可以帮助我。不,这不是功课。任何帮助表示赞赏!
假设我有一个包含以下元素的集合:{A,B,C,D,.... Z}。
每个元素都有一定的锁定要求,满足这些要求可以解锁集合中的其他元素。
最初,在循环遍历集合时,元素A被锁定,但集合上的后续迭代将我带到元素D,并且在处理元素D之后,我获得了能够使用元素A所需的组件。 L最初被锁定,但在处理元素O之后,可以处理元素L.
除了在集合上循环两次或反向循环以及对集合进行排序之外,还有另一种方法可以在单个循环中处理所有元素吗?
答案 0 :(得分:0)
好吧 - 如果你知道哪些元素可以通过访问元素解锁,你可以接下来访问它们 - 因为它们更有可能被解锁 - 你应该始终保持指向你的初始线性搜索已到达的地方 - 和也许是一个反击,看你是否已经通过所有元素 - 如果你对另一个元素的访问没有成果,你可以从这里恢复。这不会降低大O - 但可能会改善平均时间。这假设您可以在O(1)时间内进行搜索。 另外我喜欢将锁定元素移动到最后的想法 - 甚至更好地删除解锁元素(因为这将最多添加移动元素的时间) - 这将节省一些时间遍历数组/列表/ SearchTree