I once implemented an algorithm that went the entire different direction, because I wanted to shuffle across my entire collection. This is back in the era of the filesystem being the main driver, so I had my files arranged in [Very Broad Genre]/[Artist]/[Album], and what my algorithm did was that when it came time to pick, it picked something out of the current album with ~80% probability, kept the artist but switched album with like ~10%, and switched the genre entirely with ~10%. It also excluded the last N songs played, with that number generally larger than the number of songs in one album, so if it shuffled its way through one album it would be forced to jump up at least one level. The last few albums were also kept in the block list, so if it left one album it wouldn't go back to it for a while. (Genres I didn't worry about so much.)
The idea is that it was random, but that it tended to keep the same mood, and once it did switch, it would tend to stay in that mood for a while. (I suppose I would have also made it sticky once it did switch genres, but I didn't get to use it for long enough to matter.) This also trivially gives you three "No, not this, go to next" buttons, one for the album level, one for the artist level, and one to switch out the genre entirely.
Unfortunately, I have not had time to pour over the mp3 players around to see who has pluggable shuffle algorithms exposed conveniently enough to make this work, and unfortunately it's a lot of work to tag MP3s enough to make this work since those "genre" tags are generally pretty bad, so I haven't had this in a while and I've gotten used to just manually curating my genre mood shifts.
I don't like any of the cloud service shufflers I've used, though. They are concerned about aspects of the song I'm not and oblivious to the ones I do care about and the net effect is about like listening to a radio station, where I end disliking every third song or so no matter how I tune it. Fortunately, I've been building my personal MP3 collection for over 20 years so I'm not even remotely dependent on them.