【发布时间】:2012-05-04 00:08:53
【问题描述】:
我需要一个序列中元素之间的比较索引。该索引是一个序列中相邻元素之间所有绝对比较的总和与一个序列及其长度可以具有的最大值之间的商。
例如,序列s1 = [0, 1, 2] 和s2 = [0, 2, 1] 分别具有绝对比较[1, 1] 和[2, 1]。没有其他长度为 3 的序列的绝对比较和值高于 3 的组合。因此,s1 和 s2 的比较索引应为 2/3 和 3/3。
这些序列总是有从0 到length - 1 的整数,并且可以有不相邻的重复元素,例如[0, 1, 0, 1, 0]。这些序列的所有元素值都在其较低和最高元素值之间。
我需要一个函数来计算给定长度的序列可以具有的绝对比较和的最大值。我写的函数(最高)返回错误的结果。 我写了这段代码:
def aux_pairs(seq):
n = 2
return [seq[i:i + n] for i in range(len(seq) - (n - 1))]
def comparisons_sum(seq):
return sum([abs(el[-1] - el[0]) for el in aux_pairs(seq)])
def highest(seq):
card = len(seq)
pair = [0, card - 1]
r = (pair * (card / 2))
if card & 1 == 1:
r.append(0)
return comparisons_sum(r)
def comparison_index(seq):
return comparisons_sum(seq) / float(highest(seq))
【问题讨论】:
-
我不太确定您在比较索引方面的目标是什么,您能澄清一下吗?不就是
sum(comp)/len(seq)吗? -
@Lattyware,索引可能不是描述我需要的最佳术语。分母应该是具有该长度的所有序列中具有最高 sum(com) 的序列的比较。例如,取长度 3:
-
抱歉,我按下了回车键。继续... 取长度为 3 的序列及其总和(com): [0, 1, 0] 2 [0, 1, 2] 2 [0, 2, 1] 3 [1, 0, 1] 2 [1, 0, 2] 3 [1, 2, 0] 3 [2, 0, 1] 3 [2, 1, 0] 2 长度为 3 的 sum(com) 的最大值是 3。所以,我的 ' 的分母index' 应该是 3。
-
对,这些序列是否已定义、是否需要生成,或者是否有算法可以解决(或者这就是问题所在)?
-
@Lattyware,我可以用给定长度的所有序列进行残酷的求和(com)演算,以获得最高值,但我想使用一些算法。问题是我该如何编写这个算法。