I have no doubt that seating can seem non-random - or maybe more accurately - poorly randomized.
I'm pretty sure I've addressed this before somewhere in the forums, so if I'm probably repeating myself. Nevertheless...
I will not venture to discuss the merits of the random number generator within Windows/Windows Script/Internet Explorer. Whichever one the TD ultimately uses, I believe it to be sound, although of course without studying it I cannot be certain of its strength (or weakness), and that involves time and, frankly, skills that I don't possess. In previous discussions of this, I have searched [the web] for mention of any issues in the RNG, and have not found any. While this obviously cannot does not guarantee the RNG is sound, the lack of discussion of problems with it implies it is OK. This may be a false assumption, but for our purposes, it is an assumption we must make (because if something IS wrong with it - well, we're stuck with it anyway).
This means that the TD code must somehow have this affinity. It must utilize the RNG in such a way as to tend to seat players with the same last name at the same table.
When you tell the TD to do the initial seating, it goes down a unique code path. It recognizes that you are seating ALL the players for the first time in the tournament. This is basically a special case, and it does this strictly for speed. The general "table balancing" algorithm will seat any unseated players, so it will work in the case of all players being unseated, but it goes through a lot of "balancing" code. As the number of players in the tournament increases, so does the algorithm's time (it's probably O(n^2), or similar, which isn't good, but whatever). Therefore, there's a "shortcut" path for initial seating, which does it very quickly.
This is actually a good thing, because it means the path we're going down is MUCH simpler. The gist of this part is: get the set of tables that best fits the number of players we have. Then run through each seat at each table (table 1, seat 1, table 2, seat 1, table 3, seat 1; table 1 seat 2, table 2 seat 2, table 3 seat 3, etc). For every seat, pick a player at random from the list of players and seat them at this table/seat. Continue until all players have been seated. This is an easy way to randomly seat everyone and ensure that the tables are filled and balanced without any additional work. As you can see, it's quite a leap to think there is some kind of bias injected into this process.
Some things to note:
- Humans don't think too randomly. The more something looks random, the less it usually is. And vice versa. Additionally, our brains are wired to recognize patterns. Just because we see a pattern doesn't mean it isn't random.
- If you insist on seating players more than once (seating them, unseating them, seating them again), in a way you're actually *decreasing* the randomness, because you are insisting that the random seating align itself to a pattern that you've predetermined.
If you do insist on seating multiple times to avoid (or reduce) players with the same last names sitting at the same table, I would suggest coming up with a clear, known rule beforehand. Like "continue randomly seating players until no more than 2 players with the same last name are seated at the same table". This would help to prevent players from thinking you may have a personal bias, and are continuing to randomly seat players until that personal bias is satisfied.