我想生成一个巨大的加权无向图,由一个巨大的邻接矩阵AJM表示。所以对于i和j的循环,
AJM [i] [j] = AJM [j] [i]
AJM [i] [i] = 0
权重在区间中生成为随机双数,比如[0.01,10.00]。如果我有10k个顶点,矩阵将是10k乘10k,带有双重类型的条目,如果我存储它,它在内存中是一个巨大的块。
现在我想为所需的边数设置一个阈值E,并忽略权重大于某个阈值T的所有边(T由E确定,E由用户定义),只存储最小的E边在载体中T下的重量供以后使用。你能否给我一些建议如何以有效的方式实现这一目标?最好避免整个邻接矩阵的任何存储,只需使用流结构。所以我想知道我应该如何生成矩阵并进行阈值处理?
我想是需要写文件和阅读文件,对吧?
一种方法是,在对文件进行某种操作之后,我设置了阈值E并执行以下操作:
我逐个从矩阵中读取元素,所以我不读整个矩阵(你能展示一些用于实现这个目的的C ++代码行吗?),并将其权重插入到一个小堆中,然后存储它向量中对应的边缘索引。当堆的大小达到E时我停止,这样边缘索引的向量就是我想要的。
你认为这是正确的方法吗?还有其他建议吗?请指出我在这里可能遇到的任何错误。非常感谢你!
答案 0 :(得分:0)
如果不需要保留原始的阈值图表,那么听起来有一种简单的方法可以节省大量的工作。给定顶点数(V = 10,000),边数(E)是用户可配置的。只需随机选择顶点对,直到获得所需的边数。我错过了一个明显的原因,为什么这不相同?