Example #1
0
    G = read_file(filename)
    start_time = time.time()
    G.preprocess()
    PQ = MaxHeap()

    for i in range(G.N):
      PQ.update(i, G.N * G.N)

    S = set()
    cur_val = G.N * G.N

    used = set()

    for curr_budget in range(budget):
      while True:
        cur, val, aux = PQ.pop()
        if cur == -1: break
        if cur in used: continue
        new_val = G.avg_dist(S.union(set([cur]))) 
        if cur_val - new_val == val:
          S.add(cur)
          cur_val = new_val
          used.add(cur)
          for y in G.G[cur]: used.add(y)
          break
        PQ.update(cur, cur_val - new_val)
      end_time = time.time()
      total_time = end_time - start_time
      avg_dist = cur_val
      #print S
      print total_time, avg_dist
for i in range(G.N):
  mg1 = G.avg_dist(set([i]))
  prev_best = cur_best  
  if cur_best is not None:
    mg2 = G.avg_dist(set([i]).union(set([cur_best])))
  else:
    mg2 = mg1
  flag = 0
  PQ.update((i, mg1, prev_best, mg2, flag), mg1)
  if mg1 < cur_val:
    cur_val = mg1
    cur_best = i 

# update
while len(seed) < budget:
  val, dist = PQ.pop()
  u = val[0]
  mg1 = val[1]
  prev_best = val[2]
  mg2 = val[3]
  flag = val[4]
  if flag == len(seed):
    seed = seed.union(set([u]))
    last_seed = u
    if cur_val != mg1:
      print "ouch",u, len(seed) 
    continue
  elif prev_best == last_seed:
    mg1 = mg2
  else:
    withU = seed | set([u])