Кнутова нотација

Извор: testwiki
Пређи на навигацију Пређи на претрагу

У математици, Кнутова нотација је нотација за записивање врло великих целих бројева. Увео ју је Доналд Кнут 1976. године. Идеја је заснована на поновљеном степеновању на сличан начин на који је степеновање поновљено множење, а множење је поновљено сабирање.

Увод

Множење природним бројем се може дефинисати као поновљено сабирање:

ab=a+a++ab primeraka a

а степеновање природним степеном b се може дефинисати као поновљено множење:

ab=ab=a×a××ab primeraka a

што је инспирисало Кнута да дефинише оператор 'двоструке стрелице' за поновљено степеновање:

ab=aa...a=aaab primeraka ab primeraka a

Овде и надаље израчунавање се спроводи здесна улево (као таква, операција је десно асоцијативна):

Према овој дефиницији,

32=33=27
33=333=327=7625597484987
34=3333=37625597484987 (у разложеном облику, овај број би попунио неколико повећих хард дискова[1])
35=33333=337625597484987
итд.

Ово већ води до прилично великих бројева, али Кнут је проширио своју нотацију. Дефинисао је оператор 'троструке стрелице' за поновљену примену оператора 'двоструке стрелице':

ab=aaab primeraka a

даље имамо оператор 'четири стрелице':

ab=aaab primeraka a

и тако даље. Опште правило је да се оператор n стрелица разлаже у серију оператора n1 стрелица. Симболички,

a  b=a  a  a  a  a  n   n1 n1   n1     b primeraka a

Примери:

32=33=333=327=7.625.597.484.987

33=333=3(333)=333333 primeraka 3=3337.625.597.484.987 primeraka 3

Нотација

У изразима као што је ab, нотација за степеновање обично подразумева да се експонент b записује изнад са десне стране од базног броја a. Међутим, многа окружења – као што су програмски језици – не подржавају такав дводимензиони запис. Због тога је усвојена линеарна нотација ab за оваква окружења; стрелица нагоре представља 'дизање на степен'. Ако у скупу карактера не постоји стрелица нагоре, користи се симбол ^.

Нотација са записивањем експонента изнад броја који се диже на степен, ab није погодна за генерализацију, што објашњава зашто је Кнут изабрао да ради са стрелицом нагоре, ab.

У контексту програмског језика -{C}-, карактер ^ означава ексклузивно или -{XOR}-. ** је уобичајена алтернатива за па је у овом контексту могуће користити два симбола за понављање оператора. Могуће је узети да је *** еквивалентно са , али ова употреба није уобичајена.

Генерализације

Неки бројеви су толико велики да чак и запис са вишеструким стрелицама нагоре постаје прегломазан: тада је од користи оператор n-стрелица n (као и за описе са променљивим бројем стрелица), или еквивалентно, хипер оператори.

Неки бројеви су толико велики да ни оваква нотација није довољна. Пример за ово је Грејемов број. У овим случајевима се може користити Конвејева ланчана нотација: ланац од три елемента је еквивалентан осталим нотацијама, али ланац од четири елемента је још већи.

anb=hyper(a,n+2,b)=abn(Knut)(Konvej)

Обично се Кнутова нотација користи за бројеве релативно мање магнитуде, а ланчане стрелице или хипер оператори за веће бројеве.

Дефиниција

Кнутова нотација се формално дефинише на следећи начин

anb={ab,ako n=1;1,ako b=0;an1(an(b1)),u suprotnom

за све целе бројеве a,b,n и b0,n1.

Сви оператори стрелице нагоре (укључујући класично степеновање, ab) су десно асоцијативни, то јест, израчунавање се спроводи здесна улево уколико израз садржи два или више таквих оператора. На пример, abc=a(bc), не (ab)c; на пример
33=333 је 3(33)=327=7625597484987 а не (33)3=273=19683.

Постоји добар разлог зашто је изабран овакав редослед израчунавања. Да је коришћено израчунавање слева удесно, тада би ab било једнако a(a(b1)), па суштински не би било нова операција. Десна асоцијативност је такође природна јер можемо да препишемо поновљени са стрелицама anna који се понавља у развоју an+1b као annan1, па је свако a леви операнд оператора стрелице. Ово је значајно јер оператори стрелице нису комутативни.

Таблица вредности

Рачунање 2mn се може записати у бесконачној таблици. Записујемо бројеве 2 n у првој врсти, и пунимо десну колону вредностима 2. Како би се одредила нека вредност у таблици, узима се број одмах лево од ње, а затим се тражи број у претходној врсти на позицији означеној овим бројем.

Вредности 2mn = хипер-{(2, m + 2, n)}- = -{2 → n → m}-
-{m}-\-{n}- 1 2 3 4 5 6 7 формула
0 2 4 6 8 10 12 14 2n
1 2 4 8 16 32 64 128 2n
2 2 4 16 65536 2655362,0×1019.729 2265536106,0×1019.728 2226553610106,0×1019.728 2n
3 2 4 65536 22...265536 primeraka 2(10)65531(6,0×1019.728)       2n
4 2 4 22...265536 primeraka 2         2n

Напомена: (10)k означава функционални степен функције f(n)=10n (функција се такође означава суфиксом -плекс, као код гуголплекс).

Таблица је иста као код Акерманове функције, осим замене m и n, и додатка 3 свим вредностима.

Рачунање 3mn

Ставимо бројеве 3 n у горњу врсту, и попунимо леву колону тројкама. Како би одредили неку вредност у табели, узмемо број одмах лево до њега, и потражимо број у претходној врсти, на позицији коју означава број који смо узели.

Вредности 3mn = хипер-{(3, m + 2, n) = 3 → n → m}-
-{m}-\-{n}- 1 2 3 4 5 формула
0 3 6 9 12 15 3n
1 3 9 27 81 243 3n
2 3 27 7.625.597.484.987 37.625.597.484.987   3n
3 3 7.625.597.484.987 33...37.625.597.484.987 primeraka 3     3n
4 3 33...37.625.597.484.987 primeraka 3       3n

Рачунање 10mn

Попунимо прву врсту бројевима 10 n, а прву колону десеткама. Како би одредили неку вредност у табели узимамо број одмах лево до ове позиције, и потражимо број у претходној врсти, на позицији коју означава број који смо узели.

Вредности 10mn = хипер-{(10, m + 2, n) = 10 → n → m}-
-{m}-\-{n}- 1 2 3 4 5 формула
0 10 20 30 40 50 10n
1 10 100 1.000 10.000 100.000 10n
2 10 10.000.000.000 1010.000.000.000 101010.000.000.000   10n
3 10 1010...1010 primeraka 10       10n
4 10         10n

Види још

Референце

Шаблон:Reflist

Спољашње везе

Шаблон:Доналд Кнут навигацијска кутија

Шаблон:Нормативна контрола

  1. То јест 7.625.597.484.987×log3log2 битова, или око 1,4 -{TB}-