Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Ta bort dubletter - Komplexitet - Gåta?

Postades av 2006-04-28 10:49:34 - Niklas Jansson, i forum Skrivklåda, Tråden har 5 Kommentarer och lästs av 970 personer

Sitter och håller på med en grej där jag ska ta bort lite dubletter (och tripletter, etc.) ur en osorterad vektor. Den första ska behållas, alla andra ska bort.

Kollade lite på vad någon annan skrivit för gammal kod, och eftersom det är relativt lite data, körde jag på samma ide; "för alla element1, kolla alla element2, om element2=element1 och element1 inte är element2, ta bort element2".
Alltså en O(n^2)-algoritm.

Jag kom dock på att det finns (åtminstone) en O(nlogn)-algoritm som funkar, tyvärr lite tråkig. Någon som kan komma på eller vet om det finns någon O(nlogn)-algoritm för ändamålet?


Svara

Sv: Ta bort dubletter - Komplexitet - Gåta?

Postades av 2006-04-28 16:08:05 - Ola Lindfeldt

Jag är inte så vass på matematik men programmeringsmässigt hade jag väl löst detta genom att sortera vektorn och sedan flytta över till vektor2 när värdet förändras i vektor1 så att bara unika värden kopieras. Det blir ju rätt snabbt då bara ett genomlöp krävs. Det är väl det du var ute efter? :)


Svara

Sv:Ta bort dubletter - Komplexitet - Gåta?

Postades av 2006-04-28 16:44:28 - Sven Åke Persson

<b>Någon som kan komma på eller vet om det finns någon O(nlogn)-algoritm för ändamålet?</b>
Kan du förklar på bönders språk hur detta funkar ungefär.

Jag lade upp ett program för några år sedan i Vb som löser det
men du vill förmodligen ha något vassare

Programarkivet:Ta Bort Dubbletter


Svara

Sv:Ta bort dubletter - Komplexitet - Gåta?

Postades av 2006-04-28 19:57:46 - Per Persson

Använder man quicksort i Olas förslag får man komplexiteten O(n log n) + O(n) = O(n log n).


Svara

Sv: Ta bort dubletter - Komplexitet - Gåta?

Postades av 2006-04-28 22:06:42 - Martin Adrian

Du berättade inte om du vill att ordningen skall vara oförändrad.

Med en bra hashfunktion borde dock O(N) vara möjligt.


Svara

Sv:Ta bort dubletter - Komplexitet - Gåta?

Postades av 2006-04-28 22:27:15 - Niklas Jansson

<b>>Jag är inte så vass på matematik men programmeringsmässigt hade jag väl löst detta genom att sortera vektorn och sedan flytta över till vektor2 när värdet förändras i vektor1 så att bara unika värden kopieras. Det blir ju rätt snabbt då bara ett genomlöp krävs. Det är väl det du var ute efter? :) </b>
Det är i stort sett så jag gjorde det.

<b>>Använder man quicksort i Olas förslag får man komplexiteten O(n log n) + O(n) = O(n log n).</b>
Exakt det jag gjorde. Fast quicksort är väl bara nlogn i average case tror jag... ?
Skit samma, det finns nlogn-sök-algoritmer, och då får man det. Tänkte om någon kände till någon annan metod

<b>>Du berättade inte om du vill att ordningen skall vara oförändrad. </b>
Det avsåg jag. Men det spelar ingen större roll. Det är bara att sortera tillbaka på ursprunglig ordning, komplexiteten ändras inte.

<b>>Med en bra hashfunktion borde dock O(N) vara möjligt. </b>
Tro fan det!
Eller snarare O(max(N,M)) där M är hashtabellens storlek?


<b>>Kan du förklar på bönders språk hur detta funkar ungefär.</b>
Låt säga att du sorterar en vektor med n element med en vanlig variant av bubblesort; då gör du något i stil med (i C-style):
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
Gör val på i och j, swappa.

eller i VB-style:

for i=0 to n
for j=0 to n
Gör val på i och j, swappa.
next j
next i

För varje förändring i "i" gör du n förändringar i "j". totalt n*n steg, eller O(n^2).
Skulle du ha en algoritm som funkar som en original bubbelsort hade du fått

for(int i=0; i<n; i++)
for(int j=i; j<n; j++)
Gör val på i och j, swappa.

resp

for i=0 to n
for j=i to n
Gör val på i och j, swappa.
next j
next i

Du får du inte längre n steg på varje utan n steg för i=0, n-1 för i=1, osv. Totalt blir det väl något i stil med n^2/2; lite mindre än n^2 i alla fall. Vi kallar ändå det för O(n^2). Det är så att säga "inte väsentligt bättre".

Det finns exakta matematiska definitioner för det. O-notationen beskriver hur (t.ex.) en algoritm beter sig vid stora problem; hur mycket värre lösningen blir när vi gör problemet lite värre.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 170
27 953
271 705
835
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies