hotspot 으로 프로파일링 돌린뒤 중간 쓸데없어보이는 코드들 마구마구 삭제. 가장 병목지점은 Anagram.register, ~cpp WordElement
(지금은 input 갯수 n 에 대해 n 번 실행)
나중에 Psyco bind 하고 나서는 4.4 초.
P3 933, 128 RAM Win98 Python2.2 + Psyco 에서 돌림.
~cpp
import os
import time
import psyco
class Formatter:
def __init__(self, anAnagramTable, out=os.sys.stdout):
for key in anAnagramTable.iterkeys():
out.write(' '.join(anAnagramTable[key]) + "\n")
class Anagram:
def __init__(self):
self.anagrams={}
def read(self, anIn=os.sys.stdin):
for word in anIn:
self.register(word.strip())
def getAnagrams(self):
return self.anagrams
def register(self, aWord):
aw=''.join(WordElement(aWord))
if self.anagrams.has_key(aw):
self.anagrams[aw].append(aWord)
else:
self.anagrams[aw]=[aWord]
def WordElement(aWord):
result=list(aWord)
result.sort()
return result
psyco.bind(WordElement)
psyco.bind(Anagram)
psyco.bind(Formatter)
if __name__=="__main__":
start=time.clock()
anagram=Anagram()
anagram.read()
end=time.clock()
Formatter(anagram.getAnagrams())
print "time : ", end-start