Inhaltsverzeichnis
Beispiel
Methode 1
Algorithmus
Ausgabe
Heim Backend-Entwicklung C++ Der Durchschnitt der gesetzten Bitanzahlen in einer bestimmten Binärzeichenfolge nach allen möglichen K Operationen

Der Durchschnitt der gesetzten Bitanzahlen in einer bestimmten Binärzeichenfolge nach allen möglichen K Operationen

Aug 25, 2023 pm 12:29 PM
二进制字符串 k次操作 设置位计数

Der Durchschnitt der gesetzten Bitanzahlen in einer bestimmten Binärzeichenfolge nach allen möglichen K Operationen

Bei diesem Problem müssen wir den Durchschnitt der eingestellten Bitanzahl ermitteln, nachdem wir alle ausgewählten K-Operationen für die gegebene Zeichenfolge ausgeführt haben.

Brute-Force-Methoden können zur Lösung des Problems verwendet werden, wir werden jedoch Wahrscheinlichkeitsprinzipien verwenden, um die zeitliche Komplexität von Brute-Force-Methoden zu überwinden.

Problemstellung – Wir erhalten eine Ganzzahl N, ein Array arr[] mit K positiven Ganzzahlen und eine Binärzeichenfolge der Länge N, die nur gesetzte Bits enthält. Wir müssen den Durchschnitt der eingestellten Bitanzahl ermitteln, nachdem wir alle möglichen K-Operationen ausgeführt haben. In der i-ten Operation können wir jedes arr[i]-Bit in der angegebenen Zeichenfolge umdrehen.

Beispiel

Eingabe– N = 2, arr[] = {1, 2}

Ausgabe– 1

Beschreibung – Die anfängliche Binärzeichenfolge ist 11.

  • Im ersten Schritt können wir das erste Zeichen umdrehen und die Zeichenfolge lautet 01.

    • In der zweiten Operation müssen wir zwei beliebige Bits umdrehen. Die Zeichenfolge wird also 10.

  • Die zweite Auswahl kann durch Umdrehen des zweiten Zeichens aus dem ersten Schritt beginnen und die Zeichenfolge lautet 10.

    • Im zweiten Schritt der aktuellen Operation müssen wir zwei beliebige Bits umdrehen, die Zeichenfolge kann 01 sein.

Wir haben also zwei Möglichkeiten: Die letzte Zeichenfolge kann 01 oder 10 sein.

Gesamtauswahlen = 2, insgesamt gesetzte Bits in der letzten Zeichenfolge = 2, ans = 2/2 = 1.

Eingabe– N = 3, arr[] = {2, 2}

Ausgabe– 1,6667

Erklärung – Wir haben eine Anfangszeichenfolge, die 111 ist.

  • Im ersten Vorgang können wir zwei beliebige Zeichen umdrehen. Die Zeichenfolge könnte also 001, 100, 010 sein.

  • In der zweiten Operation können wir 2 Bits in der resultierenden Zeichenfolge aus der ersten Operation umdrehen.

    • Wenn wir zwei beliebige Bits von 001 umdrehen, erhalten wir 111, 010 und 100.

    • Wenn wir zwei beliebige Ziffern von 100 umdrehen, erhalten wir 010, 111 und 001.

    • Wenn wir zwei beliebige Bits von 010 umdrehen, können wir 100, 001 und 111 erhalten.

Also, bei der letzten Operation haben wir insgesamt 9 verschiedene Saiten bekommen.

Gesamtzahl der Ziffern in 9 Zeichenfolgen = 15, Gesamtzahl der Operationen = 9, Antwort = 15/9 = 1,6667

Methode 1

Hier verwenden wir das Wahrscheinlichkeitsprinzip, um dieses Problem zu lösen. Nehmen wir an, dass nach der Durchführung von i-1 Operationen der Durchschnittswert der gesetzten Bits p und der Durchschnittswert der nicht gesetzten Bits q ist. Wir müssen den Durchschnitt der gesetzten und nicht gesetzten Bits in der i-ten Operation berechnen.

Der aktualisierte Wert von p kann also p + die durchschnittliche Anzahl neu gesetzter Bits sein – die durchschnittliche Anzahl neuer Off-Bits.

Algorithmus

  • Initialisieren Sie P auf N, weil wir anfänglich N gesetzte Bits haben, und initialisieren Sie Q auf 0, weil wir anfänglich 0 gesetzte Bits haben.

  • Durchlaufen Sie das Operationsarray.

  • Prev_p und prev_q mit P- und Q-Werten initialisieren.

  • Aktualisieren Sie den P-Wert mit prev_p - prev_p * arr[i]/N + prev_q * arr[i]/N, wodurch die invertierten Bits im Durchschnitt zu den gesetzten Bits addiert werden und die gesetzten Bits im Durchschnitt in nicht gesetzte Bits invertiert werden

  • Q-Wert aktualisieren.

  • Gibt den P-Wert zurück.

Die chinesische Übersetzung von

Beispiel

lautet:

Beispiel

#include <bits/stdc++.h>
using namespace std;

double getAverageBits(int len, int K, int array[]) {
   // to store the average '1's in the binary string
   double P = len;
   // to store the average '0's in the binary string
   double Q = 0;
   // Traverse the array array[]
   for (int i = 0; i < K; i++) {
      // Initialize the prev_p and prev_q with P and Q, which we got from the previous iteration
      double prev_p = P, prev_q = Q;
      // Update the average '1's
      P = prev_p - prev_p * array[i] / len + prev_q * array[i] / len;
      // Update the average '0's
      Q = prev_q - prev_q * array[i] / len + prev_p * array[i] / len;
   }
   return P;
}
int main() {
   int N = 2;
   int array[] = {1};
   int K = sizeof(array) / sizeof(array[0]);
   cout << "The average number of set bits after performing the operations is " << getAverageBits(N, K, array);
   return 0;
}
Nach dem Login kopieren

Ausgabe

The average number of set bits after performing the operations is 1
Nach dem Login kopieren

Zeitkomplexität – O(K), wobei K die Länge des Arrays ist.

Raumkomplexität – O(1), da wir keinen zusätzlichen Raum nutzen.

In diesem Tutorial haben wir gelernt, das durchschnittlich gesetzte Bit zu ermitteln, nachdem wir alle möglichen K-Operationen durchgeführt haben. Bei der Einzelauswahl müssen wir alle im Array angegebenen Operationen ausführen.

Das obige ist der detaillierte Inhalt vonDer Durchschnitt der gesetzten Bitanzahlen in einer bestimmten Binärzeichenfolge nach allen möglichen K Operationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Sep 07, 2023 pm 11:13 PM

Bei diesem Problem müssen wir die längste nicht zunehmende Teilfolge einer gegebenen Zeichenfolge finden. Nicht aufsteigend bedeutet, dass die Zeichen entweder gleich oder in absteigender Reihenfolge sind. Da Binärzeichenfolgen nur „0“ und „1“ enthalten, sollte die resultierende Zeichenfolge entweder mit „1“ beginnen und mit „0“ enden oder mit „0“ oder „1“ beginnen und enden. Um dieses Problem zu lösen, zählen wir das Präfix „1“ und das Suffix „0“ an jeder Position der Zeichenfolge und ermitteln die maximale Summe aus Präfix „1“ und Suffix „0“. Problemstellung: Wir erhalten eine binäre Zeichenfolge str. Wir müssen die längste nicht zunehmende Teilsequenz aus der gegebenen Zeichenfolge finden. Beispiel Input–str="010100"Output–4 veranschaulicht die längste nicht-rekursive Methode

In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln Aug 31, 2023 pm 02:05 PM

Die Funktion pack() packt Daten in eine Binärzeichenfolge. Syntax pack(format,args) Parameter format – das zu verwendende Format. Die folgenden Werte sind möglich: a – mit NUL aufgefüllte Zeichenfolge A – mit Leerzeichen aufgefüllte Zeichenfolge h – hexadezimale Zeichenfolge, niedriges Nibble zuerst H – hexadezimale Zeichenfolge, hohes Nibble zuerst c – vorzeichenbehaftetes Zeichen C – vorzeichenloses Zeichen s – vorzeichenbehaftetes Kurzzeichen (immer 16 Bit). , Maschinenbyte-Reihenfolge) S – unsigned short (immer 16 Bit, Maschinenbyte-Reihenfolge) n – unsigned short (immer 16 Bit, Big-Endian-Bytereihenfolge) v – unsigned short (immer 16 Bit, Little-Endian-Bytereihenfolge) i – vorzeichenbehaftete Ganzzahl (hängt von der Maschinengröße und der Byte-Reihenfolge ab) I – Keine vorzeichenbehaftete Ganzzahl (abhängig von

Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Sep 05, 2023 am 09:01 AM

In der gegebenen Aufgabe erhalten wir eine Zeichenfolge bestehend aus 0 und 1; wir müssen die Gesamtzahl aller Permutationen ermitteln, die mit 1 beginnen. Da die Antwort eine große Zahl sein kann, nehmen wir sie modulo 1000000007 und geben sie aus. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Wir werden dieses Problem lösen, indem wir kombinatorische Mathematik anwenden und einige Formeln aufstellen. Lösungsmethode Bei dieser Methode zählen wir die Anzahl der Nullen und Einsen. Angenommen, n ist die Anzahl der Einsen, die in unserer Zeichenfolge erscheinen, und m ist die Anzahl der Nullen, die in unserer Zeichenfolge erscheinen

Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann Sep 02, 2023 pm 08:09 PM

Problemstellung: Wir haben einen String str und einen binären String B. Die Länge beider Saiten ist gleich N. Wir müssen prüfen, ob wir String str zu einem Palindrom-String machen können, indem wir seine Zeichen mehrmals auf jedem Indexpaar austauschen, das ungleiche Zeichen in String B enthält. Beispiel Beispiel Eingabe str='AAS' B='101' Ausgabe 'JA' Die chinesische Übersetzung von Erläuterung lautet: Erläuterung Wir können str[1] und str[2] austauschen, da B[1] und B[2] nicht gleich sind . Die letzte Zeichenfolge kann „ASA“ sein. Eingabe str='AASS' B='1111' und Ausgabe 'Nein'. Die chinesische Übersetzung von Erklärung lautet: Erklärung, dass wir den String nicht palindromieren können,

Finden Sie den Player mit der geringsten Anzahl an Nullen, nachdem Sie eine Binärzeichenfolge geleert haben (durch Entfernen nicht leerer Teilzeichenfolgen). Finden Sie den Player mit der geringsten Anzahl an Nullen, nachdem Sie eine Binärzeichenfolge geleert haben (durch Entfernen nicht leerer Teilzeichenfolgen). Sep 16, 2023 am 10:21 AM

In diesem Artikel werden wir ein interessantes Problem im Zusammenhang mit dem Bereich der String-Manipulation und der Spieltheorie diskutieren: „Leeren Sie einen binären String, indem Sie nicht leere Teilstrings entfernen, und finden Sie den Spieler mit den wenigsten verbleibenden Nullen.“ Diese Frage untersucht das Konzept der Verwendung binärer Zeichenfolgen für Wettkampfspiele. Unser Ziel ist es, den Spieler zu finden, der am Ende des Spiels die wenigsten 0 übrig hat. Wir werden dieses Problem diskutieren, eine C++-Codeimplementierung bereitstellen und das Konzept anhand eines Beispiels erläutern. Die Problemstellung verstehen Zwei Spieler erhalten eine Binärzeichenfolge und spielen abwechselnd das Spiel. In jedem Zug entfernt der Spieler nicht leere Teilzeichenfolgen, die mindestens eine „1“ enthalten. Das Spiel endet, wenn die Zeichenfolge leer ist oder keine „1“ in der Zeichenfolge vorhanden ist. Spieler, die nicht in der Lage sind, Maßnahmen zu ergreifen, verlieren das Spiel. Die Aufgabe besteht darin, die endgültige 0 zu finden

Berechnen Sie binäre Zeichenfolgen der Länge N, die wiederholte Verkettungen von Teilzeichenfolgen sind Berechnen Sie binäre Zeichenfolgen der Länge N, die wiederholte Verkettungen von Teilzeichenfolgen sind Sep 07, 2023 am 10:13 AM

Der Zweck dieses Artikels besteht darin, ein Programm zum Zählen der Anzahl binärer Zeichenfolgen der Länge N zu implementieren, die durch wiederholte Verkettung einer Teilzeichenfolge gebildet werden. Das Ziel besteht darin, zu bestimmen, wie viele Binärzeichenfolgen der Länge N durch wiederholtes Verketten einzelner Teilzeichenfolgen des gegebenen Textes erstellt werden können, wobei N eine positive ganze Zahl ist. Problemstellung: Implementieren Sie ein Programm, das die Anzahl der binären Zeichenfolgen der Länge N zählt, die wiederholt Teilzeichenfolgen verketten. Beispiel Beispiel 1 Nehmen wir die Eingabe, N = 3. Ausgabe: 2. Die chinesische Übersetzung von Explanation lautet: Explanation. Im Folgenden werden mögliche binäre Zeichenfolgen der Länge N = 3 aufgeführt, in denen eine Teilzeichenfolge wiederholt verkettet wird. „000“:Thesubstr

Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen Aug 28, 2023 am 09:49 AM

Bei zwei Binärzeichenfolgen str1 und str2 gleicher Länge müssen wir den gegebenen Funktionswert maximieren, indem wir Teilzeichenfolgen aus den gegebenen Zeichenketten gleicher Länge auswählen. Die angegebene Funktion sieht folgendermaßen aus: fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). Hier ist len(substring) die Länge des ersten Teilstrings und xor(sub1,sub2) das XOR des gegebenen Teilstrings. Dies ist möglich, da es sich um binäre Strings handelt. Beispiel Input1:stringstr1=10110&stringstr2=11101Output:3 veranschaulicht unsere

Mindestanzahl an Zügen, die erforderlich sind, um alle Nullen vor Einsen in einer Binärzeichenfolge zu platzieren Mindestanzahl an Zügen, die erforderlich sind, um alle Nullen vor Einsen in einer Binärzeichenfolge zu platzieren Sep 23, 2023 pm 01:29 PM

Problemstellung Wir erhalten eine binäre Zeichenfolge str und müssen die Mindestanzahl an Zeichen aus der Zeichenfolge entfernen, damit wir alle Nullen vor Einsen setzen können. Beispieleingabe str=‘00110100111’ Beschreibung von Ausgabe 3 Hier können wir Ausgabe 3 auf zwei Arten erreichen. Wir können arr[2], arr[3] und arr[5] oder arr[4], arr[6] und arr[7] aus der Zeichenfolge entfernen. Eingabe str=‘001101011’ und Ausgabe 2 zeigt, dass wir arr[4] und arr[6] löschen und alle Nullen vor 1 setzen können. Eingabe str=‘000111’ Ausgabe 0 bedeutet, dass in der angegebenen Zeichenfolge alle Nullen vor 1 platziert wurden, sodass wir nicht bei Null beginnen müssen

See all articles