问题引入:
上篇文章我们的问题引入中提到了DAG中的LCA定义问题,其实对于节点信息熵,其中的一种定义就是-log(d(node)),d(node)也就是求这个节点的所有子孙数量,那么自然而然,我们就想到了用BFS的思想,由于我们最终要计算信息熵(将在后续文章之图论算法DAG中LCA的算法实现里体现)并根据信息熵决定两个节点之间的相似度,所以对于所有节点我们都给它实际的子孙数量加1,这样就避免了叶子节点子孙数量为0的情况,否则计算信息熵时取log就没有意义。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
public class DescendentsICCalculator {
Map<String, LinkedList<String>> graph;
Map<String, Integer> outmap;
int total;
public DescendentsICCalculator(String path) {
String[] strs;
String str;
total = 0;
try {
BufferedReader br = new BufferedReader(new FileReader(