Avatar billede lanstorp Nybegynder
09. september 2002 - 22:48 Der er 6 kommentarer og
1 løsning

Find max frekvens af et array of double

Kender nogen en hurtig funktion, til at finde det tal i et array of double, der optræder med den største hyppighed (= den statistiske term Mode) i arrayet.
Eks.: talrækken: 3,6,8,9,6,2 her er mode = 6, da den værdi optræder flest gange.
Avatar billede lanstorp Nybegynder
09. september 2002 - 22:50 #1
Hvis sidste nyt fra eksperten bliver opdateret en gang om dagen, må snowman da have en stor kasse fyldt med mp3 afspillere.
Avatar billede hermandsen Juniormester
09. september 2002 - 23:19 #2
>>lanstorp
Hehe... Er du også træt af den besked? Du skal bare læse den en gang og så sætte Eksperten til automatisk at logge dig ind. Hvis du så skifter IP, så får du den igen, men så er det bare at åbne den igen! :)

Omkring dit problem, så har jeg ikke så mange andre løsninger end at loope hele array'et i gennem og så finde det sådan...

Hvis der er en der har en hurtigere løsning, så lytter jeg gerne med! :)
Avatar billede cms Nybegynder
10. september 2002 - 07:12 #3
Er dit array sorteret?
Avatar billede lanstorp Nybegynder
10. september 2002 - 07:54 #4
>>cms, nope, men så skal det vel hældes igennem en TStringList, men kan det finde det mest hyppige tal.
Avatar billede lanstorp Nybegynder
10. september 2002 - 07:58 #5
Har faktisk en funktion, der finde Medianen, hvor arrayet er sorteret, den kan måske udvides til også at returnere Mode-værdien:

function MedianDouble(const dZ : array of Double) : Double;
  function CompareDouble(Double1, Double2 : Pointer) : Integer;
  var
    D1, D2 : Double;
  begin
    D1 := Double(Double1^);
    D2 := Double(Double2^);

    if D1 < D2 then
      Result := -1
    else if D1 > D2 then
      Result := 1
    else
      Result := 0;
  end;
var
  iNumPoints : Integer;
  Numbers : TList;
  i : Integer;
  dTemp1, dTemp2 : Double;
begin
  iNumPoints := High(dZ) + 1;

  Numbers := TList.Create;
  try
    for i := 0 to iNumPoints - 1 do
      Numbers.Add(@dZ[i]);

    Numbers.Sort(@CompareDouble);

    if Odd(iNumPoints) then
      Result := Double(Numbers[iNumPoints div 2]^)
    else begin
      dTemp1 := Double(Numbers[(iNumPoints div 2)-1]^);
      dTemp2 := Double(Numbers[(iNumPoints div 2)]^);
      Result := (dTemp1 + dTemp2) / 2;
    end;
  finally
    Numbers.Free;
  end;
end;
Avatar billede cms Nybegynder
10. september 2002 - 16:14 #6
Hvad er medianen?
Avatar billede lanstorp Nybegynder
10. september 2002 - 16:46 #7
En median er det miderste tal i en sorteret talrække. Er antallet af tal lige er det gennemsnittet af de to miderste tal. Medianen er ved nogle tal fordelingerne mere relevant end gennemsnittet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester