我试图实现强连接图搜索算法,并尝试将带有图形边缘的大文件加载到内存中。
该文件如下:
1 2 //即1到2的有向边缘
1 3
2 3
3 1
...
对于算法的这一部分,我需要反转图形,我希望将每个节点与其他一些对算法很重要的值一起存储在字典中。
此代码适用于较小的文件,但只是停止/挂起我的大文件,即72.7mb,我将不胜感激任何使其适用于大文件的建议:
def begin():
graph = {}
for line in open('/home/edd91/Documents/SCC.txt'):
tempArray = []
for e in line.split():
if e != ' ' and e!='\n':
tempArray.append(int(e))
if tempArray[1] in graph.keys():
graph[tempArray[1]]['g'].append(tempArray[0])
else:
graph[tempArray[1]] = {'g': [tempArray[0],], 's': False, 't': None, 'u': None }
print len(graph)
答案 0 :(得分:1)
如果当然每行都包含一对数字,并且还使用SELECT
question_id
,SUM(CASE WHEN is_correct THEN count ELSE 0 END)
/(CASE WHEN SUM(count) < 1 THEN 1 ELSE SUM(count) END)::NUMERIC
FROM
result
GROUP BY
question_id
:
defaultdict
答案 1 :(得分:0)
没什么可做的,但由于它有点过于复杂,速度会受到影响。 您可以像这样提高程序速度:
def begin():
graph = {}
for line in open('/home/edd91/Documents/SCC.txt'):
# consider only first 2 fields: avoids the loop and the append: that's the best saver
# there must not be 2 spaces between the numbers (in your original program neither so not a problem)
tempArray = line.split()
v1 = tempArray[1] # copy to get rid of array
if v1 in graph: # no need to use .keys()
graph[v1]['g'].append(tempArray[0])
else:
graph[v1] = {'g': [tempArray[0],], 's': False, 't': None, 'u': None }
print len(graph)
您可以先将速度与原始程序与中型文件进行比较。