<< KnotTheory`

TubePlot[TorusKnot[5,4]]

TorusKnot[5,4] // PD

SetAttributes[P, Orderless];
KB0[pd_]:=Expand[
Expand[Times@@pd/.X[a_,b_,c_,d_]:>A P[a,d] P[b,c]+1/A P[a,b] P[c,d]]//.
{P[a_,b_]P[b_,c_]:>P[a,c],P[a_,b_]^2:>P[a,a],P[a_,a_]->-A^2-1/A^2}
]

TorusKnot[5,4] // PD // KB0 // Timing

SetAttributes[P, Orderless];
KB1[pd_PD]:=KB1[pd,{},1];
KB1[pd_PD,inside_,web_]:=Module[
{pos=First[Ordering[Length[Complement[List@@#,inside]]&/@pd]]},
pd[[pos]]/.X[a_,b_,c_,d_]:>KB1[
Delete[pd,pos],
Union[inside,{a,b,c,d}],
Expand[
web*(A P[a,d] P[b,c]+1/A P[a,b] P[c,d])]//.
{P[e_,f_]P[f_,g_]:>P[e,g],P[e_,_]^2:>P[e,e],P[e_,e_]->-A^2-1/A^2}
]
];
KB1[PD[],_,web_]:=Expand[web]

TorusKnot[5,4] // PD // KB1 // Timing