Task Performanceを考えた話。

1 min read読了の目安(約1500字

背景

どうも茄子です。今回は期待通りの出力ができていれば良いと思っていた私が、タスクパフォーマンスの向上とは何かがCodilityを通して少し分かったので紹介したいと思います。
言語:Python 問題:maxcounters

実践

問題をあまり詳細に説明するのはよくないと思うので、結果から理解してもらえると助かります。まずは普通に問題を解きました。

def solution(N, A):
    List = [0]*N
    for i in A:
        if i > N:
            num = max(List)
            List = [num]*N
        else:
            List[i-1] += 1
    return List

思ったよりも簡単だなぁ〜

正確さは100%だが、処理のやり方が悪いせいで全体のパフォーマンスは40%に。これはif i > N:の時にListの中身の全ての要素をmax()関数で調べているからだと考えました。なので、、、

def solution(N, A):
    List = [0]*N
    num = 0
    for i in A:
        if i > N:
            List = [num]*N
        else:
            List[i-1] += 1
            num = max(List[i-1],num)
    return List

こうするといけているのでは!?

ぬぬ、惜しい。だがこれ以上はわからない。ネットの民よ俺に教えてくれ〜

def solution(N, A):
    List = [0]*N
    num = 0
    maxTF = False
    for i in A:
        if i <= N:
            List[i-1] += 1
            num = max(List[i-1],num)
            maxTF = False
        elif maxTF == False:
             List = [num]*N
             maxTF = True
    return List


なるほど過ぎる。問題が分かって今ければ説明は難しいのですが、[num]*Nの処置をしても値が変わらないので処理をやらないようにしている。

感想

プログラミングに対してコストパフォーマンスを向上させるということが少し理解することができました。書き方はいくつもあるが、処理の最適化という面ではもっとロジカルに考えなければいけないみたいだ。このようなスキルは情報化が進み、多くのデータが飛び交う現状で必要なことだと思う。よし、勉強しよ。