Примеры редуцирующих функций, которые являются инъективными? - PullRequest
0 голосов
/ 04 февраля 2020

Есть ли источники, чтобы найти общие функции сокращения карт, которые были бы инъекционными? (Есть ли название для таких функций?)

Например, мне нужно отобразить список чисел

lst = [1,2,3,4]

в кортеж (сумма, произведение)

def mapper(lst):
    sum_, prod = 0, 1
    for e in lst:
        sum_ += e
        prod *= e
res = mapper(lst)
# res = tuple(10, 24)

Но это отображение не инъективно, потому что списки:

x = [1,2,3,4]
y = [4,3,2,1]

дают тот же результат.

Меня не особо волнует "сложность" инвертирования этих функций, но было бы полезно использовать разные источники для простых и труднообратимых функций.

Кроме того, было бы неплохо, если бы результат не "взорваться" в радиусе действия. Например, функция:

def mapper(lst):
    res = 1
    for e, prime in zip( lst, prime_number_generator() ):
        res *= prime**e

является уменьшением карты и также инъективной, но результат будет:

res = 2^1 * 3^2 * 5^3 * 7^4 = 2 * 9 * 125 * 2401 = 5402250 # too large number
...