Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich habe hier folgende Problemstellung.

In meiner Datenbank habe ich, sagen wir mal, 4 Werte (können unterschiedlich viel sein), die entweder 0 oder 1 sein können:


R1        R2        R3        R4       

1          1         1          1    

1          1         0          0

1          1         0          1

Jetzt muss ich herausfinden, welches der kleinste gemeinsame Nenner von denen ist: in meinem Fall also 1 1 0 0, oder? :)

Die Anzahl der Datensätze kann natürlich auch varrieren.

Frage: Wie bewerkstellige ich das?

Unter google hab ich immer nur kleinstes gemeinsames Vielfaches oder Teiler gefunden :rolleyes:

Gruß

Ganymed

Geschrieben

Du willst also für die Werte, die bei allen Datensätzen 1 sind, 1 haben, ansonsten 0?

Das ist grundsätzlich eine Und-Verknüpfung.

Du könntest auch aufsummieren. Wenn die Summe gleich der Anzahl der Datensätze ist, hast du eine 1, sonst eine 0.

Geschrieben
Du willst also für die Werte, die bei allen Datensätzen 1 sind, 1 haben, ansonsten 0?

Das ist grundsätzlich eine Und-Verknüpfung.

Du könntest auch aufsummieren. Wenn die Summe gleich der Anzahl der Datensätze ist, hast du eine 1, sonst eine 0.

Hmm... also die Reihe, die du meinst, ist die Senkrechte... Ich müsste aber die Waagerechte ermitteln. Und da geht das mit der Summe doch einfach nicht, oder irre ich mich da?

Da wäre ja, wie oben schon gesagt der kleinste gemeinsame Nenner aller Reihen die 1 1 0 0, weil alle Dokumente zumindest bei den ersten beiden Werten eine 1 haben...

Geschrieben

Du solltest dich von dem Begriff "Nenner" lösen, denn mit Arithmetik hat das nichts zu tun.

Hmm... also die Reihe, die du meinst, ist die Senkrechte... Ich müsste aber die Waagerechte ermitteln. Und da geht das mit der Summe doch einfach nicht, oder irre ich mich da?

Das ist nur eine Frage der Vorgehensweise. Ob du zuerst Zeilen (=Datensätze) verarbeitest, oder erst die einzelnen Felder (=Spalten) für alle Datensätze, kommt aufs gleiche raus.

Letzteres ist IMHO erheblich einfacher, darum hatte ich das vorgeschlagen.

Wenn du die Summe über die einzelnen Felder bildest, bekommst du 3 3 1 2. Jetzt musst du nur noch überall dort, wo eine Zahl = Anzahl der Datensätze (3) steht, eine 1 hinmachen, und an den anderen Stellen eine 0: 1 1 0 0

Wenn du es unbedingt zeilenweise verarbeiten willst, könntest du die Werte als Bits anordnen (mit Zweierpotenzen multiplizieren) und addieren:


1 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 15
1 * 8 + 1 * 4 + 0 * 2 + 0 * 1 = 12
1 * 8 + 1 * 4 + 0 * 2 + 1 * 1 = 13[/CODE]

Diese Werte verknüpfst du dann bitweise-und:

15 & 12 & 13 = 12

Die Darstellung des Ergebisses im Dualsystem ist dann das, was du suchst:

12 (dez) = 1100 (dual).

Hier musst du aber auf führende Nullen aufpassen. Außerdem kann die Anzahl der Felder je nach Plattform und Sprache begrenzt sein.

Geschrieben

Diese Werte verknüpfst du dann bitweise-und:

15 & 12 & 13 = 12

Die Darstellung des Ergebisses im Dualsystem ist dann das, was du suchst:

12 (dez) = 1100 (dual).

Hey! Das klingt gut *freu*

Kannst du mir das mit dem bitweise Verknüpfen noch einmal erklären? :)

Geschrieben

Jeden deiner Datensätze (Zeilen) kann man als Dualzahl interpretieren, wobei jedes Feld eine Dualziffer (= 1 Bit) darstellt.

Mehrere dieser Zahlen kann man miteinander verknüpfen, und zwar jeweils die zusammengehörigen Bits:

15: 1 1 1 1
12: 1 1 0 0
-----------
&: 1 1 0 0[/CODE]

Bei der und-Verknüpfung ist ein Bit im Ergebnis nur dann 1, wenn das gleiche Bit bei allen Eingangswerten 1 ist. Sobald auch nur eines 0 ist, ist das Ergebnis 0.

Einige Programmiersprachen haben Operatoren oder Funktionen für die bitweise Und-Verknüpfung fest eingebaut.

Ich bin aber immer noch der Meinung, dass es mit der Summe viel einfacher geht... ;)

Geschrieben

Um es nochmal etwas deutlicher zu formulieren: Wenn die Daten wirlich so in einer Datenbank liegen, dann brauchst du genau 1 SQL-Statement, um die Feldsummen und die Anzahl der Datensätze zu ermitteln, und musst dann nur noch ein paar Zahlen ersetzen.

Wenn du das zeilenweise machen willst, musst du dir jeden Datensatz ansehen, alle Werte einzeln mit Zweierpotenzen multiplizieren und aufaddieren, die Werte aller Datensätze und-verküpfen und am Ende die Bits aus dem Ergebnis wieder rausholen.

Je nach Programmiersprache ist das mehr oder weniger kompliziert, aber es ist auf jeden Fall erheblich aufwändiger als der erste Ansatz.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...