python - 按相似性对行和列进行排序的算法

标签 python excel algorithm sorting similarity

我跌倒了a spreadsheet这解释了一种对包含二进制数据的矩阵的行和列进行排序的方法,以便最小化连续行和列之间的更改次数。

例如,开始于:

initial table

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

final result

我想知道:

  1. 这个算法或方法的通用名称是什么?
  2. 如何将它应用到更大的表(其中 2^n 会溢出...)
  3. 如何将其推广到非二进制数据,例如使用 Levenshtein 距离?
  4. 如果有任何指向代码(Excel VBA、Python 等)的链接已经实现了这个(否则我会写它...)

谢谢!

最佳答案

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

一旦您明确定义了距离,剩下的问题就是最小化连续行之间的距离。这正是 Traveling salesman problem ,已知为 NP-hard(http://www.diku.dk/hjemmesider/ansatte/jyrki/Paper/EKP85.pdf)。

直接解决方案(访问所有排列)是 O(n!),但您可以使用动态规划轻松地做得更好,例如 Held–Karp_algorithm .还有近似算法,比如Nearest_neighbour_algorithm快速计算出非最优解。

最后,对于实现,您可以轻松地在 google 上搜索“traveling salesman excel/python”并找到许多教程和示例。

关于python - 按相似性对行和列进行排序的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36543960/

相关文章:

python - 为什么当我覆盖 base.html django-admin 时已禁用响应式界面?

VBA IE 更改下拉值

c# - 如何在 C# 中向 excel 文件添加新行

algorithm - push relabel算法分析

c++ - Prim 算法以下代码的运行时间

python - 在 Django 中检测更改的密码

python - 预期交互式解析失败?

python - 如果其中一个线程先结束,则结束python多线程

mysql - 导出大型 MySql 表

arrays - 在数组中的给定位置之后查找元素第一次出现的有效方法是什么?