Avatar
Taketo Sano 2/5/2020 3:41 AM
なるほど,計算の範囲がそもそも違う!?
3:47 AM
あ,いや,あってるはずです. この計算は AlexanderDegree ごとに分割することができて,僕の計算ではグラフが大きくなりすぎないように AlexanderDegree 0〜3 を分けて計算しています.CPP の方は一個のグラフにまとめて突っ込んで計算していますね(連結成分が4つあるはず) MaslovDegree の範囲も,CPP の方は MM = 13〜25 の範囲で計算がされてますが,僕のプログラムでも alex = 0 で k = -7〜5 の範囲で計算をしていて,index のつけ方が違うだけで同じ計算をしているはずです.
3:48 AM
(もともと僕の計算も一個のグラフに突っ込んでいたのですが,それだと dictionary が大きくなりすぎて遅いのかな?と思って alex ごとに分けた,という経緯があります)
3:49 AM
MaslovDegree が表における横軸,AlexanderDegree が縦軸に対応してます.AlexanderDegree ごとに分割できるという事実は,表を横に分割して行ごとに計算できるということに対応しています.
3:55 AM
HFKCalculator.run() を次のように書き換えると,CPP のと同様に Alex ごとの分割がなくなるはずです: public func run() { let d = GridComplex( type: .tilde, diagram: gridDiagram, generators: generators ).differential let H = self.graph(generators: generators, differential: d) .vertices .map { x in [x.MaslovDegree, x.AlexanderDegree] } .countMultiplicities() .map{ (deg, n) in (deg[0], deg[1], n)} print(H) } (edited)