2015-02-19 6 views
0

Может ли кто-нибудь помочь мне найти биективную математическую функцию из N * N * N → N, которая принимает три параметра x, y и z и возвращает число n?Биективная функция от N * N * N до N

Мне хотелось бы знать функцию f и ее обратную f 'так, чтобы, если у меня есть n, я смогу определить x, y, z, применяя f' (n).

+2

ли х, у, г, п реально? целое число? do x, y, z имеют любые границы? – Inspired

+1

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что речь идет о математике не о программировании. Ответ с некоторым добавленным кодом Python не делает это вопросом программирования. –

+0

Они целые, и у них нет никаких границ –

ответ

1

Определение F в виде композиции более простой функции д

Пусть г биекция из N × Н до N, и пусть г -1 его обратный. Тогда мы можем определить f через g следующим образом.

Р (х, у, г) = г (г (х, у), г) = п

е -1 (п) = (х, у, г), где г - 1 (п) = (ш, г) и д -1 (ш) = (х, у)

Определение г как биекции из N × н до N

мы теперь имеем много более простая задача определения g.

г (х, у) = (х + у) (х + у + 1)/2 + у = п

г -1 (п) = (х, у), где т = & lfloor; (2n) 1/2 & rfloor; и выполняется одно из следующих двух условий.

  • х + у = т и у = п - т (м + 1)/2

  • х + у = т - 1 и у = п - т (т - 1)/2 реализация

Python

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

Спасибо Тимофею !!! –

Смежные вопросы