NC (Nick Class): Olyan algortimusok vannak ebben az oszalyban, amelyek proceszorral idoben futnak.

Tegyuk fel, hogy van egy NC algoritmusunk es ez az algoritmus az -edik lepesben megszamoljuk, hogy hany proceszor dolgozik:
Legyen ahol a lepesek szama. Ezt a valtozot az osszmunkanak hivjuk.
Tehat ha proceszorunk lenne, akkor lepest kene tennie ahoz hogy szimulalja a parhuzamos algoritmust.

Tetel (Brent 1): Ha letezik olyan algoritmus, amely lepesben osszmunkaval szamol, akkor -re van egy olyan algoritmusunk, amely proceszorral szamol es lepest tesz.
biz.: vegyuk az -edik lepest, proceszor lepesben
Igy osszesen ennyi lepesre lesz szuksegunk:

Azt mondjuk, hogy egy feladat jol parhuzamosithato, ha ez teljesul.

https://dl.acm.org/doi/pdf/10.1145/321812.321815 4. Lemma 2.

Bit-muveletek parhuzamos algoritmusokkal


All.: proceszorral lepesben ki lehet szamolni erteket.
biz.:
felfele:
a -edik lepesben a proceszor akkor fog dolgozni, ha
felelos az szamjegyekert.
eredmeny:

  • : biztosan nem megy balra
  • : biztosan megy balra
  • : megy balra, ha jon jobbrol

Ekkor minden proceszor idoben megcsinalja ezt

lefele:
Amikor jovunk lefele, akkor a tudja mar a helyes eredmenyt es mostmar csa ka a -al oszthatok dolgoznak, akkor a tudta mar hogy a tole kezdve -nak mi az eredmenye, tegyuk fel hogy ez volt…

Szorzas: A szorzas gyakorlatilag annak felel meg, hogy darab bites szamot osszeadunk.
Tegyuk fel, hogy van proceszorunk
Az elozo modszerrel maris megy az egesz idoben

Az a celunk, hogy futasideju parhuzamos algoritmust kapjunk.
Elso megoldas: 3-2 osszeadas

#                          sum bits                                                  carry bits
#           ((a xor b) xor c) or  ((a xnor b) xnor c)     (a and b and not c) or (a and not b and c) or (not a and b and c)
a + b + c = ((a  ^ b)   ^  c) | ~(~(a  ^   b)  ^   c)  +     (a & b & ~c)     |      (a & ~b & c)    |     (~a & b & b)

A fenti python code minden bitre lepes es parhuzamosan szamolhato minden bitre. Tehat ha van legalabb processzurnk akkor az atalakitas lepes.

Ezt meg lehet oldani idoben proceszorral.
A proceszor azt csinalja, hogy

Ezzel az eljarassal szam osszeget tudom redukalni szam osszegere.
Mivel jo sok proceszorunk van ezert tudjuk ezt a redukciot csinalni az osszes tagra az osszegben parhuzamosan.
Igy szam osszeget egy lepesben tudjuk szam osszegere redukalni.
Addig redukalunk ameddig csak tudunk es igy a vegso futasi ido a kovetkezo lesz:

Masodik megoldas: negativ szamjegyek
A kovetkezo alakra atalakitok egy szamot:

ahol

Egy binaris szamot ebbe az alakba atvaltani konstans ido, mert csak minden bit part nezzuk.
A visszavaltast nem neztuk meg oran de meg lehet oldani lepesben proceszorral.

Azt allitom, hogy ilyen alakban ket szamot mar ossze lehet adni idoben.

A proceszor osszeadja az es szamjegyeket es igy kapunk egy es kozotti szamot.
TODO

input: formula a kovetkezo alakban:

Def.: Algebrai fa. Absztrakt szintaxis faja az algebrai kifejezesnek.
Def.: Ennek a fanak a merete a nemlevel csucsoknak a szama, azaz a muveleti jelek szama. jel.:

input: algebrai fa
cel: masik fa, ami ugyanazt szamolja es a melysege

Tetel (Brent 2): Letezik ilyen fa. (https://sci-hub.st/10.1109/T-C.1973.223757)
biz.:
1.) Tegyuk fol hogy van egy fank, vegyuk annak egy csucsat es leszarmazottait.
: facsucs, illetve egy uj valtozo
-nek a leszarmazottait kidobjuk es igy kapunk egy fat es helyebe az uj valtozot irjuk.
Eszrevetel:


2.)
All.: Minden faban letezik olyan csucs melyre:


3.) Indukcioval:
Ha OK
todo

Legyen
Az APL nyelvnen:

szorzas


A csucsu grap szomszedasgi matrixa, foatloban -esek.
All.: , ha letezik elu ut

ahol egy elbaszott betu mert valamiert nagyon kell APL nyelvben irni.

All.: legrovidebb elu seta