Autor Beitrag
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 800
Erhaltene Danke: 17

Win10
Delphi XE7/Tokyo Prof.
BeitragVerfasst: Do 29.10.20 15:45 
Blöder Titel aber mir fällt nichts besseres ein.

Folgender Sachverhalt. Ich habe viele Arrays mit Integerwerten. Die einzelnen Werte sind jeweils nur einmal vorhanden, können aber in beliebiger Reihenfolge vorkommen.

Nun möchte ich prüfen ob es Arrays gibt die zwei bzw. zwei bis drei gleiche Zahlen beinhalten.

Die einfache Variante mit zwei Zahlen ist simpel. Ich mache mir hier im Prinzip die Binärzahlen zunutze und rechne die Werte des Arrays,wenn der Inhalt größer 0 ist, einfach zusammen in der Art 2^(A[1]-1) + 2^(A[2]-1) ... . Und zähle parallel dazu mit wie viele positive Werte das Array hatte. Danach muss ich nur noch die Resultate vergleichen und komme so ziemlich einfach zu meinen Treffern.

Mit drei Zahlen geht das auch, jedoch gibt es hier einen Spezialfall, denn es würden auch folgende Kombinationen gelten
ausblenden Quelltext
1:
2:
3:
Array1 = 2 3 4
Array2 = 2 3
Array3 =   3 4

Gibt es eine, wie auch immer geartete, "Bitmagie" um einfach zu erkennen, dass 14,6 und 12 zueinander gehören?

Keine Ahnung von was ich rede? Es geht um einen kleinen Solver für Str8ts und ich implementiere da jetzt sukzessive die verschiedenen deduktiven Methoden.

Aktuell bin ich gerade an der Str8ts: Nackte Gruppen Methode dran.

:oops: :oops: Die heissen wirklich so.

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Moderiert von user profile iconTh69: URL-Titel hinzugefügt.

_________________
mfg. Joel
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 331
Erhaltene Danke: 30

Windows 8.1
Delphi 10.3 Comm. Edition
BeitragVerfasst: Do 29.10.20 22:36 
Hallo,

mit reiner "Bitmagie" wird das nicht gehen. Gehen würde mit DF="Deine Formel":

AnzahlEinsen(DF(Array1) AND DF(Array2));

Die Anzahl der gesetzten Bits entspricht ja der Anzahl der Übereinstimmungen in dem AND der beiden Arrays. Das Zählen der gesetzten Bits - meine Funktion AnzahlEinsen - wirst Du mit einer kleinen Schleife selbst programmieren müssen. Aber vielleicht hilft Datenbits effektiv zählen, wo ein als effektiv beschriebener Delphi-Code dargestellt ist.

Gruß GuaAck

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
JoelH Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 800
Erhaltene Danke: 17

Win10
Delphi XE7/Tokyo Prof.
BeitragVerfasst: Fr 30.10.20 08:49 
Super,

das hat mich auf den richtigen Kurs gebracht. :zustimm:

Der Zusammenhang ist folgender, so wie ich die Ziffern binär codiere müssen die beiden kleineren Teile jeweils zwei Bit mit dem Dreierarray gemeinsam haben und untereinander mindestens 1 Bit.

_________________
mfg. Joel
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 898
Erhaltene Danke: 150

Win7
VS 2013, VS2015
BeitragVerfasst: Sa 31.10.20 09:08 
Kannst du dafür evtl. ditrekt Hashsets nehmen?

Die haben eine schnelle Intersect Methode, damit kannst du Schnittmengen abfragen: docs.microsoft.com/e...ith?view=netcore-3.1