Jeg prøver at forstå disse klassifikationer og hvorfor de findes. Er min forståelse rigtig? Hvis ikke, hvad?

  1. P er polynomial kompleksitet eller O(nk) for noget ikke-negativt reelt tal k, såsom O(1), O(n1/2), O(n2), O(n3) osv. Hvis et problem hører til P, findes der mindst en algoritme, der kan løse det fra bunden i polynomisk tid. For eksempel kan jeg altid finde ud af, om noget heltal n er prime ved at løkke over 2 <= k <= sqrt(n) og kontrollere ved hvert trin, om k deler n.

  2. NP er ikke-deterministisk polynomisk kompleksitet. Jeg ved ikke rigtig, hvad det betyder for det at være ikke-deterministisk. Jeg tror, det betyder, at det er let at bekræfte på polynomisk tid, men måske eller måske ikke polynomisk tid at løse fra bunden, hvis vi ikke allerede kendte svar. Da det muligvis kan løses i polynomisk tid, er alle P-problemer også NP-problemer. Heltalsfaktorisering bliver citeret som et eksempel på NP, men jeg forstår ikke, hvorfor det ikke er P, personligt, da forsøgsfaktorisering tager O(sqrt(n)) tid.

  3. NP-komplet Jeg forstår slet ikke, men det rejsende sælgerproblem citeres som et eksempel på dette. Men efter min mening kan TSP-problemet måske bare være NP, fordi det tager noget som O(2n n2) time to solve, but O(n) at kontrollere, om du får stien foran.

  4. NP-Hard antager jeg, at den bare er fuld af ukendte. Svært at bekræfte, svært at løse.

Kommentarer

  • Har du læst spørgsmålet om CS. SE Hvad er definitionen af P, NP, NP-komplet og NP-hård? ?
  • Jeg har ikke ‘ Jeg har ikke set dette link endnu, nej. Jeg ‘ Jeg læser det igennem, tak
  • Det CS.SE-svar er ret imponerende , men jeg synes, det er ‘ muligt at give en meget kortfattet og ikke-vildledende forklaring på, hvad disse udtryk betyder uden at gå i detaljer så meget. @Nakano ville være interesseret i en kortere , ” til punktet svarer eller løser det CS.SE-indlæg dit problem?
  • @MichaelT Jeg læste igennem dette link og fandt det virkelig ordentligt og ikke særlig klart på flere punkter. Jeg har lyst til, at det bare gav mig flere spørgsmål end svar.
  • ” ikke-deterministisk ” kan fortolkes som ” givet et valg, vælger computeren det rigtige valg hver gang “.

Svar

Du er dybest set korrekt om P og NP, men ikke om NP-hård og NP-komplet.

For det første er her de superknappe definitioner af de fire pågældende kompleksitetsklasser:

  • P er klassen af beslutningsproblemer, der kan løses i polynomet med en deterministisk Turing-maskine.

  • NP er klassen af beslutningsproblemer, der kan løses på polynomisk tid af en ikke-deterministisk Turing-maskine. Tilsvarende er det klassen af problemer, der kan verificeres i polynomisk tid af en deterministisk Turing-maskine.

  • NP-hård er den klasse af beslutningsproblemer, som alle problemer i NP kan være reduceret til i polynomisk tid af en deterministisk Turing-maskine.

  • NP-komplet er krydset mellem NP-hård og NP. Tilsvarende er NP-komplet den klasse af beslutningsproblemer i NP, som alle andre problemer i NP kan reduceres til i polynomisk tid af en deterministisk Turing-maskine.

Og her “sa Euler-diagram fra Wikipedia , der viser forholdet mellem disse fire klasser (forudsat at P ikke er lig med NP):

indtast billedebeskrivelse her

Den del, som jeg antager, at du er mest ukendt med eller forvirret af er forestillingen om en “polynomisk tidsreduktion” fra problem X til problem Y. En reduktion fra X til Y er simpelthen en algoritme A, der løser X ved hjælp af en anden algoritme B, der løser problem Y. Denne reduktion kaldes en ” polynomisk tidsreduktion “hvis alle andre dele af A end B har en polynomisk tidskompleksitet. Som et trivielt eksempel er problemet med at finde det mindste element i en array konstant tid reducerbart til sorteringsproblemet, da du kan sortere arrayet og derefter returnere det første element i det sorterede array.

En ting, der er let at gå glip af ved NP-hård definition, er at reduktionen går fra NP-problemer til NP-hårde problemer men ikke nødvendigvis omvendt Dette betyder, at NP-hårde problemer måske er i NP, eller i en meget højere kompleksitetsklasse (som du kan se på Euler-diagrammet), eller de er måske ikke engang problemer, der kan afgøres.Derfor siger folk ofte noget som “NP-hårdt betyder mindst lige så hårdt som NP”, når de prøver at forklare disse ting uformelt.

Stopproblemet er et godt eksempel på et NP-hårdt problem, som “er tydeligvis ikke i NP, som Wikipedia forklarer :

Det er let at bevis for, at det stoppende problem er NP-hårdt, men ikke NP-komplet. For eksempel kan det boolske tilfredshedsproblem reduceres til det stoppende problem ved at omdanne det til beskrivelsen af en Turing-maskine, der prøver alle sandhedsværditildelinger, og når den finder en, der opfylder formlen, stopper den, og ellers går den i en uendelig løkke. Det er også let at se, at standsningsproblemet ikke er i NP, da alle problemer i NP kan afgøres i et begrænset antal operationer, mens stopproblemet generelt ikke kan træffes.

Kommentarer

  • @Nakano Intuitivt ‘ sa ” reduktion ” i den forstand, at ét problem gøres til et underproblem af et andet problem. Det faktum, at nogle af disse reduktioner øger kompleksiteten i stedet for at mindske den gennem dårligt valg af ” underproblem ” betyder simpelthen, at du aldrig vil bruge disse reduktioner i enhver rigtig verdens kode. Skønt jeg er ærlig NP-hård, virker det som en underlig og ikke frygtelig interessant klasse; det kan være mere frugtbart at ignorere det og bare tænke på NP-komplet som det sæt NP-problemer, som alle andre NP-problemer reducerer til.
  • @Nakano stackoverflow.com/questions/12637582/… Jeg tror, det korte svar er, at når folk taler om, at heltal faktorisering er NP, ‘ taler normalt om virkelig store heltal, som du generelt begynder at lave dine store-O-proofs med n som ” antallet af bits, som heltalet optager i hukommelsen ” i stedet for ” antallet af heltal, du har sendt til funktionen “.
  • @Nakano: I stor-O-notation er n et mål for størrelsen på input (antal elementer, bytes, cifre osv.), Ikke værdien af input.
  • @Nakano Det korte svar er, at du ‘ er okay, og det er derfor, når du laver tid co mplexity analaysis du skal altid angive, hvad n betyder . Påstanden om, at n er ” størrelsen på input ” er kun et kort resume af, hvordan vi normalt vælger at definere n. Det ‘ er ikke en del af de strenge definitioner af big-O-notation eller tidskompleksitet. Jeg tror, du har ret i at sige, at heltal faktorisering er O (sqrt (n)), når n er værdien af inputet. Det sker bare så, at kompleksitetsresultater, hvor n betyder størrelse, normalt er meget mere nyttige i praksis end dem, hvor n betyder værdi.
  • @Nakano Det ‘ Det er også værd at huske på, at teknisk , at du også skal definere tidskompleksiteten af dine primitive operationer (tilføjelse, multitplikation, læsning fra hukommelse, skrivning til hukommelse, sammenligning af to tal). Det meste af tiden antager vi enten, at alle disse primitiver er konstante, eller vi tæller kun en slags operation (f.eks. For sorteringsalgoritmer tæller vi traditionelt sammenligningerne). Jeg formoder, at resultaterne for heltal faktorisering ikke ‘ antager, at alle disse operationer er konstant tid, som vi normalt gør, ellers ville størrelsen på nummeret ikke ‘ t betyder meget.

Svar

Heltalsfaktorisering citeres som et eksempel på NP, men jeg forstår ikke, hvorfor det ikke er P, personligt, da forsøgsfaktorisering tager O (sqrt (n)) tid.

Med henblik på kompleksitetsklasser er n længden af input. Så hvis du vil faktorere heltal k, er n ikke k men log k, antallet af bits (eller hvad som helst) det tager at nedskrive nummeret. Så heltal faktorisering er O(sqrt(k)) som du siger, men dette er O(sqrt(2n)) som er O(2(n/2)).

NP-Hard antager jeg, at den bare er fuld af ukendte. Svært at kontrollere, svært at løse.

Nej. NP-Hard handler kun om, hvor svært et problem er at løse.

NP-Hard-problemer er i det mindste hårde som det sværeste problem i NP. Vi ved, at de i det mindste er så hårde, for hvis vi havde en polynomial tidsalgoritme til et NP-hårdt problem, kunne vi tilpasse denne algoritme til ethvert problem i NP.

NP-komplet Jeg forstår slet ikke

NP- Komplet betyder, at et problem er både NP og NP-hårdt. Det betyder, at vi hurtigt kan verificere en løsning (NP), men det er mindst lige så hårdt som det sværeste problem i NP (NP-hårdt).

Jeg ved ikke rigtig, hvad det betyder for det at være ikke-deterministisk.

Ikke -bestemmelse er en alternativ definition af NP. En ikke-deterministisk turingmaskine er effektivt i stand til at duplikere sig selv til enhver tid og få hver duplikat til at tage en anden eksekveringssti. Under denne definition er NP det sæt af de problemer, der kan løses på polynomisk tid af en computer end frit kan duplikere sig selv. Det viser sig, at dette er nøjagtigt det samme sæt problemer, der kan verificeres på polynomisk tid.

Kommentarer

  • Så det er muligt for $ O ( n ^ k) $ tidsalgoritmer til at være NP-problemer?
  • k er et konstant reelt tal? Ja. Alle P-problemer er også NP-problemer. Naturligvis kan alt, hvad du kan løse på polynomisk tid, også verificeres på polynomisk tid.
  • Hvordan defineres længde / størrelse faktisk her? For eksempel kunne jeg bare skrive $ n $ i en stor base og formindske længden, når den er skrevet. Hvad med problemer, der ‘ ikke eksplicit beskæftiger sig med heltal, men siger grafer med $ V $ hjørner og $ E $ kanter osv.
  • @Nakano, faktisk en stor base ville ‘ ikke ændre det, fordi det kun ville være en konstant faktorforskel. Så det ville ‘ ikke påvirke polynom versus ikke-polynom. Men hvis du skrev nummeret i unary, ville det ændre det.
  • @Nakano, hmm … Jeg ville ikke ‘ ikke tør prøve at forklare kompleksiteten klasser til en fem år gammel. : P

Svar

Den første ting at forstå er, at P og NP klassificer sprog , ikke problemer . For at forstå hvad dette betyder, har vi brug for nogle andre definitioner først.

Et alfabet er et ikke-tomt begrænset sæt af symboler.

{0 , 1} er et alfabet ligesom ASCII-tegnsættet. {} er ikke et alfabet, fordi det er tomt. N (heltalene) er ikke et alfabet, fordi det ikke er endeligt.

Lad Σ være et alfabet. En ordnet sammenkædning af et endeligt antal symboler fra Σ kaldes et ord over Σ .

Strengen 101 er et ord over alfabetet {0, 1}. Det tomme ord (ofte skrevet som ε ) er et ord over ethvert alfabet. Strengen penguin er et ord over alfabetet, der indeholder ASCII-tegnene. Decimaltegningen af tallet π er ikke et ord over alfabetet {., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} fordi det ikke er endeligt.

længde af et ord w , skrevet som | w |, er antallet af symboler i den.

For eksempel | hello | = 5 og | ε | = 0. For ethvert ord w , | w | ∈ N og derfor endelig.

Lad Σ være et alfabet. Sættet Σ indeholder alle ord over Σ , inklusive ε . Sættet Σ + indeholder alle ord over Σ , undtagen ε . For n N , Σ n er sættet med ord med længden n .

For hvert alfabet Σ , Σ og Σ + er uendelige tællesæt .For ASCII-tegnsættet Σ ASCII er de regulære udtryk .* og .+ betegner Σ ASCII og Σ ASCII +

{0, 1} 7 er sættet med 7-bit ASCII-koder {0000000, 0000001,…, 1111111}. {0, 1} 32 er sættet med 32 bit heltalværdier.

Lad Σ være et alfabet og L &subseteq; Σ . L kaldes et sprog over Σ .

For et alfabet Σ , tomt sæt og Σ er trivielle sprog over Σ . Førstnævnte kaldes ofte det tomme sprog . Det tomme sprog {} og det sprog, der kun indeholder det tomme ord { ε } er forskellige.

Delsættet af {0, 1} 32 der svarer til ikke-NaN IEEE 754 flydende punktværdier er et endeligt sprog.

Sprog kan have et uendeligt antal ord, men hvert sprog kan tælles. Sættet med strenge {1, 2,…}, der betegner heltalene i decimalnotation, er et uendeligt sprog over alfabetet = “e934c0f1bf”>

,1,2,3,4,5,6,7,8,9}. Det uendelige sæt strenge {2,3,5,7,11,13,…} der angiver primtalene i decimalnotation er en korrekt delmængde deraf. Sproget, der indeholder alle ord, der matcher det regulære udtryk[+-]?\d+\.\d*([eE][+-]?\d+)?, er et sprog over ASCII-tegnsættet (angiver et undersæt af de gyldige flydende punktudtryk som defineret af C-programmeringssproget). / p>

Der er intet sprog, der indeholder alle reelle tal (i en hvilken som helst notation), fordi sættet med reelle tal ikke kan tælles.

Lad Σ være et alfabet og L &subseteq; Σ . En maskine D beslutter L hvis for hver input w &in; Σ den beregner karakteristisk funktion χ L ( w ) på endelig tid. Den karakteristiske funktion er defineret som

χL: Σ → {0, 1} w ↦ 1, wL 0, otherwise.

En sådan maskine kaldes en beslutningstager for L . Vi skriver “ D ( w ) = x ” for “givet w , D output x ”.

Der er mange maskinemodeller. Den mest generelle, der er praktisk anvendt i dag, er modellen til en Turing-maskine . En Turing-maskine har ubegrænset lineær lagring grupperet i celler. Hver celle kan indeholde nøjagtigt et symbol på et alfabet til enhver tid. Turing-maskinen udfører sin beregning som en sekvens af beregningstrin. I hvert trin kan den læse en celle, muligvis overskrive dens værdi og flytte læse / skrivehovedet med en position til venstre eller højre celle. Hvilken handling maskinen udfører styres af en endelig tilstandsautomat.

En maskine med tilfældig adgang med et endeligt sæt instruktioner og ubegrænset lagerplads er en anden maskinemodel, der er lige så kraftig som Turing-maskinmodellen.

Af hensyn til denne diskussion skal vi ikke genere os med den nøjagtige maskinemodel, vi bruger, men snarere nok til at sige, at maskinen har en endelig deterministisk kontrolenhed, ubegrænset lagerplads og udfører en beregning som en sekvens af trin der kan tælles.

Da du har brugt det i dit spørgsmål, antager jeg at du allerede er fortrolig med “big-O” notation så her er kun en hurtig opdatering.

Lad f : N → være en funktion.Sættet O ( f ) indeholder alle funktioner g : N N for hvilke der findes konstanter n 0 N og c N således at for hver n N med n > n 0 det er sandt, at g ( n ) ≤ c f ( n ).

Nu er vi parat til at nærme os det virkelige spørgsmål.

Klassen P indeholder alle sprog L som der findes en Turing-maskine D der bestemmer L og en konstant k N sådan at for hver input w , D stopper efter højst T (| w |) trin for en funktion T O ( n n k ).

Siden O ( n n i Selvom det er matematisk korrekt, er det ubelejligt at skrive og læse, de fleste mennesker – for at være ærlige, alle undtagen mig selv – skriver normalt simpelthen O(nk ).

Bemærk, at båndet afhænger af længden af w . Derfor er det argument, du fremfører for primersproget, kun korrekt for tal i unaray-kodninger , hvor for kodningen w af et tal n , længden af kodningen | w | er proportional med n . Ingen ville nogensinde bruge en sådan kodning i praksis. Ved hjælp af en mere avanceret algoritme end blot at prøve alle mulige faktorer kan det dog vises, at sproget for primtal forbliver i P , hvis input er kodet i binær (eller til en hvilken som helst anden base). (På trods af massiv interesse kunne dette kun bevises af Manindra Agrawal, Neeraj Kayal og Nitin Saxena i et prisvindende papir i 2004, så du kan gætte på, at algoritme er ikke særlig enkel.)

De trivielle sprog {} og Σ og det ikke-trivielle sprog { ε } findes naturligvis i P (for ethvert alfabet Σ ). Kan du skrive funktioner på dit yndlingsprogrammeringssprog, der tager en streng som input og returnerer en boolsk, der fortæller, om strengen er et ord fra sproget for hver af disse og beviser, at din funktion har polynomisk kørselstidskompleksitet?

Hvert almindeligt sprog (et sprog beskrevet med et regulært udtryk) er i P .

Lad Σ være et alfabet og L &subseteq; Σ . En maskine V der tager en kodet tuple med to ord w , c Σ og output 0 eller 1 efter et endeligt antal trin er en verifier til L hvis den har følgende egenskaber.

  • Givet ( w , c ), V udgange kun 1 hvis w L .
  • For hver w L er der findes en c Σ sådan at V ( w , c ) = 1.

c i ovenstående definition kaldes et vidne (eller certifikat ) .

En verifikator har tilladelse til at give falske negativer for det forkerte vidne, selvom w faktisk er i L . Det er dog ikke tilladt at give falske positive. Det kræves også, at der for hvert ord på sproget findes mindst et vidne.

For sproget COMPOSITE, der indeholder decimalkodning af alle heltal, der er ikke primære , et vidne kunne være en faktorisering. For eksempel er (659, 709) et vidne for 467231 ∈ COMPOSITE. Du kan let kontrollere, at det på et ark papir er uden vidnet, at bevise, at 467231 ikke er prime, ville være vanskeligt uden at bruge en computer.

Vi sagde ikke noget om, hvordan et passende vidne kan være fundet. Dette er den ikke-deterministiske del.

Klassen NP indeholder alle sprog L som der findes en Turing-maskine V der verificerer L og en konstant k N sådan at for hver input ( w , c ), V stopper efter højst T (| w |) trin til en funktion T O ( n nk ).

Bemærk, at ovenstående definition indebærer, at der for hver w L findes et vidne c med | c | ≤ T (| w |). (Turing-maskinen kan umuligt se på flere vidnesymboler.)

NP er et supersæt af P (hvorfor?). Det vides ikke, om der findes sprog, der findes i NP men ikke i P .

Heltalsfaktorisering er ikke et sprog i sig selv. Vi kan dog konstruere et sprog, der repræsenterer beslutningsproblemet , der er knyttet til det. Det vil sige et sprog, der indeholder alle tupler ( n , m ), således at n har en faktor d med d &leq; m . Lad os kalde dette sprog FAKTOR. Hvis du har en algoritme til at bestemme FACTOR, kan den bruges til at beregne en fuld faktorisering med kun polynomial overhead ved at udføre en rekursiv binær søgning efter hver primfaktor.

Det er let at vise, at FACTOR er i NP . Et passende vidne ville simpelthen være selve faktoren d , og alt, hvad verifikatoren skulle gøre, er at kontrollere, at d &leq; m og n mod d = 0. Alt dette kan gøres på polynomisk tid. (Husk igen, at det er længden af kodningen , der tæller, og at det er logaritmisk i n .)

Hvis du kan vise, at FACTOR også er i P , kan du være sikker på at få mange seje priser. (Og du har brudt en betydelig del af nutidens kryptografi.)

For hvert sprog i NP er der en brute-force algoritme, der beslutter det deterministisk. Det udfører simpelthen en udtømmende søgning på alle vidner. (Bemærk, at et vidnes maksimale længde er afgrænset af et polynom.) Så din algoritme til at beslutte PRIMES var faktisk en brutal kraftalgoritme til at beslutte KOMPOSIT.

For at imødekomme dit sidste spørgsmål er vi nødt til at introducere reduktion . Reduktioner er et meget stærkt begreb teoretisk datalogi. At reducere et problem til et andet betyder grundlæggende at løse et problem ved at løse et andet problem.

Lad Σ være et alfabet og A og B være sprog over Σ . A er polynomisk tid mange-en reducerbar til B hvis der findes en funktion f : Σ Σ med følgende egenskaber.

  • w A   ⇔   f ( w ) ∈ B   for alle w Σ .
  • Funktionen f kan beregnes af en Turing-maskine for hver input w i et antal trin afgrænset af et polynom i | w |.

I dette tilfælde skriver vi A p B .

For lad f.eks. A være det sprog, der indeholder alle grafer (kodet som nærhedsmatrix), der indeholder en trekant. (En trekant er en cyklus med længde 3.) Lad yderligere B være det sprog, der indeholder alle matricer med ikke-nul spor. (Sporet af en matrix er summen af dens vigtigste diagonale elementer.) Derefter er A polynomisk tid mange-en reducerbar til B . For at bevise dette er vi nødt til at finde en passende transformationsfunktion f . I dette tilfælde kan vi indstille f til at beregne 3 rd styrken af adjacency matrixen. Dette kræver to matrixmatrixprodukter, som hver har polynomskompleksitet.

Det er trivielt sandt, at L p L . (Kan du bevise det formelt?)

Vi anvender dette på NP nu.

Et sprog L er NP -hard hvis og kun hvis L “≤ p L for hvert sprog L ” ∈ NP .

Et NP -hårdt sprog kan eller ikke være i NP i sig selv.

Et sprog L er NP -komplet hvis og kun hvis

  • L NP og
  • L er NP -hard.

Det mest berømte NP -komplette sprog er SAT. Den indeholder alle boolske formler, der kan opfyldes. For eksempel ( a b ) ∧ (¬ a ∨ ¬ b ) ∈ SAT. Et gyldigt vidne er { a = 1, b = 0}. Formlen ( a b ) ∧ (¬ a b ) ∧ ¬ b ∉ SAT. (Hvordan ville du bevise det?)

Det er ikke svært at vise, at SAT ∈ NP . At vise SAT NP -hardheden er noget arbejde, men det blev udført i 1971 af Stephen Cook .

Når det ene NP -komplette sprog var kendt, var det relativt enkelt at vise andre sprogs NP -komplethed via reduktion. Hvis sprog A vides at være NP -hårdt, så viser at A p B viser, at B også er NP -hård (via transitiviteten af “≤ p ”). I 1972 Richard Karp offentliggjorde en liste med 21 sprog, som han kunne vise var NP -komplet via (transitiv) reduktion af SAT. (Dette er det eneste papir i dette svar, som jeg faktisk anbefaler, at du skal læse. I modsætning til de andre er det ikke svært at forstå og giver en meget god idé om, hvordan bevisning af NP -komplethed via reduktion fungerer. )

Endelig et kort resume. Vi bruger symbolerne NPH og NPC til at betegne klasser af NP -hard og NP -komplette sprog hhv.

  • P &subseteq; NP
  • NPC &subset; NP og NPC &subset; NPH faktisk NPC = NP NPH pr. definition
  • ( A NP ) ∧ ( B NPH )   ⇒   A p B

Bemærk, at inkluderingen NPC &subset; NP er korrekt, selv i tilfælde af at P = NP . For at se dette skal du gøre dig klar over, at intet ikke-trivielt sprog kan reduceres til et trivielt sprog, og der er også trivielle sprog i P som ikke-trivielle sprog i NP . Thi s er dog en (ikke særlig interessant) hjørnesag.

Addendum

Din primære kilde til forvirring ser ud til at være, at du tænkte på “ n ”i“ O ( n f ( n )) ”Som fortolkning af en algoritmes input, når det faktisk refererer til længden af input. Dette er en vigtig skelnen, fordi det betyder, at den asymptotiske kompleksitet af en algoritme afhænger af kodningen , der bruges til input.

Denne uge er en ny rekord for den største kendte id = “5aec42341e”> Mersenne prime blev opnået. Det største i øjeblikket kendte primtal er 2 74   207   281 – 1. Dette tal er så stort at det giver mig hovedpine, så jeg bruger en mindre i følgende eksempel: 2 31 – 1 = 2   147   483   647. Det kan kodes på forskellige måder.

  • af sin Mersenne-eksponent som decimalnummer: 31 (2 byte)
  • som decimaltal: 2147483647 (10 bytes)
  • som unary nummer: 11111…11 hvor skal erstattes af 2   147   483   640 mere 1 s (næsten 2 GiB)

Alle disse strenge koder det samme nummer og givet en af disse kan vi nemt konstruere enhver anden kodning af det samme nummer. (Du kan erstatte decimalkodning med binær, oktal eller hexadeci mal hvis du vil. Det ændrer kun længden med en konstant faktor.)

Den naive algoritme til test af primalitet er kun polynomisk for unary kodninger. AKS primality test er polynom for decimal (eller enhver anden base b ≥ 2 ). Lucas-Lehmer primality test er den bedst kendte algoritme for Mersenne primtal M p med p en ulige prime, men den er stadig eksponentiel i længden af den binære kodning af Mersenne-eksponenten p (polynom i p ).

Hvis vi vil tale om kompleksiteten af en algoritme, er det meget vigtigt, at vi er meget klare, hvilken repræsentation vi bruger. Generelt kan man antage, at den mest effektive kodning bruges. Det vil sige binært for heltal. (Bemærk, at ikke hvert primtal er en Mersenne-prime, så brug af Mersenne-eksponenten er ikke en generel kodningsplan.)

I teoretisk kryptografi sendes mange algoritmer formelt en helt ubrugelig streng på k 1 er som den første parameter. Algoritmen ser aldrig på denne parameter, men den tillader, at den formelt er polynom i k , som er sikkerhedsparameter bruges til at indstille procedurens sikkerhed.

For nogle problemer, hvor beslutningssproget i binær kodning er NP -komplet, er beslutningssproget ikke længere NP -komplet, hvis kodningen af indlejrede numre skiftes til unary. Beslutningssprogene for andre problemer forbliver NP -komplette selv da. Sidstnævnte kaldes stærkt NP -komplet . Det mest kendte eksempel er binpakning .

Det er også (og måske mere) interessant at se, hvordan kompleksiteten af en algoritme ændres, hvis input er komprimeret . For eksempel på Mersenne-primtal har vi set tre kodninger, som hver er logaritmisk mere komprimeret end sin forgænger.

I 1983 Hana Galperin og Avi Wigderson har skrevet et interessant papir om kompleksiteten af almindelige grafalgoritmer, når inputkodningen af grafen komprimeres logaritmisk. For disse input bliver sproget for grafer, der indeholder en trekant ovenfra (hvor det tydeligt var i P ) pludselig NP -komplet.

Og det “fordi sprogklasser som P og NP er defineret for sprog , ikke for problemer .

Kommentarer

  • Dette svar er sandsynligvis ikke nyttigt for niveauet af forståelse for spørgeren. Læs de andre svar og se, hvad Nanako kæmper med. Tror du dette svar vil hjælpe ham / hende?
  • Dette svar hjælper måske ikke OP, men hjælper bestemt andre læsere (mig selv inkluderet).
  • meget nyttigt svar! bør overveje at rette matematiske symboler ikke korrekt vises.

Svar

Jeg vil forsøge at give dig mindre uformel definition for det samme.

P-problemer: problemer, der kan løses i polynomisk tid. Indeholder problemer, der kan løses effektivt.

NP-problem: problemer, der kan verificeres i polyno mial tid. For eksempel: Rejsende sælger, kredsløbsdesign. NP-problemer er som puslespil (som sudoku). Hvis vi får en korrekt løsning på problemet, kan vi kontrollere vores løsning meget hurtigt, men hvis vi faktisk prøver at løse det, kan det bare tage for evigt.

Nu spørger P vs NP faktisk, om et problem, hvis løsning hurtigt kan være kontrolleret for at være korrekt, er der altid en hurtig måde at løse det på. Således skriver man matematisk: er NP en delmængde af P eller ej?

Kommer nu tilbage til NP komplet: disse er de virkelig hårde problemer med NP-problemerne. Derfor, hvis der er en hurtigere måde at løse NP komplet på, bliver NP komplet P og NP problemer kollapser i P.

NP hårdt: problemer, der ikke engang kan kontrolleres i polynomtiden, er np hårde. For eksempel er det en af dem at vælge det bedste træk inden for skak.

Hvis noget forbliver uklart, så prøv at se denne video: https://www.youtube.com/watch?v=YX40hbAHx3s

Jeg håber, dette vil give en sløret kontur.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *