This is an NP-hard problem. It takes a long time to make sure that you really have the minimum number of tags required.
A fairly quick and easy solution that I would use is
while there are users left in the pool:
find the tag that represents the most users
add that tag to the list
remove all the users that that tag represents from the pool
If you want, you can then loop through and make sure there aren't any
unnecessary tags //but that probably won't help much
There are, of course, several ways in which tags could be tagged so that this is not the best way and does not find the optimal solution. However, I'm sure it should be pretty close.