|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> C /C + + -programmering >> Content

    Hur används memoisering i dynamiska programmeringsalgoritmer?

    Memoisering är en avgörande optimeringsteknik som används i dynamisk programmering för att förbättra effektiviteten avsevärt. Det fungerar genom att lagra resultaten från dyra funktionssamtal och returnera det cachade resultatet när samma ingångar inträffar igen. Detta undviker redundanta beräkningar, vilket leder till en dramatisk hastighet, särskilt för problem med överlappande delproblem.

    Så här används det:

    1. Identifiera överlappande delproblem: Dynamisk programmering löser problem genom att dela upp dem i mindre, överlappande delproblem. Om samma delproblem stöter på flera gånger kan memoisering förhindra omberäkning.

    2. lagringsresultat: En datastruktur, vanligtvis en hashtabell (ordbok i Python) eller en matris, används för att lagra resultaten från delproblem. Inmatningen till delproblemet (t.ex. parametrarna för en rekursiv funktion) fungerar som nyckeln, och det beräknade resultatet är värdet.

    3. Kontrollera för cachade resultat: Innan du beräknar lösningen till ett delproblem kontrollerar algoritmen lagringen för att se om resultatet redan är tillgängligt. Om det är, returneras det cachade resultatet omedelbart.

    4. lagring och återvändande resultat: Om resultatet inte är cachat, beräknar algoritmen den, lagrar den i datastrukturen och returnerar sedan den.

    Exempel (Fibonacci -sekvens):

    En naiv rekursiv lösning för Fibonacci -sekvensen är mycket ineffektiv på grund av upprepade beräkningar. Memoisering förbättrar drastiskt detta:

    naiv (ineffektiv) rekursiv lösning:

    `` `python

    def fibonacci_naive (n):

    Om n <=1:

    returnera n

    Return Fibonacci_naive (N-1) + Fibonacci_naive (N-2)

    `` `

    Memoiserad rekursiv lösning:

    `` `python

    memo ={} # ordbok för memoisering

    def fibonacci_memo (n):

    Om n i memo:

    returnera memo [n]

    Om n <=1:

    resultat =n

    annan:

    resultat =Fibonacci_memo (n-1) + Fibonacci_memo (n-2)

    memo [n] =resultat

    avkastningsresultat

    `` `

    I den memoiserade versionen:

    * `Memo` -butiker tidigare beräknade Fibonacci -nummer.

    * Innan du ringer ett rekursivt samtal kontrollerar `fibonacci_memo` om resultatet för` n 'redan finns i' memo '.

    * Om det är, returneras det lagrade värdet direkt. Annars beräknas resultatet, lagras i "memo" och returneras sedan.

    Denna förändring förvandlar en exponentiell tidsalgoritm till en linjär tidsalgoritm. Nyckeln är att undvika redundanta beräkningar av samma Fibonacci -nummer flera gånger.

    i huvudsak: Memoisering förvandlar en top-down (rekursiv) dynamisk programmeringsmetod till en mer effektiv genom genom att cacha mellanliggande resultat. Den kompletterar tabell (bottom-up) metoder, som också undviker redundanta beräkningar men använder iterativa metoder istället för rekursion. Valet mellan memoisering och tabulering beror ofta på det specifika problemet och programmerarens preferens; Båda uppnår samma mål att undvika redundanta beräkningar.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur man lär sig C med Xcode
    ·Hur man skapar en Om Else uttalande i C
    ·Varför kan inte Xcode Se min iPhone
    ·Hur man läser SQL från Visual C
    ·Hur man lär sig C # Steg -för - steg
    ·C Funktion Retur Typer
    ·Hur Code Matrix Subtraktion i C + +
    ·Hur man gör ett program med Microsoft Visual C
    ·Hur man kompilerar C i Ubuntu
    ·Hur man skriver en C-programmet Läsa en parentes
    Utvalda artiklarna
    ·Hur man tar bort dubbletter från en sekvens i Python
    ·Siffror lagras och överförs i en dator i?
    ·Hur att färga EXT Form
    ·Fördelar & Nackdelar med Typeless programmeringsspråk…
    ·Hur kan du definiera och manipulera en strängskalar på…
    ·Hur man gör en villkorlig uppgift i PHP
    ·Hur man kan begränsa en textruta till endast siffror i…
    ·Hur man gör Spike Borstar I GtkRadiant
    ·Vad är Transaktionella Fixtures
    ·Hur initiera Ingångsparametrar i förfarandena
    Copyright © Dator Kunskap https://www.dator.xyz