Python 这个数据结构有友好的名称吗?

Python 这个数据结构有友好的名称吗?,python,algorithm,data-structures,Python,Algorithm,Data Structures,在Python中为机器学习算法处理功能选择器时,我使用以下代码生成了一个数据结构: # Perform set partitioning on the results groups = [] for t in results: (jthName,kthName) = t jthGroup = -1 kthGroup = -1 # Just a simple list of hashes with online merging for idx,group

在Python中为机器学习算法处理功能选择器时,我使用以下代码生成了一个数据结构:

# Perform set partitioning on the results
groups = []
for t in results:
    (jthName,kthName) = t
    jthGroup = -1
    kthGroup = -1

    # Just a simple list of hashes with online merging
    for idx,group in enumerate(groups):
        if jthName in group:
            jthGroup = idx
        if kthName in group:
            kthGroup = idx
    if jthGroup == kthGroup:
        if jthGroup == -1: # Implicit: "and kthGroup == -1"
            groups.append(set((jthName,kthName)))
    elif jthGroup != kthGroup:
        if kthGroup == -1:
            # Merge kthName into jthGroup
            groups[jthGroup].add(kthName)
        elif jthGroup == -1:
            # Merge jthName into kthGroup (redundant if naturally-ordered)
            groups[kthGroup].add(jthName)
        else:
            # Merge jthGroup and kthGroup, since we have a connecting pair
            merged = set()
            merged.update(groups[jthGroup])
            merged.update(groups[kthGroup])
            groups.remove(groups[jthGroup])
            groups.remove(groups[kthGroup])
            groups.append(merged)
其中我的输入,
results
,是元组{2}的列表,
是集合的列表。注意,我的代码在这里并不一定有效;它仅用于说明目的

我的数据结构,
,具有以下属性:

  • 对于每个
    (jthName,kthName)

    • 如果在任何包含的集合中都找不到
      (jthName,kthName)
      元素,请在集合列表中创建
      集合((jthName,kthName))
    • 如果在一个包含的集合中正好找到一个
      (jthName,kthName)
      ,则将未找到的元素合并到该集合中
    • 如果
      (jthName,kthName)
      的每个元素位于不同的集合中,则将两个引用集合合并为一个集合
  • 循环不变量:
    jthName
    kthName
    不能包含在多个集合中


我对这种数据结构的解释是创建一组未知的连接节点图的平面分解,其中每个唯一的元素名称是一个节点,每个唯一的元素对是一条边。我的基本原理是,我的图是不完整的,我需要此视图仅选择每个图的已知成员,以输入一个算法,该算法将绘制边的连通性和方向性(即,由数据表示的完整数据集)。但是,我离题了


变量
组所表示的数据结构是否有友好的名称?如果是或不是,是否有一种更节省时间或空间的方法来执行此分解?

我认为您正在寻找的是一种称为

在执行Kruskal时经常使用它,因为如果使用路径压缩实现不相交集数据结构,它允许您在摊销nlog*n时间内进行n次查找(实际上小于该时间)

实现起来非常合理,我认为wiki页面伪代码非常适合python。如果您需要更多帮助

如果使用不相交集数据结构,则代码如下所示:

for t in results:
   (jName, kName) = t

   union(jName, kName)
可能更适合于。我没有把它贴在那里,因为据我所知,这是一个本科水平的问题,来自一个缺乏训练的理论家。