miyax0227 / quizScatterer

word2vecとクラスタリングでクイズの出題順を最適化したい
1 stars 0 forks source link

[REFACTOR] 再帰の解消 #4

Open m-uesaka opened 3 months ago

m-uesaka commented 3 months ago

二重再帰が使われている部分をメモ化で書き直す.

Target

scatter_questions

https://github.com/miyax0227/quizScatterer/blob/d3c3258ca68842e8708aefe33f4774c2ed733a7e/quizscatterer/qs.py#L273-L328

メモ化する.

def scatter_questions(
    clustering_result: np.ndarray,
    distance_matrix: np.ndarray,
    number_of_questions: int,
) -> list[int]:
    partial_results: list[list[int]] = [[] for _ in range(0, 2 * number_of_questions - 2) ]
    for index in range(0, number_of_questions):
         partial_results[index] = [index]

    for index in range(0, number_of_questions - 1):
        left_cluster_list = partial_results[int(clustering_result[index, 0])]
        right_cluster_list = partial_results[int(clustering_result[index, 1])]

        # joining two lists

        partial_results[index + number_of_questions] = joined_list
    return partial_results[2 * number_of_questions - 2]

draw_text_dendrogram

https://github.com/miyax0227/quizScatterer/blob/d3c3258ca68842e8708aefe33f4774c2ed733a7e/quizscatterer/qs.py#L221-L269

これもメモ化する?

miyax0227 commented 3 months ago

clustering_resultの特性上先頭から順に処理すれば必ず下位の計算結果は存在するはず、かつ無駄になる途中計算も無いので再帰にする必要がないということですね。 デンドログラムの方もできればお願いします。

m-uesaka commented 3 months ago

@miyax0227 コード見る限り多分それで問題ないと思ってます. デンドログラムの方も承知しました.