Randomized Weighted Fair Queuing
Consider the following approach to weighted fair queuing. Each time that the router is ready to send another packet, it randomly picks a packet from amongst the flows with available packets. If the weights are all the same and the packets are all the same size this will give an approximation to FQ. If we "load the dice" so that we pick flow i with probability wi/W where W is the sum of the weights of flows with available packets, we have an approximation to WFQ. But again, this only works if the packets are all the same size.
We still need to adjust for different size packets in the different flows and varying size packets within a single flow. I leave it to you to find a suitable method of doing so.