Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Brainstorming: Datei mit definierter Entropie erzeugen (https://www.delphipraxis.net/197723-brainstorming-datei-mit-definierter-entropie-erzeugen.html)

PeterPanino 31. Aug 2018 13:32

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1412116)
Kritik oder Wertungen sind während des Brainstormings nicht erlaubt.

Sag das bitte direkt dem anderen Teinehmer.

Schokohase 31. Aug 2018 13:56

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Bevor ihr euch noch die Köpfe einschlagt, nehmt das hier als Diskussionsgrundlage
Delphi-Quellcode:
unit Unit1;

interface

uses
  System.Generics.Defaults, System.Generics.Collections, System.SysUtils,
  System.Math;

type
  TShannonEntropy = class
  public
    class function Calculate<T > ( const Source: array of T ): Double; overload;
    class function Calculate<T > ( const Source: array of T; const Comparer: IEqualityComparer<T> ): Double; overload;
  end;

implementation

{ TShannonEntropy }

class function TShannonEntropy.Calculate<T>( const Source: array of T; const Comparer: IEqualityComparer<T> ): Double;
var
  d: TDictionary<T, Integer>;
  i: Integer;
  p,r: Double;
begin
  d := TDictionary<T, Integer>.Create( Comparer );
  try
    for i := Low( Source ) to High( Source ) do
    begin
      if d.ContainsKey( Source[i] ) then
        d[Source[i]] := d[Source[i]] + 1
      else
        d.Add(Source[i],1);
    end;
    Result := 0;

    for i in d.Values do
    begin
      p := i / Length( Source );
      r := p * Log2( p );
      Result := Result + r;
    end;

    Result := -Result;

  finally
    FreeAndNil( d );
  end;
end;

class function TShannonEntropy.Calculate<T>( const Source: array of T ): Double;
begin
  Result := Calculate<T > ( Source, TEqualityComparer<T>.Default );
end;

end.
Das liefert dann mit
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Unit1 in 'Unit1.pas';

procedure Test;
var
  str: string;
  e: Double;
begin
  str := 'Grüne'#13#10'SPD'#13#10'FDP'#13#10'CSU'#13#10'CDU';
  e := TShannonEntropy.Calculate<Char > ( str.ToCharArray( ) );
  WriteLn( e );
end;

begin
  try
    Test;
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  ReadLn;
end.
auch die
Code:
 3.49366068968819E+0000
Grundlage dafür ist https://medium.com/udacity/shannon-e...s-5810d35d54b4

PeterPanino 31. Aug 2018 14:09

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
@Schokohase

Faszinierend!! Vielen Dank!!

Schokohase 31. Aug 2018 14:12

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Nun ja, es ist lesen, verstehen, tippen. Faszinierendes kann ich da nicht erkennen.

Wenn man sich noch fragt, wie denn ein Kollege hier mit gleichen Werten einen anderen Wert bekommen hat, der ändert einfach mal eine Zeile ab
Delphi-Quellcode:
  // e := TShannonEntropy.Calculate<Char> ( str.ToCharArray() );
  e := TShannonEntropy.Calculate<Byte> ( TEncoding.UTF8.GetBytes(str) );
und erhält wie durch ein Wunder
Code:
 3.59448250651942E+0000

PeterPanino 31. Aug 2018 14:35

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Ich war gerade fasziniert von dem genialen Video und wie gut das in dem Video erklärt wird und von den anderen Videos in diesem Channel. (Ein Lehrer mit pädagogischem Eifer ist von sowas halt fasziniert).

KodeZwerg 31. Aug 2018 21:18

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Liste der Anhänge anzeigen (Anzahl: 2)
*entfernt um Platz zu sparen*

PeterPanino 31. Aug 2018 22:11

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1412149)
Ich habe ein für PE Dateien Entropy Berechner auch entschärft so das es jede Datei/Größe limitiert auf DWORD berechnet.

Könntest du bitte auf Deutsch schreiben, so dass man versteht, was du meinst? Danke.

Außerdem: Hast du noch immer nicht verstanden, dass das nichts mit PE-Dateien zu tun hat?

KodeZwerg 31. Aug 2018 22:19

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
*entfernt um Platz zu sparen*

PeterPanino 31. Aug 2018 22:37

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1412157)
Die .exe Datei vor meinem Eingriff war limitiert auf Dateien des Typs PE/PE+, darin wiederum limitiert auf bestimmte Sektionen des PE-Headers.

Von was für einer ".exe Datei" schreibst du? Was für einen "Eingriff" meinst du? Kannst du dich in einer anderen Sprache besser ausdrücken? Du kannst mir gerne eine PN schreiben, wenn du mir dein Problem erklären möchtest. Ich weiß, dass Kommunikationsprobleme verschiedene Ursachen haben können. Ich kann gerne versuchen, dir zu helfen.

KodeZwerg 31. Aug 2018 22:47

AW: Brainstorming: Datei mit definierter Entropie erzeugen
 
*entfernt um Platz zu sparen*


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Seite 4 von 5   « Erste     234 5      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz