Questo è chiaramente impossibile. Se hai N numeri, non c'è modo di trovare una funzione che li farà avere tutti a valori distinti nell'intervallo [0, n) a meno che tu non sappia quali saranno questi numeri in anticipo. Altrimenti, data tale funzione (con N <2^32, ovviamente), ci sarà almeno una coppia di numeri interi in modo tale che entrambi quegli numeri interi hanno lo stesso valore, in modo che la funzione non sia perfetta se quei numeri interi si abbiano entrambi nell'input.
Se rilassi le condizioni per consentire la creazione della funzione al volo, questo diventa possibile, ma solo in modo davvero banale e inutile. Vale a dire, una funzione hash potrebbe costruirsi mentre va registrando ogni numero che viene alimentato in esso e generando un nuovo output unico per ognuno (diciamo, contando da 0). Ma una tale funzione avrebbe bisogno di una tabella hash (o qualcosa di equivalente) come parte della sua implementazione, quindi non sarebbe certo inutile implementazione Un tavolo hash!