complexity-theory

___ qstntxt ___

Diese Frage kommt von einer Diskussion, die zu dieser anderen Frage geführt wurde: Algorithmus zur Linearisierung bereits linearisieren . Es ist nicht Hausaufgabe.

Sie erhalten ein Array von %code% numbers und eine Maschine mit %code% Prozessoren und einem gemeinsamen %code% Speicher (Concurrent Read, Exclusive Write Speicher).

Was ist die engste obere Grenze im schnellsten Algorithmus, um die größte Nummer im Array zu finden? [Offensichtlich auch: Was ist der Algorithmus selbst?]

Ich beziehe mich nicht auf die Gesamtmenge der geleisteten Arbeit [die nie weniger als O (N)] sein kann.

    
___ answer8621059 ___

Folgendes ist optimal gebunden:

Wenn p & lt; = n / log n, können Sie es in O (n / p) -Zeit tun; andernfalls ist es O (log n), d. h. wenn p & gt; n / log n ist, erhält man nichts im Vergleich zu p = n / log n.

Beweis - untere Grenze:

Anspruch 1: Sie können niemals schneller als Ω (n / p) arbeiten, weil p-Prozessoren nur eine Beschleunigung von p

bewirken können

Anspruch 2: Sie können niemals schneller als Ω (log n), wegen des CREW-Modells (siehe das Dokument von unforgiven); Wenn Sie überprüfen möchten, ob ein 0-1-Array mindestens eine 1 hat, benötigen Sie O (log n) time.

Beweis - obere Grenze:

Anspruch 3: Sie können Maximum mit n / log n Prozessoren und in O (log n) Zeit

finden

Beweis: Es ist einfach, maximale Verwendung von n Prozessoren und log n Zeit zu finden; Tatsächlich aber sind bei diesem Algorithmus die meisten Prozessoren die meiste Zeit ruhend; durch geeignete Verzahnung (siehe z. B. Papadimitrious Komplexitätsbuch) kann ihre Anzahl auf n / log n verringert werden.

Wenn Sie jetzt weniger als n / log n-Prozessoren angeben, können Sie K-Prozessoren zugewiesene Aufgaben einem Prozessor zuweisen, dies teilt die Prozessoranforderung durch K und multipliziert die erforderliche Zeit mit K.

Sei K = (n / log n) / p; der vorherige Algorithmus läuft in der Zeit O (K log n) = O (n / p) und benötigt n / (log n * K) = p Prozessoren.

Bearbeitet: Ich habe gerade festgestellt, dass der Algorithmus von dasblinkenlight bei p & lt; = n / log n dieselbe asymptotische Laufzeit hat:

n / p + log p & lt; = n / p + log (n / log n) & lt; = n / p + log n & lt; = n / p + n / p & lt; = 2n / p = O (n / p)

Sie können also diesen Algorithmus verwenden, der die Komplexität 0 (n / p) hat, wenn p & lt; = n / log n und O (log n) sonst.

    
___ qstnhdr ___ Wie schnell kann 'das Finden des Maximums in einem Array' möglicherweise kommen? ___ answer8615628 ___

Ich vermute, dass dies O (N / P) + O (P)

ist
  • Das Teilen der Arbeit zwischen P-Prozessoren kostet O (P)
  • kombiniert die Arbeit von P-Prozessoren hat auch Kosten von O (P)
  • Eine perfekte parallele Suche von N Elementen nach P Prozessoren hat Zeitkosten von O (N / P)

Mein naive Algorithmus wäre zu

  • schreibe Element 0 in eine CREW-Zelle mit der Bezeichnung "result"
  • starten P völlig unabhängige Suchen, jeweils durch 1 / P th der N Items
  • Verwenden Sie nach Abschluss jeder Suche CAS-Spinloop, um "Ergebnis" durch das Ergebnis der Teilsuche zu ersetzen, falls es größer ist. (Abhängig von Ihrer Definition von CREW benötigen Sie den Spinloop möglicherweise nicht)
___ tag123algorithm ___ Ein Algorithmus ist eine Folge wohldefinierter Schritte, die eine abstrakte Lösung für ein Problem definieren. Verwenden Sie dieses Tag, wenn sich Ihr Problem auf den Algorithmusentwurf bezieht. ___ answer11656639 ___

Für P = N ^ 2 ist es O (1).

Alle initialisieren boolesches Array CannotBeMax [i] = FALSE

Proc (i, j) setzt CannotBeMax [i] = A [i] & lt; A [j]

Max ist A [CannotBeMax [i] == FALSCH]

Beachten Sie, dass alle gleichzeitigen Schreibvorgänge versuchen, identische Informationen zu schreiben, so dass die Antwort konsistent ist, egal, welche erfolgreich ist.

    
___ tag123Komplexitätstheorie ___ Die Computational Complexity Theory ist ein Zweig der Computertheorie in der theoretischen Informatik und Mathematik, der sich darauf konzentriert, Rechenprobleme nach ihren inhärenten Schwierigkeiten zu klassifizieren. Besonders häufig in der Programmierung ist * amortisierte Analyse * für Zeit oder Raum ___ answer8615631 ___

Ich denke, es ist %code% , wo %code% . %code% Prozessoren suchen nach %code% von %code% Elementen, gefolgt von %code% paarweisen Zusammenführungen, die parallel ausgeführt werden. Die ersten %code% Merges werden von geradzahligen Prozessoren erledigt, die nächsten 'P' / 4 '- von Prozessoren an Stellen, die durch 8 teilbar sind, dann durch 16 und so weiter.

Bearbeiten %code% wird eingeführt, um den Fall abzudecken, wenn Sie wesentlich mehr Prozessorknoten als die Elemente haben, die Sie durchsuchen müssen.

    
___ answer8617822 ___

Cook, Dwork und Reischuk zeigten, dass jeder CREW-Algorithmus zum Finden des Maximums von n Elementen in Omega (lg n) -Zeit laufen muss, sogar mit einer unbegrenzten Anzahl von Prozessoren und unbegrenztem Speicher. Wenn ich mich richtig erinnere, erscheint ein Algorithmus mit einer passenden oberen Grenze in ihrem Papier:

Stephen Cook, Cynthia Dwork und Rüdiger Reischuk. Obere und untere Zeitgrenzen für parallele Maschinen mit wahlfreiem Zugriff ohne gleichzeitige Schreibvorgänge. SIAM Journal on Computing, 15 (1): 87-97, 1986.

    
___
3
Antworten

Ich habe einen neuen Algorithmus, um Faktoren oder Primzahlen in der linearen Zeit - Notwendigkeitsprüfung dafür zu finden

Ich habe einen Algorithmus entwickelt, um Faktoren einer bestimmten Zahl zu finden. So hilft es auch herauszufinden, ob die gegebene Zahl eine Primzahl ist. Ich denke, das ist der schnellste Algorithmus zum Auffinden von Faktoren oder Primzahlen...
07.04.2011, 12:30
5
Antworten

Bester Algorithmus zum Löschen von Duplikaten im String-Array

Heute bat uns der Lehrer in der Schule, einen Duplikat-Lösch-Algorithmus zu implementieren. Es ist nicht so schwierig, und alle haben die folgende Lösung (Pseudocode) gefunden: %Vor% Die Berechnungskomplexität für dieses Algo ist n(n-1)/2...
20.05.2011, 12:34
5
Antworten

Komplexität überwinden, Eckel über Java und Python and Chunk Theory [geschlossen]

In der Einleitung zu Bruce Eckels Thinking In Java sagt er 1998:    Beim Programmieren geht es um das Verwalten   Komplexität: Die Komplexität der   Problem, das du lösen willst, aufgelegt   die Komplexität der Maschine, in der   es ist gelös...
24.06.2010, 19:52
2
Antworten

Erhalte einen O (N) -Algorithmus, um ein Produkt aus einer Sammlung von Zahlen mit einer seltsamen Einschränkung zu finden

Dies ist eine Frage, als ich an einem kürzlichen Interview teilgenommen habe, ich denke es ist interessant. Nehmen wir an: int n = 10; Eingabe: Ein Array int a[10]; Ausgabe: Ein Array float b[10]; Voraussetzung: %Vor% Problem:...
09.05.2013, 16:16
6
Antworten

Was sind die Konsequenzen, wenn man sagt, dass eine nicht-deterministische Turingmaschine NP in polynomieller Zeit lösen kann?

In diesen Tagen habe ich über NP-Probleme, Rechenkomplexität und -theorie studiert. Ich glaube, ich habe die Konzepte von Turing Machine endlich verstanden, aber ich habe ein paar Zweifel. Ich kann akzeptieren, dass eine nicht-deterministisch...
14.09.2010, 22:09
4
Antworten

Können Sie n ganze Zahlen in O (n) amortisierte Komplexität sortieren?

Ist es theoretisch möglich, ein Array von n ganzen Zahlen in einer amortisierten Komplexität von O (n) zu sortieren? Was ist mit dem Versuch, einen schlimmsten Fall von O (n) Komplexität zu erzeugen? Die meisten Algorithmen basieren heute...
25.05.2011, 08:56
7
Antworten

Gibt es so etwas wie "negative" Groß-O-Komplexität? [Duplikat]

Das ist mir ohne besonderen Grund in den Sinn gekommen, und ich nehme an, es ist eine seltsame Frage. Gibt es bekannte Algorithmen oder Probleme, die einfacher oder schneller gelöst werden können? Ich vermute, wenn es solche Dinge gäbe,...
09.07.2010, 01:53
4
Antworten

Ist es möglich, Duplikate in weniger als O (n) Zeit aus einer sortierten Liste zu entfernen?

Ich vermute, dass es einen Weg gibt, wenn Sie speichern können, indem Sie das andere Ende eines Bereichs von wiederholten Werten schneller finden als durch das Durchlaufen dieser Unterliste     
10.11.2010, 21:50
1
Antwort

Gibt es Entscheidungsprobleme, die entscheidbar sind, aber nicht in NP? [geschlossen]

Das ist meine erste Stackoverflow-Frage, also sei sanft. Ich entschuldige mich im Voraus, wenn das schon zu Tode geprügelt wurde ... Ich habe ein paar Threads über NP gelesen, aber ich habe keine verlockende Antwort auf meine Frage gefunden (wen...
15.07.2011, 19:36
2
Antworten

Wie teuer ist der Vergleich zweier ungeordneter Mengen für die Gleichheit?

Gegeben zwei std::set s, kann man einfach beide Sätze gleichzeitig durchlaufen und die Elemente vergleichen, was zu linearer Komplexität führt. Dies funktioniert nicht für std::unordered_set s, da die Elemente in beliebiger Reihenfolge ges...
12.04.2012, 06:33