GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing da.javascript.info — A maximal subarray tilbage til lektionen A maximal subarrayvigtighed: 2 Input er et array af tal, f.eks. Opgaven er: find det sammenhængende delarray af Skriv funktionen For eksempel:
Hvis alle elementer er negative, betyder det, at vi ikke tager nogen (delarrayet er tomt), så summen er nul:
Prøv at tænke på en hurtig løsning: O(n2) eller endda O(n), hvis du kan. Langsom løsningVi kan beregne alle mulige delsummer. Den simpleste måde er at tage hvert element og beregne summen af alle delarrays, der starter fra det.
For eksempel, for
Koden er faktisk en indlejret løkke: den ydre løkke går over array-elementerne, og den indre tæller delsummer, der starter med det aktuelle element.
Løsningen har en tidskompleksitet på O(n2). Med andre ord, hvis vi fordobler størrelsen på arrayet, vil algoritmen tage fire gange så lang tid. For store arrays (1000, 10000 eller flere elementer) kan sådanne algoritmer føre til alvorlig langsommelighed. Hurtig løsningLad os gå igennem arrayet og holde den nuværende delsum af elementer i variablen Hvis beskrivelsen er for vag, så se venligst koden, den er kort nok:
Algoritmen kræver præcis 1 gennemgang af arrayet, så tidskompleksiteten er O(n). Du kan finde mere detaljeret information om algoritmen her: Maximum subarray problem. Hvis det stadig ikke er indlysende, hvorfor det virker, så prøv at følge algoritmen på eksemplerne ovenfor, se hvordan den fungerer, det er ofte bedre end ord. |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |