Python 按相似性排序行和列的算法

Python 按相似性排序行和列的算法,python,excel,algorithm,sorting,similarity,Python,Excel,Algorithm,Sorting,Similarity,我偶然发现了一种方法,可以对包含二进制数据的矩阵的行和列进行排序,从而使连续行和列之间的更改数量最小化 例如,从以下内容开始: 在spreadsheed选项卡中描述的15个手动步骤后,获得下表: 我想知道: 此算法或方法的通用名称是什么 如何将其应用于较大的表(其中2^n将溢出…) 如何将其推广到非二进制数据,例如使用Levenshtein距离 如果有任何链接指向已经实现此功能的代码(Excel VBA、Python等)(否则我将编写它…) 谢谢 您可以用向量L=[1,1,0,….1]表示每

我偶然发现了一种方法,可以对包含二进制数据的矩阵的行和列进行排序,从而使连续行和列之间的更改数量最小化

例如,从以下内容开始:

在spreadsheed选项卡中描述的15个手动步骤后,获得下表:

我想知道:

  • 此算法或方法的通用名称是什么
  • 如何将其应用于较大的表(其中2^n将溢出…)
  • 如何将其推广到非二进制数据,例如使用Levenshtein距离
  • 如果有任何链接指向已经实现此功能的代码(Excel VBA、Python等)(否则我将编写它…)

  • 谢谢

    您可以用向量
    L=[1,1,0,….1]
    表示每一行,然后通过
    L0
    L1
    之间不同的对应位置的元素数量定义两行
    d(L0,L1)
    之间的距离。这就是所谓的二进制。如果您有非二进制数据,您只需扩展距离的定义,是的,Levenshtein距离将是一个选项

    定义好距离后,剩下的问题是最小化连续行之间的距离。这正是已知的NP-hard()类型

    直接的解决方案(访问所有置换)是O(n!),但是您可以通过使用动态规划轻松地做得更好。还有一些近似算法,例如快速计算非最优解的


    最后,对于实现,您可以轻松地搜索“旅行推销员excel/python”,并找到许多教程和示例。

    这是{0,1}^n中的欧几里德哈密顿路径;我认为可能会有常数因子近似算法,因为hampath与TSP密切相关(对于一般图,hampath和TSP都是np难的),我们有TSP的近似算法,但不希望以最佳方式解决它-尽管我不完全确定这个特定空间是否存在硬性证明,如果这是在P中,我会感到惊讶。我不知道VBA能做什么,所以我不能告诉你是否能在那里实现一个近似算法;我不知道这方面的硬度证明或近似算法,但它们可能存在。相关:,也可用作n元变量。实际上我错了;这不是hampath,而是不返回源的TSP,这是TSP路径问题(在文献中可能称为TSPP)。我还可以补充一点,对于非二进制坐标,你的问题就是欧几里德TSPP;另请参阅。我必须说,严格来说,这个“问题”可能不适合堆栈溢出格式。我的意思是,它有多个子问题(这是不鼓励的),这些组成部分的问题可以说不是编程问题(离题),或者太广泛(正确回答问题需要太多的写作)。尽管如此,这是一个有趣的问题,看到这个电子表格很酷!