Efficient Search for specific Terms in symbolic Expression
The following is slightly faster:
r1 = With[{dd = D[func, c, d, e, f]},
Expand[c d e f Block[{c = 0, d = 0, e = 0, f = 0}, dd]]
]; //AbsoluteTiming
r2 = g[func]; //AbsoluteTiming
r1 === r2
{2.8915, Null}
{3.49264, Null}
True
Here is another faster solution:
prune[X_][expr_] := Select[expr, MemberQ[#, X, \[Infinity]] &]
h[expr_] := Plus@@Cases[Expand@prune[c]@prune[d]@prune[e]@prune[f]@expr, c d e f X_]
r1 = g@func; //Timing
r2 = h@func; //Timing
r1 == r2
{12.0938, Null}
{1.39063, Null}
True
We see a speed up of almost a factor 10.