![]() |
AW: Brainstorming: Datei mit definierter Entropie erzeugen
Zitat:
|
AW: Brainstorming: Datei mit definierter Entropie erzeugen
Bevor ihr euch noch die Köpfe einschlagt, nehmt das hier als Diskussionsgrundlage
Delphi-Quellcode:
Das liefert dann mit
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.
Delphi-Quellcode:
auch die
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.
Code:
Grundlage dafür ist
3.49366068968819E+0000
![]() |
AW: Brainstorming: Datei mit definierter Entropie erzeugen
@Schokohase
Faszinierend!! Vielen Dank!! |
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:
und erhält wie durch ein Wunder
// e := TShannonEntropy.Calculate<Char> ( str.ToCharArray() );
e := TShannonEntropy.Calculate<Byte> ( TEncoding.UTF8.GetBytes(str) );
Code:
3.59448250651942E+0000
|
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).
|
AW: Brainstorming: Datei mit definierter Entropie erzeugen
Liste der Anhänge anzeigen (Anzahl: 2)
*entfernt um Platz zu sparen*
|
AW: Brainstorming: Datei mit definierter Entropie erzeugen
Zitat:
Außerdem: Hast du noch immer nicht verstanden, dass das nichts mit PE-Dateien zu tun hat? |
AW: Brainstorming: Datei mit definierter Entropie erzeugen
*entfernt um Platz zu sparen*
|
AW: Brainstorming: Datei mit definierter Entropie erzeugen
Zitat:
|
AW: Brainstorming: Datei mit definierter Entropie erzeugen
*entfernt um Platz zu sparen*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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