Efficient way to reduce a vectors magnitude by a specific length?

So if I understand you correctly, you have a vector A, and want another vector which points in the same direction as A, but is shorter by reductionLength, right?

Does the Vector interface have something like a "length" member function (returning the length of the vector)? Then I think the following should be more efficient:

Vector shortenLength(Vector A, float reductionLength) 
{
    Vector B = A;
    B *= (1 - reductionLength/A.length());
    return B;
}

If you're going to scale a vector by multiplying it by a scalar value, you should not normalize. Not for efficiency reasons; because the outcome isn't what you probably want.

Let's say you have a vector that looks like this:

v = (3, 4)

Its magnitude is sqrt(3^2 + 4^2) = 5. So let's normalize it:

n = (0.6, 0.8)

This vector has magnitude 1; it's a unit vector.

So if you "shorten" each one by a factor of 0.5, what do you get?

shortened v = (3, 4) * 0.5 = (1.5, 2.0)

Now let's normalize it by its magnitude sqrt(6.25):

normalized(shortened v) = (1.5/2.5, 2/2.5) = (0.6, 0.8)

If we do the same thing to the unit vector:

shortened(normalized v) = (0.6, 0.8) * 0.5 = (0.3, 0.4)

These are not the same thing at all. Your method does two things, and they aren't commutative.