|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programvara
  • Adobe Illustrator
  • animation Software
  • antivirusprogram
  • ljudprogram
  • Säkerhetskopiera data
  • Bränn CD-skivor
  • Bränn DVD
  • Data Compression
  • Database Software
  • Desktop Publishing
  • Desktop Video
  • Digital Video Software
  • Drupal
  • Educational Software
  • Engineering Software
  • Filtillägg Typer
  • Financial Software
  • Freeware , Shareware & Abandonware
  • GIMP
  • Graphics Software
  • Home Recording Software
  • Microsoft Access
  • Microsoft Excel
  • Microsoft Publisher
  • Microsoft Word
  • Open Source Code
  • Andra datorprogram
  • PC-spel
  • Photoshop
  • Portable Document Format
  • PowerPoint
  • presentationsprogram
  • Produktivitet Software
  • quicktime
  • Remote Desktop Management
  • SQL Server
  • Skype
  • Programvara betaversioner
  • Programvara Konsulter
  • Software Development Companies
  • Software Licensing
  • Spreadsheets
  • Skatt förberedelse programvara
  • Utility Software
  • Web Clip Art
  • Windows Media Player
  • Ordbehandlingsprogram
  • Facebook
  • Twitter
  • Instagram
  • LinkedIn
  • TikTok
  • WhatsApp
  • WordPress
  • Chrome
  • Discord
  • Amazon
  • * Dator Kunskap >> Programvara >> Data Compression >> Content

    Vad är tidskomplexiteten för vektorinsatsoperation i datastrukturer och algoritmer?

    Tidskomplexiteten för "insatt" -operationen i en vektor beror på där Du sätter in elementet.

    Här är en uppdelning:

    * Inserting i slutet (med `push_back` eller motsvarande): Detta är i allmänhet o (1) - amorterad konstant tid . "Amortized" betyder att även om vektorn ibland måste omfördela sitt underliggande minne (som tar o (n) tid), för det mesta placerar infogningen helt enkelt elementet i nästa tillgängliga spår. Under många insättningar är den genomsnittliga tiden nära konstant.

    * Inserting i en specifik position (med hjälp av `Insert (iteratorposition, värde)` eller motsvarande): Detta är o (n) - linjär tid . Här är varför:

    1. Hitta positionen: Om iteratorn ges direkt är det vanligtvis o (1) att hitta positionen inom den befintliga vektorn. Men om du måste * söka * efter införingspunkten (t.ex. infoga i en sorterad ordning), kan själva söktiden vara O (n) eller O (log N) beroende på sökalgoritmen som används (linjär sökning respektive binär sökning). Men den skiftande delen dominerar.

    2. skiftande element: För att ge plats för det nya elementet måste alla element * efter * införingspunkten flyttas till höger till höger. I värsta fall (infogning i början) måste du flytta "n" -element. I det genomsnittliga fallet (infogning i mitten) skiftar du ungefär `n/2 'element. I båda fallen bidrar växlingsoperationen o (n) tidskomplexitet.

    Sammanfattningstabell:

    | Insättningsplats | Tidskomplexitet | Förklaring |

    | ---------------------- |

    | Slut (push_back) | O (1) (amorterad) | Vanligtvis konstant tid. Omfördelning kan ibland behövas, men över många insättningar förblir den genomsnittliga tiden nära konstant. |

    | Specifik position | O (n) | Kräver att flytta alla element efter införingspunkten. Skiftningsoperationen dominerar tidskomplexiteten. Obs:Om införingspunkten måste hittas genom att söka inom vektorn, skulle den söktiden läggas till den totala komplexiteten. |

    Viktiga överväganden:

    * omfördelning: När en vektor slutar på kapacitet måste den omfördela ett större minneblock och kopiera alla befintliga element till det nya blocket. Denna omfördelning är O (n). Vektorer fördubblar emellertid ofta sin kapacitet varje gång de omfördelar, vilket gör omfördelningen tillräckligt sällsynt för att kostnaden amorteras över många införingar.

    * vektorimplementering: Specifikationerna för vektorimplementeringar kan påverka prestandan något. Till exempel kan vissa implementeringar använda mer sofistikerade minneshanteringstekniker.

    Exempel (C ++):

    `` `cpp

    #include

    #include

    int main () {

    STD ::Vector myVector ={1, 2, 3, 4, 5};

    // infoga i slutet (amorterad O (1))

    myvector.push_back (6);

    std ::cout <<"Efter push_back:";

    för (int x:myvector) std ::cout < std ::cout <

    // infoga vid en specifik position (o (n))

    MyVector.Insert (MyVector.Begin () + 2, 10); // Infoga 10 vid index 2

    std ::cout <<"Efter insats:";

    för (int x:myvector) std ::cout < std ::cout <

    return 0;

    }

    `` `

    Sammanfattningsvis, tänk på * där * du sätter in i en vektor. `push_back` är din vän om du bara behöver lägga till slutet. Om du behöver infoga i mitten, överväga prestationskonsekvenserna, särskilt om du gör många sådana insättningar. Om ofta medelinsättningar krävs kan alternativa datastrukturer som länkade listor eller balanserade träd vara mer lämpliga.

    Tidigare:

    nästa: No
    relaterade artiklar
    ·GIF Compression Verktyg
    ·Hur att knäcka /hacka Lösenordsskyddade zip-filer
    ·Hur komprimera en FLV -fil i Encore
    ·Hur komprimera musik på en vanlig CD
    ·Hur zip-filer i Windows 2003
    ·Hur till Öppen ZIP-filer som kommer bilder med Windows…
    ·Hur komprimera en fil med LZMA
    ·Hur komprimera en DVD-film till Burn
    ·Hur komprimera en BMP
    ·Hur Packa en zip-fil på en Mac
    Utvalda artiklarna
    ·Hur Ladda ner Norton Antivirus
    ·Hur kan jag lägga in mitt Pin Medan Aktivera Norton Se…
    ·Hur man skapar Solstrålar i GIMP
    ·MS Access 2007 och dess Säkerhet
    ·Hur man skapar ett Flash Magazine
    ·Är Office XP en giltig version av MS Office?
    ·Vad är skillnaden mellan FaceTime och Skype?
    ·Hur man säkerhetskopiera data på en Sony Vaio
    ·Hur du tar en stillbild i Windows Media Player
    ·Vad är två typer av videominne?
    Copyright © Dator Kunskap https://www.dator.xyz