php.de

Zurück   php.de > php.de Intern > Off-Topic Diskussionen

Off-Topic Diskussionen Mach mal Pause vom Programmieren!

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 4 Stimmen, 5,00 durchschnittlich.
Alt 22.09.2010, 13:54  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ist die Frage wie die Arrays bei PHP intern gelöst sind.

Soweit ich weiß sind PHP Arrays intern als Hash Table gelöst, da dauert die Suche nach dem Index dann auch O(log n), heißt am Ende kommst du auf n*log n raus ...

Geändert von Flor1an (22.09.2010 um 13:59 Uhr).
Flor1an ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.09.2010, 14:10  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hm es wird doch wohl etwas mit den Integer-Werten auf sich haben nehme ich an .. macht gerade keinen Sinn, aber vielleicht multipliziert man zunächst alle Werte des ersten Arrays und schaut so, ob im zweiten Array eine Division ohne Rest möglich ist. Macht bei kleinen oder sehr vielen Zahlen allerdings einen ziemlichen Aufwand, genau ist es erstmal auch nicht. Ist die (verkettete) Binärdarstellung relevant?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 22.09.2010, 14:26  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Die Frage ist erstmal unter welchen Umständen wir arbeiten, sind PHP Arrays gemeint mit deren Hash Table implementierung in C? Was genau soll die Laufzeit sein, Anzahl der PHP Funktionsaufrufe oder Anzahl der echten Operationen/Vergleiche.
Flor1an ist offline   Mit Zitat antworten
Alt 22.09.2010, 14:41  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.729
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Die Lösung, die ich im Kopf hatte, ist die von hts.
Die Frage war nicht speziell auf PHP bezogen.

Bei der Frage, wie lange der Lookup in einer Hashtabelle dauert und wie Programmiersprachen das lösen, hörte es bei mir aber zugegebenermaßen auch auf.

Wikipedia sagt:

Zitat:
Wurden Hash-Funktion und Größe der Hashtabelle geeignet gewählt, ist der Aufwand für die Suche in der Tabelle (Look-Up) O(1). Wegen der möglichen Kollisionen hat eine Hashtabelle allerdings im so genannten Worst-Case ein sehr viel schlechteres Verhalten. Dieser wird mit O(n) abgeschätzt, wobei das n der Anzahl der in der Hashtabelle gespeicherten Einträge entspricht. Es werden dabei also alle Einträge in der Tabelle durchsucht.
- http://de.wikipedia.org/wiki/Hashtab...mplexit.C3.A4t

*schulterzuck*

Müsste mich da definitiv weiter einlesen, um es erklären zu können. Mein Halbwissen ist mehr als gefährlich.

Ein Bekannter hat die Frage kürzlich in einem C-Kurs bearbeitet. Ich weiß nicht genau, ob es da auch um eine praktische Umsetzung ging oder nur um die "theoretische" Lösung. (Hashmaps in C möchte ich glaube ich nicht selbst erstellen.)

Mein spontaner Vorschlag war es, die größte Zahl aus beiden Arrays zu suchen, so viele Speicherstellen zu reservieren und zu "nullen" und dann die Idee von hts anzuwenden. Nur eben nicht mit einer Datenstruktur, sondern direkt mit den entsprechenden Positionen im Speicher. Das ist natürlich unglaublich ineffizient, sollte aber theoretisch in linearer Zeit ablaufen.

Ich nehme an, das ließe sich dann erheblich sparsamer als Baumstruktur anordnen. Wenn ich einen -- sagen wir -- 4 Byte langen Integer byteweise in einem 4 Ebenen tiefen Baum anordne, muss ich pro Ebene und Zweig 256 Einträge reservieren, aber nur noch diejenigen Zweige setzen, deren entsprechende Byteabfolge in der Eingabe auftaucht.

Da ich Speicherstellen direkt anspringen kann, wäre der Lookup für jede Zahl immer maximal vier Schritte.

Die Lösung dürfte noch immer massiven Overhead an Speicherverbrauch haben, aber nicht mehr massiven.

Das war jetzt das gefährliche Halbwissen, btw.
__________________
Blog | Buch | Kaloa

Geändert von mermshaus (22.09.2010 um 14:51 Uhr).
mermshaus ist offline   Mit Zitat antworten
Alt 22.09.2010, 14:51  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Die PHP Arrays sind allerdings keine Hashtables in dem Sinne sondern Hashmaps ohne Kollisionen, damit sollte der Lookup tatsächlich genau in O(1) sein, ebenso wie bei "echten" Arrays (entspricht dem Vorschlag mit Speicherpositionen).

Aber auch bei mir: Wie genau Hashmaps in C realisiert sind weiß ich nicht also gefährliches Halbwissen Teil II
fab ist offline   Mit Zitat antworten
Alt 22.09.2010, 14:54  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ja bei sowas ist es halt wichtig zu wissen wie die genannten Arrays funktionieren, wenn du wirklich "echte" Arrays hast die nen numerischen Index besitzen dann mag das eher funktionieren.

@hts: Du darfst die nächste Frage stellen.

Hash maps/tables sind eigentlich nicht so kompliziert. Es wird halt eine Hashfunktion auf den Key ausgeführt, dadurch kommt eben ein Integerwert heraus. Dieser Stellt dann die position da wo der Wert zum entsprechenden Key steht. Die Sache ist eben immer die größte der Hashtabelle, angenommen ich wähle eine mit 100 Werten, dann kann ich aber nicht 101 Elemente eindeutig abbilden und somit gibt es bei einem Hash zwei zugehörige Werte. Mehrere Einträge pro Hash können zum Beispiel durch eine verkettete Liste gespeichert werden. Heißt beim Lookup in der Hashtabelle wird zuerst der Hash des gesuchten Keys erzeugt, dann wird in der Tabelle an dieser Position nachgeschaut, angenommen es gibt dort mehrere Werte müssen diese eben einzeln durchlaufen werden. Eine ganz einfache Hashfunktion auf numerische Keys wäre einfach der modulo Operator. Für eine Hashtabelle mit 100 Werten wird dann einfach "Key modulo 100" genommen und somit ergibt sich der Hashwert.

Geändert von Flor1an (22.09.2010 um 14:58 Uhr).
Flor1an ist offline   Mit Zitat antworten
Alt 22.09.2010, 15:09  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Danke für die Aufklärung, da hatte ich ein Brett vorm Kopf. Natürlich sind dann auch bei PHP Arrays Kollisionen möglich...
fab ist offline   Mit Zitat antworten
Alt 22.09.2010, 15:59  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Keine Ahnung wie genau Arrays implementiert sind in PHP kann ich dir nicht sagen, ist ja auch egal
Flor1an ist offline   Mit Zitat antworten
Alt 09.03.2011, 10:31  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

OK neuer Versuch:

Zitat:
Eine Reporterin steht vor dem Promi-Treff der Stadt, bewacht von einem
muskulösem Türsteher. Eine gutaussehende Blondine nähert sich der Tür.
Der Türsteher ruft "16". Sie antwortet "8". und wird eingelassen.

Als nächstes kommt ein Elegant gekleideter TV-Moderator. Der Türsteher
ruft: "8". "4" antwortet der Mann, der Türsteher macht den Weg frei.

Eine Limousine fährt vor, und eine berühmte Boygroup steigt aus. Der
Doorman grinst und singt: "28". "14" summen die Boys zurück und betreten
das Gebäude.

"Okay", sagt sich die Reporterin. "Ich hab's kapiert."
Als sie sich siegessicher dem Eingang nähert, ruft der Türsteher "12".
"6", antwortet sie selbstbewusst und bekommt die Tür vor der Nase
zugeschmissen.

Was wäre die richtige Antwort gewesen?
Googlen zählt nicht.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 09.03.2011, 10:42  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

da deine Reihe ziemlich kurz ist ....

8 bleibt als Lösung, da ja 6 falsch ist (dann wäre jeder Rechenschritt die Division durch 2 gewesen) ... bleibt nur die Frage, woher wissen die anderen Beteiligten ob ihre Rechnung gerade die Division ist oder doch die Subtraktion ...

1) 16 : 2 = 8
2) 8 - 4 = 4
3) 28 : 2 = 14
4) 12 - 4 = 8
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
quizfragen türsteher, der doorman ruft: \16\. sie antwortet \8\

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:48 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum