Priority Queue

プログラミングコンテストチャレンジブック

プログラミングコンテストチャレンジブック

まだ4割ほどしか読んでいないが、勉強させてもらっている。Google Code JamとかはProject Eulerとはかなり文化が違う。読んでいていろいろ違和感がある。このへんについてはそのうち書くかも。
Priority Queueというのが出てきた。名前は知っていたが機能は知らなかった。とにかく大きい(小さい)ものから順に出してくれるキュー。ネーミングが悪いと思う。STLにもある。STLは昔から使っているが、以前はほとんどドキュメントがなくて、ネットのしかも英語の資料を読んで勉強していた(だから「iterator」はいまだに「イテレータ」とは読めない)。ネットで読むとどうしてもつまみ食いになりがちである。本だと最初から通して読んで身につく。
PythonにもPriority Queueは用意されている。

from Queue import PriorityQueue

pq = PriorityQueue()
pq.put(5)
pq.put(1)
print pq.get()  # 1
pq.put(7)
print pq.get()  # 5
print pq.get()  # 7

これを見て思い出したのが、Project Euler 50。Priority Queueあれば比較的に楽に書ける。しかし、この問題はここはクリティカルでないのでスピードはたぶん変わらない。