Arrays 线性时间位集算法中的Lehmar码生成
为了生成置换的词典索引,我们首先生成置换的Lehmar码——阶乘数系统中的基本表示。要做到这一点,我们取置换的每个元素,减去左边小于它的元素数。如何找到左侧元素的数量小于排列的特定数字?如果你简单地扫描所有的图像,你可以在线性时间内完成。如果将它们存储在二进制搜索树中,则可以在对数时间内完成。但也有一种方法可以在恒定的时间内完成。在博客中,“线性算法”一节介绍了这一点。引述: 让我们通过例子来研究这个算法,再次使用置换(2 0 1)Arrays 线性时间位集算法中的Lehmar码生成,arrays,algorithm,sequence,Arrays,Algorithm,Sequence,为了生成置换的词典索引,我们首先生成置换的Lehmar码——阶乘数系统中的基本表示。要做到这一点,我们取置换的每个元素,减去左边小于它的元素数。如何找到左侧元素的数量小于排列的特定数字?如果你简单地扫描所有的图像,你可以在线性时间内完成。如果将它们存储在二进制搜索树中,则可以在对数时间内完成。但也有一种方法可以在恒定的时间内完成。在博客中,“线性算法”一节介绍了这一点。引述: 让我们通过例子来研究这个算法,再次使用置换(2 0 1) 从长度为3的位集开始,初始化为零(000b) 排列的第一个元素
我可以看到这对特定的排列是有效的,但我完全不知道它为什么有效。让我们这样看:假设我们在排列的位置t。到目前为止,如果i位于当前元素的左侧,则位集中的位i为1。当你向右移动n-k次时,左边是字符串的前k位(考虑一直移动n次,然后撤消k次),所以现在我们有一些0和一些1,每个0和1对应一个小于当前元素的数字。因此,我们需要做的就是在结果字符串中计算1