由买买提看人间百态

topics

全部话题 - 话题: dupid
(共0页)
w****i
发帖数: 964
1
来自主题: Programming版 - 这问题有没有好办法做?
Try this,
group, hash = [], {}
for seq in seqlist:
....n = len(group)
....g = [hash.get(id, n) for id in seq]
....groupid = min(g)
....if groupid == n:
........group.append([])
....else:
........for dupid in list(set(g)):
............if dupid > groupid and dupid < n:
................for x in group[dupid]: hash[x] = groupid
................group[groupid] += group[dupid]
....for i in xrange(len(seq)):
........hash[seq[i]] = groupid
........if g[i] == n: group[groupid].append(seq[i])
it doesn't gi
s***e
发帖数: 122
2
来自主题: Programming版 - 这问题有没有好办法做?
仔细看了一下你的方法,发现我的思路完全就是copy你的。。呵呵
我只对你的代码改了一点:第二遍扫描可以不用,因为第一遍扫描进去的时候实际上保
持了顺序的。(我查了一下你的list(set(g))好像会排序,为了保险我又sort了一下。) 所以只需要在合并group[groupid]和group[dupid]之后,把group[dupid]
清空就可以了。输出的时候只需要忽略空group就可以了。
感叹一下这类代码用python写起来真是简单清晰。
seqlist = [['abstract', 'b'],['c','d'],['d','e','f','b'], ['h','i']]
group, hash = [], {}
for seq in seqlist:
....n = len(group)
....g = [hash.get(id, n) for id in seq]
....groupid = min(g)
....if groupid == n:
........group.append([])
....else:
........g_sorted = list(set(
w***g
发帖数: 5958
3
来自主题: Programming版 - 这问题有没有好办法做?
排序不是个问题. 因为所有的单词按出现顺序是有序的, 如果按出现顺序存下来的话是
不需要再排序的.
我觉得O(NlogN)是没法避免的. 因为不管怎么样新来一个单词后要在已有单词中查找.

。) 所以只需要在合并group[groupid]和group[dupid]之后,把group[dupid]
(共0页)