📚 Math in Society
⇩ Download ▾

4.2 Hamilton’s Method

Alexander Hamilton proposed the method that now bears his name. His method was approved by Congress in 1791, but was vetoed by President Washington. It was later adopted in 1852 and used through 1911. He begins by determining, to several decimal places, how many things each group should get. Since he was interested in the question of Congressional representation, we’ll use the language of states and representatives, so he determines how many representatives each state should get. He follows these steps:

Note on rounding: Today we have technological advantages that Hamilton (and the others) couldn’t even have imagined. Take advantage of them, and keep several decimal places.

Hamilton’s method obeys something called the Quota Rule. The Quota Rule isn’t a law of any sort, but just an idea that some people, including Hamilton, think is a good one.

Controversy

After seeing Hamilton’s method, many people find that it makes sense, it’s not that difficult to use (or, at least, the difficulty comes from the numbers that are involved and the amount of computation that’s needed, not from the method), and they wonder why anyone would want another method. The problem is that Hamilton’s method is subject to several paradoxes. Three of them happened, on separate occasions, when Hamilton’s method was used to apportion the United States House of Representatives.

The Alabama Paradox is named for an incident that happened during the apportionment that took place after the 1880 census. (A similar incident happened ten years earlier involving the state of Rhode Island, but the paradox is named after Alabama.) The post-1880 apportionment had been completed, using Hamilton’s method and the new population numbers from the census. Then it was decided that because of the country’s growing population, the House of Representatives should be made larger. That meant that the apportionment would need to be done again, still using Hamilton’s method and the same 1880 census numbers, but with more representatives. The assumption was that some states would gain another representative and others would stay with the same number they already had (since there weren’t enough new representatives being added to give one more to every state). The paradox is that Alabama ended up losing a representative in the process, even though no populations were changed and the total number of representatives increased.

# Math in Society 4.2 -- The Alabama Paradox, found by brute force
# Nobody moves, nobody is born, nobody dies. Only the size of the house changes.
def hamilton(pops, seats):
    divisor = sum(pops.values()) / seats
    quota = {k: v / divisor for k, v in pops.items()}
    seats_for = {k: int(q) for k, q in quota.items()}
    leftover = seats - sum(seats_for.values())
    for k in sorted(pops, key=lambda k: (-(quota[k] - seats_for[k]), k))[:leftover]:
        seats_for[k] += 1
    return seats_for

pops = {"A": 6000, "B": 6000, "C": 2000}      # EDIT: any population table
LOW, HIGH = 6, 26                              # EDIT: range of house sizes to sweep

names = list(pops)
W = max(7, max(len(k) for k in names) + 2)
print("populations: " + ", ".join(f"{k} {v:,}" for k, v in pops.items())
      + f"   (total {sum(pops.values()):,})\n")
print("  house" + "".join(f"{k:>{W}}" for k in names))
paradoxes = 0
previous = None
for seats in range(LOW, HIGH + 1):
    now = hamilton(pops, seats)
    note = ""
    if previous is not None:
        lost = [k for k in names if now[k] < previous[k]]
        if lost:
            paradoxes += 1
            note = "   <-- " + ", ".join(lost) + " LOSES a seat as the house GROWS"
    print(f"{seats:>7}" + "".join(f"{now[k]:>{W}}" for k in names) + note)
    previous = now

print(f"\n{paradoxes} Alabama paradox(es) in house sizes {LOW}-{HIGH}.")
print("Adding a seat gives every quota a slightly bigger fractional part, but not")
print("by the same amount: a big state's remainder can climb past a small state's")
print("and steal the leftover seat the small state was holding.")
print("\nTry it: use the tutoring numbers from the exercises,")
print("   pops = {'Math': 330, 'English': 265, 'Chemistry': 130, 'Biology': 70}")
print("with LOW, HIGH = 10, 45. Biology loses a tutor when the college hires its")
print("40th -- with not one student changing subject.")
print("\n(Note: this is plain Hamilton. The rule that every group gets at least one")
print("seat is not enforced here, so a group whose quota is below 1 can show a 0.)")

The New States Paradox happened when Oklahoma became a state in 1907. Oklahoma had enough population to quality for five representatives in Congress, so they raised the total number of representatives by five.  When the apportionment was recalculated, unsurprisingly Oklahoma received five representatives.  However, despite their populations not changing, Maine gained a representative and New York lost one. 

The Population Paradox happened between the apportionments after the census of 1900 and of 1910. In those ten years, Virginia’s population grew at an average annual rate of 1.07%, while Maine’s grew at an average annual rate of 0.67%. Virginia started with more people, grew at a faster rate, grew by more people, and ended up with more people than Maine. By itself, that doesn’t mean that Virginia should gain representatives or Maine shouldn’t, because there are lots of other states involved. But Virginia ended up losing a representative to Maine.

Adapted from Math in Society by David Lippman, hosted on LibreTexts (math.libretexts.org) and licensed under CC BY-SA 3.0. Changes were made. License: CC-BY-SA-3.0.

These eBooks are a prerelease and are not yet certified conformant with WCAG 2.1 AA or ADA Title II. Every page is built against an automated accessibility gate, and the published editions will meet ADA Title II requirements when they release in late September 2026. If something is unusable, please tell us.