Hiho,
erstmal vorweg: Es geht mir nicht darum, wie man mein Problem in welcher Sprache auch immer realisiert, sondern um die theoretische Lösung des Problems:
Ich habe eine Datenbank (f: |N -> |N) in der zu einigen (n Stück) Schlüsseln bestimmte Werte gespeichert sind. Natürlich existieren nicht alle möglichen Schlüssel.
Daraus will ich eine Datenbank (g: |N -> |N) folgender Art erzeugen:
sofern ein Schlüssel in f existiert, soll mir der Aufruf von g den gleichen Wert wie der Aufruf von f geben. Zudem kann ich an g nicht erkennen, welche Schlüssel in f existieren, dh. jeder Schlüssel gibt mir irgendeinen Wert zurück.
Mir ist natürlich klar, daß eine Triviallösung des Problems wäre, zu allen möglichen Schlüsseln irgendwas abzuspeichern, aber das wäre zu speicheraufwendig.
Die Gedanken, die ich mir bislang gemacht hab:
Irgendein Polynom n+1sten Grades nehmen, was an meinen Werten ein korrektes Ergebnis liefert. Das Problem dabei ist es die Koeffizienten zu bestimmen, ohne zu verraten, wie meine Schlüssel aussehen.
Fällt da irgenwem was besseres ein? Oder ne Idee, wie man die Koeffizienten geschickt bestimmen könnte?
edit pq: sieben Schlüßel entfernt und durch Schlüssel ersetzt =)\n\n
<!--EDIT|pq|1091792334-->
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}