从N * N * N到N的双射函数

问题描述 投票:1回答:2

任何人都可以帮我找到一个N * N * N→N的双射数学函数,它取三个参数x,y和z并返回一个数字n?

我想知道函数f及其逆f',如果我有n,我将能够通过应用f'(n)来确定x,y,z。

python function math 3d
2个回答
3
投票

Defining f as a composition of a simpler function g

假设g是从N×N到N的双射,并且令g-1是它的逆。然后我们可以用g来定义f,如下所示。

f(x,y,z)= g(g(x,y),z)= n

f-1(n)=(x,y,z)其中g-1(n)=(w,z)和g-1(w)=(x,y)

Defining g as a bijection from N × N to N

我们现在有一个更简单的定义g的问题。

g(x,y)=(x + y)(x + y + 1)/ 2 + y = n

g-1(n)=(x,y)其中m =⌊(2n)1 /2⌋并且恰好以下两个条件之一成立。

  • x + y = m且y = n-m(m + 1)/ 2
  • x + y = m-1,y = n-m(m-1)/ 2

Python implementation

def f(x, y, z):
    return g(g(x, y), z)

def f_inv(n):
    w, z = g_inv(n)
    x, y = g_inv(w)
    return (x, y, z)

def g(x, y):
    return (x + y) * (x + y + 1) / 2 + y

def g_inv(n):
    m = math.floor(math.sqrt(2 * n))
    while True:
        y = n - m * (m + 1) / 2
        if y >= 0:
            break
        m -= 1
    x = m - y
    return x, y

0
投票
F(x,y,z) = 2^x*3^y*5^z

实际上,您可以选择任何不同的素数集。而逆则只是通过分解为相应的素因子。

© www.soinside.com 2019 - 2024. All rights reserved.