algorithm - 序列跟踪百分比

标签 algorithm statistics

问题陈述:一个人必须按顺序前往一组位置: Seq:L1 L2 L3 L4 L5 L6(假设L1、L2是位置)

但是他按照不同的顺序去了不同的地点: 实际序列:L3 L1 L2 L4 L5 L6

现在我需要找出后面的 % 序列是什么。请记住,该算法应考虑 L4、L5、L6 仍然在 L3 之后。所以这不是一个简单的%问题。

非常感谢任何帮助

最佳答案

这是一个名为 Longest Increasing Subsequence 的问题并且有 O(n log n) 算法。

要找到百分比,您只需找到 LIS(V)/length(V)

以下是 Python 中的示例实现 (O(n^2))

编辑:更改代码以明确指出 O(n) 步骤可以变成 O(log n)

def LIS(V):
    n = len(V)
    T = [0]*(n+1)

    L = 0
    for i in xrange(n):
        #this step can be a binary search
        j = max(j for j in xrange(L+1) if j==0 or V[T[j]] < V[i])

        T[j+1] = i
        L = max(L, j+1)

    return L/float(n)*100

print '{:.2f}%'.format(LIS([3, 1, 2, 4, 5, 6])) #83.33%
print '{:.2f}%'.format(LIS([1, 2, 3, 4, 5, 6])) #100.00%
print '{:.2f}%'.format(LIS([6, 1, 2, 5, 4, 3])) #50.00%

关于algorithm - 序列跟踪百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957231/

相关文章:

python - 如果变量包含的只是数字,如何知道变量是分类变量还是数值变量?

language-agnostic - 了解何时执行了足够的性能测试迭代的统计方法

python - 为什么同一解决方案的逐位算法的运行时间不同

algorithm - Strassen 的算法证明

arrays - 在不排序的情况下找到未排序数组的中位数

optimization - 哪些统计概念可用于概要分析?

matlab - 在 MATLAB 中测试单峰(Unimodality)或双峰(Bimodality)分布

php - 逐步将项目添加到站点

python - 什么是编写密码破解算法的有效方法(python)

c - 扩展 rand() 的范围时改进 "randomness"