AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Brainstorming: Datei mit definierter Entropie erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Brainstorming: Datei mit definierter Entropie erzeugen

Ein Thema von PeterPanino · begonnen am 30. Aug 2018 · letzter Beitrag vom 1. Sep 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 12:36
... mit Deiner auf PE Dateien basierte Entropy Berechnung ...
Nochmals: Das ist keine "PE Dateien basierte Entropy Berechnung", da es gleichgültig ist, ob es eine PE-Datei ist oder nicht. Hast du meinen vorherigen Link durchgelesen und verstanden?
Wie ermittelst du denn die Entropie?
Es geht um "Shannon's Formula", die MiTeC auf meine Anregung hin in TPEReader integriert hat.

Zur Ermittlung zweckentfremde ich die Klasse TPEReader von MiTeC:

Delphi-Quellcode:
uses
  MiTeC_PE;

var
  PE: TPEReader;

procedure TForm3.FormCreate(Sender: TObject);
begin
  PE := TPEReader.Create;
  try
    PE.FileName := 'R:\test.txt';
    CodeSite.Send('TForm3.FormCreate: ', PE.Entropy.ToString);
  finally
    PE.Free;
  end;
end;
Das hat bestimmt nichts mit PE Dateien zu tun wenn man den Link verfolgt aber irgendwie schon. Du hast mit allem Recht, mehr kann ich dazu nicht Sagen, hab noch einen Schönen Tag.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 12:55
... Das hat bestimmt nichts mit PE Dateien zu tun ...
Wie kann man nur so hartnäckig sein. Mein Beispiel-Code berechnet doch nicht direkt den Entropiewert, sondern verwendet nur eine Klasse, welche eine Funktion enthält, die diesen Entropiewert berechnet (weil ich die Source aus Copyright-Gründen nicht weitergeben kann). Also kannst du aus meinem Code gar nicht schließen, ob die Entropie-Berechnung selbst "PE-basiert" ist oder nicht. Also ist deine Behauptung bez. "PE-basierter" Entropie-Berechnung eine Erfindung von dir. Diesen Unterschied verstehst du schon, oder? Ich wünsche auch einen schönen Tag.

Geändert von PeterPanino (31. Aug 2018 um 13:01 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.605 Beiträge
 
Delphi 7 Professional
 
#3

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 13:21
Zitat von PeterPanino:
Brainstorming: Datei mit definierter Entropie erzeugen
Zitat von O.F. Osborn:
Grundsatzregeln für Brainstorming-Prozesse:

Die Teilnehmer können und sollen ihrer Phantasie freien Lauf lassen. Jede Anregung ist willkommen.

Ideenmenge geht vor Ideenqualität. Es sollen möglichst viele Ideen erzeugt werden.

Es gibt keinerlei Urheberrechte. Die Ideen der anderen Teilnehmer können und sollen aufgegriffen und weiterentwickelt werden.

Kritik oder Wertungen sind während des Brainstormings nicht erlaubt.
Also: Brainstorming oder nicht
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 13:32
Kritik oder Wertungen sind während des Brainstormings nicht erlaubt.
Sag das bitte direkt dem anderen Teinehmer.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 13:56
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
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 14:09
@Schokohase

Faszinierend!! Vielen Dank!!
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 14:12
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
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Brainstorming: Datei mit definierter Entropie erzeugen

  Alt 31. Aug 2018, 13:29
Aber ich kann dich schon verstehen: Nach deinen Postings zu schließen, halte ich dich für einen fleißigen und ehrlichen Programmierer, der eben eine Aversion gegen "versteckten Code" hat. An und für sich eine gesunde Einstellung. "Aber da kommt so ein undurchsichtiger Typ daher (PeterPanino), der ein Beispiel für die Anwendung von GEKAUFTEM (huch!) Code bringt. Da muss doch was faul sein! Aber die Trial herunterzuladen und selbst zu testen und aus den Testergebnissen meine Schlüsse zu ziehen, dafür ist keine Zeit."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.
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