Transformačná funkcia

kvas

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Transformačná funkcia
« kdy: 24. 01. 2024, 19:36:24 »
Ahojte,

hladam transformacnu funkciu f(x), ktora z objektu (OBJ), ktory ma 4 celociselne kladne atributy (povedzme v intervale <1, 999>), vyrobi jedno cislo ale tak, aby platilo, ze ak je OBJ A mensi ako OBJ B, tak aj vysledok funkcie f(OBJ A) < f(OBJ B). Prvy atribut ma najvyssiu prioritu, posledny najnizsiu,u prvych 3 atributov plati, ze cim mensie cislo, tym mensi vysledok f(OBJ X), ale u toho 4. plati opak, ze cim vacsie cislo, tym f(OBJ X) je mensie.

priklad:
OBJ 1/1/1/20 < OBJ 1/1/1/4 < OBJ 1/1/2/30 < OBJ 1/4/1/1 < OBJ 2/1/1/5 < OBJ 2/1/1/3 atd...

napadlo mi zatial toto: vytvorit textovy retazec a ten potom prekonvertovat na cislo. Aby sa jednotlive atributy neprekryvali, doplnit ich pozicie "dostatocnym" poctom nul, a to posledne cislo odpocitat od "zarovnania", v tomto pripade od cisla 1000.

1 001 001 980 < 1 001 001 996 < 1 001 002 970 atd..

asi by to takto fungovalo, ale je to take kostrbate, preto sa chcem spytat, ci ste niekedy nieco podobne riesili a ak ano, ako.


alex6bbc

  • *****
  • 1 666
    • Zobrazit profil
    • E-mail
Re:Transformačná funkcia
« Odpověď #1 kdy: 24. 01. 2024, 20:28:03 »
Ahojte,

hladam transformacnu funkciu f(x), ktora z objektu (OBJ), ktory ma 4 celociselne kladne atributy (povedzme v intervale <1, 999>), vyrobi jedno cislo ale tak, aby platilo, ze ak je OBJ A mensi ako OBJ B, tak aj vysledok funkcie f(OBJ A) < f(OBJ B). Prvy atribut ma najvyssiu prioritu, posledny najnizsiu,u prvych 3 atributov plati, ze cim mensie cislo, tym mensi vysledok f(OBJ X), ale u toho 4. plati opak, ze cim vacsie cislo, tym f(OBJ X) je mensie.

priklad:
OBJ 1/1/1/20 < OBJ 1/1/1/4 < OBJ 1/1/2/30 < OBJ 1/4/1/1 < OBJ 2/1/1/5 < OBJ 2/1/1/3 atd...

napadlo mi zatial toto: vytvorit textovy retazec a ten potom prekonvertovat na cislo. Aby sa jednotlive atributy neprekryvali, doplnit ich pozicie "dostatocnym" poctom nul, a to posledne cislo odpocitat od "zarovnania", v tomto pripade od cisla 1000.

1 001 001 980 < 1 001 001 996 < 1 001 002 970 atd..

asi by to takto fungovalo, ale je to take kostrbate, preto sa chcem spytat, ci ste niekedy nieco podobne riesili a ak ano, ako.

f(a/b/c/d) = (1000-d) + 1000*(c+1000*(b+1000*a)) = (1000-d) + 1000*c + 1000*1000*b + 1000*1000*1000*a
 
f(1/1/1/20) = 1*10^9 + 1*10^6+1*10^3 + (1000-20)

kvas

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:Transformačná funkcia
« Odpověď #2 kdy: 24. 01. 2024, 21:05:29 »
dakujem, to uz vyzera lepsie.

RDa

  • *****
  • 2 717
    • Zobrazit profil
    • E-mail
Re:Transformačná funkcia
« Odpověď #3 kdy: 24. 01. 2024, 21:44:12 »
V podstate si svuj problem uvedom jako problem datumu - ktery je prevede na vteriny - tj. kazdy sub-division ma nejaky rozsah, a ty dulezitejsi se nasobi jejich poctem: d*86400 + h*3600 + m*60 + s