rearranging as in theorems and we obtain (mnr (mb nb logr mb ( this timelet (mnrc(mnr mthen (mnrd(mb nb logrn ( which implies (mnrn log* this yields (mnr log* needless to saywe could continue this ad infinitim thus with bit of mathwe get progression of boundsc(mnr logr (mnr log* (mnr log** (mnr log*** (mnr log**** each of these bounds would seem to be better than the previous sinceafter allthe more the slower log** grows howeverthis ignores the fact that while log**** is smaller than log***rthe term is not smaller than the term thus what we would like to do is to optimize the number of that are used define (mnto represent the optimal number of that will be used specificallyi times ***(log <( /na(mnmin > log thenthe running time of the union/find algorithm can be bounded by (ma(mn)theorem any sequence of unions and finds with path compression makes at most times ( ) log ***(log nparent changes during the finds proof this follows from the above discussion and the fact that <log theorem any sequence of unions and finds with path compression makes at most ma(mn parent changes during the finds proof in theorem choose to be (mn)thuswe obtain bound of ( + ) + ( / )or ma(mn