Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何将大型二部图用户项转换为项?_Algorithm_List_Data Structures_Graph Algorithm - Fatal编程技术网

Algorithm 如何将大型二部图用户项转换为项?

Algorithm 如何将大型二部图用户项转换为项?,algorithm,list,data-structures,graph-algorithm,Algorithm,List,Data Structures,Graph Algorithm,我有一个非常大的(10米以上的边,~5米的顶点)二分无向用户项目图 item1: user1, user2, user3, ... 或 我需要将我的图转换为items-items图,其中I和j顶点之间的边的权重等于同时使用这两个项的用户数(即,与item_I和item_j相邻的顶点集的交点中的元素数)。这里是一个问题,它似乎需要我做$O(n^2)$运算,其中$n$是图形中的边数,这在我目前拥有的简单家用pc上是不可能的。有什么解决办法吗?一些概率数据结构可以很好地满足我的需要,因为我可以丢失

我有一个非常大的(10米以上的边,~5米的顶点)二分无向用户项目图

item1: user1, user2, user3, ... 


我需要将我的图转换为items-items图,其中I和j顶点之间的边的权重等于同时使用这两个项的用户数(即,与item_I和item_j相邻的顶点集的交点中的元素数)。这里是一个问题,它似乎需要我做$O(n^2)$运算,其中$n$是图形中的边数,这在我目前拥有的简单家用pc上是不可能的。有什么解决办法吗?一些概率数据结构可以很好地满足我的需要,因为我可以丢失一些小百分比的数据

表示法:m=旧图形中的边数

  • 按用户对边缘列表
    E
    (建议格式的第二版)进行排序(取O(m log(m))
  • 通过
    E
    确定同一用户(O(m))的所有连续边的运行
  • 运行中的每一对边在新图形中为您提供一条边->将其添加到新图形的边列表
    F
    (O(| F |=n|u用户x max_n_项目/u用户^2))
  • F
    中的所有重复项收缩为单条边,边权重由重复项的数量(O(| F |))给出

  • 如果您的图是稀疏的,即每个用户的最大项目数很小,则上述算法应该相当有效。否则,此算法存在的问题是,它在收缩新图之前会枚举新图中的所有边,因此您应该考虑如何直接获得边权重。

    您可能指的是二分图,而不是二分图。@user1734710谢谢为了更正!
    userX1: itemY1
    userX2: itemY2
    ...