考虑从一组符号中提取元素的列表,例如{A, B, C}
:
List --> A, A, B, B, A, A, A, A, A, B, C, C, B, B
Indexing indices --> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
我如何重新排列这个列表,以便对于任何符号,我们在列表的前半部分有大约一半的符号,即列表的[0, [N/2]]
,在后半部分有一半?i、 例如[[N/2, N]]
请注意,这个问题可能有多种解决方案。我们还想计算排列的索引的结果列表,以便我们可以将新的排序应用于与原始排序相关联的任何列表。你知道吗
这个问题有名字吗?有什么有效的算法吗?我能想到的大多数解决办法都是非常残酷的。你知道吗
您可以在这里使用词典,这需要
O(N)
时间:输出:
您可以通过获取符号的秩顺序,然后为输出数组的每一半选取备用秩来完成此操作:
默认情况下,^{} 使用快速排序算法,平均时间复杂度O(nlogn)。索引步骤是O(1)。你知道吗
您可以使用
collections.Counter
,这比只使用defaultdict
更好——您可以将项目分别放置在前半部分和后半部分。这样,如果您愿意的话,您可以随意地洗牌上半部分和下半部分(并且只需跟踪洗牌排列,例如NumPy的argsort
)。你知道吗这给了
相关问题 更多 >
编程相关推荐