Python 这个数据结构有友好的名称吗?
在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
# 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)
可能更适合于。我没有把它贴在那里,因为据我所知,这是一个本科水平的问题,来自一个缺乏训练的理论家。