php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.02.2009, 23:20   #1 (permalink)
Moderator
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 7.455
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 Anblick
Standard Hashfunktion String -> Integer

Hi,
ich möchte Strings auf Zahlen von der Größenordnung 0-3 bzw. 0-4 abbilden. Mein Ansatz wäre den String in einen Integer umzuwandeln und dann Modulo 3 bzw. 4 zu nehmen. Allerdings fällt mir keine geeignete Möglichkeit ein einen String auf einen Integerwert zu "casten". Eine einfache Umwandlung in ASCII oder so wäre blöd da so eigentlich nur der letzte Buchstabe die Zahl die ich suche bestimmt (auf Grunde des Modulo eben).

Daher wäre eine andere Lösung die Buchstaben in ASCII umzuwandeln und alle Einzelwerte zu addieren.

Meine Frage ist jetzt ob ihr entweder eine schon gegebene Hashfunktion kennt die aus einem String einen Integer macht (möglichst gleich verteilt auf den niedrigen Stellen) oder eine Idee habt wie ich das lösen könnte.

Das eine Gleichverteilung natürlich immer auf den String drauf ankommt ist mir klar aber damit muss ich eben leben
__________________
Jetzt auch rauchfrei in Bayern!
Flor1an ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.02.2009, 23:36   #2 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 26.138
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Die Kriterien sind mir nicht klar. Kannst ja ein md5 ins 10er System casten.
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:21   #3 (permalink)
Moderator
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 7.455
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 Anblick
Standard

Wie caste ich denn einen md5 Hash in einen Int? Bzw. nach welchen Kriterien denn beim md5 sind ja immer noch Buchstaben dabei.

Eigentlich geht es mir darum verschiedene Pfade zu Dateien auf einen Index z.B. 0-4 zu verteilen. Da die Pfade sehr oft auf die selbe Endung hinauslaufen kann ich z.b. die einzelnen Buchstaben nicht in ASCII Werte umwandeln da so der letzte ASCII Code sehr oft gleich wäre und somit also auch der modulo 5 gleich. Wichtig ist außerdem dass der selbe Pfad immer auf den selben Index gehasht wird, also eine zufällige Verteilung fällt somit weg.
__________________
Jetzt auch rauchfrei in Bayern!
Flor1an ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:23   #4 (permalink)
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 3.846
Chriz ist ein sehr geschätzer MenschChriz ist ein sehr geschätzer MenschChriz ist ein sehr geschätzer MenschChriz ist ein sehr geschätzer Mensch
Standard

abs(crc32($string)) % 4

Bleib doch bei MD5 und erstell Ordner auf Hex-Basis

/00/
/01/
..
/a0/
..
/ff/

Finde ich die sinnvollste Lösung, hat auch eine gute Verteilung - md5 eben.
Chriz ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:36   #5 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 26.138
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

@Florian: MD5 ist eine Hexzahl - kann also theoret. in eine Zahl zur Basis 10 umgewandelt werden. Im Prinzip kannst Du ja auch nen Substr () verwenden, md5 ist ja ausreichend zufällig, und dann nen Modulo ziehen.
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:47   #6 (permalink)
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 3.846
Chriz ist ein sehr geschätzer MenschChriz ist ein sehr geschätzer MenschChriz ist ein sehr geschätzer MenschChriz ist ein sehr geschätzer Mensch
Standard

Naja, die Hexzahl ist aber verdammt gross: 3,4028236692093846346337460743177e+38
crc32() ist ganz nett, habe auch mal nach einer Hashfunktion in den Zahlenbereich gesucht und dafür eignet sich das eigentlich ganz gut.
Chriz ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:53   #7 (permalink)
Moderator
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 7.455
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 Anblick
Standard

Stimmt, da hab ich gar nicht daran gedacht. Grr danke.

Ich denke ich werde wie von Chriz vorgeschlagen abs(crc32($string)) % 4 nutzen. Ich brauche wirklich den Index und möchte damit keinen Ordner anlegen sondern eben nur die Pfade hashen.

Noch als Anmerkung:

PHP-Code:
$hash hexdec(md5('mein test string / ist hier drin'));
echo 
$hash.'<br />'.$hash 5
Code:
1.653811759703E+38
0
Hier wird bei jedem String auf 0 gewertet, daher nutze ich crc32.
__________________
Jetzt auch rauchfrei in Bayern!
Flor1an ist offline   Mit Zitat antworten
Alt 26.02.2009, 00:59   #8 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 26.138
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

PHP-Code:
$hash hexdec(substr (md5('mein test string / ist hier drin') , 8));
echo 
$hash.'<br />'.$hash 5
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.02.2009, 01:09   #9 (permalink)
Moderator
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 7.455
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 Anblick
Standard

Stimmt so würds auch gehen.
Ich hab nen kurzen Benchmark gemacht mit glaub 100 000 Berechnungen:

0.66918897628784 sec crc32
5.063668012619 sec md5

Von daher werd ich wohl bei crc32 bleiben Aber danke für die Ideen, crc32 kannte ich noch nicht und das md5 nen Hexwert ist daran hab ich überhaupt nicht gedacht.
__________________
Jetzt auch rauchfrei in Bayern!
Flor1an ist offline   Mit Zitat antworten
Alt 26.02.2009, 01:14   #10 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 26.138
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Wow, was für ein Unterschied
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] File-Upload UPLOAD_ERR_PARTIAL cycap PHP Einsteiger 95 29.01.2009 14:12
string in string suchen,ersetzen,zusammenfügen und update machen litterauspirna PHP Einsteiger 24 08.01.2009 13:38
PHP5 SOAP - Problem mit Arrays Calexico PHP-Fortgeschrittene 0 11.09.2008 12:06
Event abfangen Ambience JavaScript, Ajax und mehr 4 30.08.2007 14:36
Type Hinting - must be an instance of integer, integer given mAy^daY PHP Tipps 2007 1 06.03.2007 14:55
String in Integer mark_gebert HTML, Usability und Barrierefreiheit 3 26.12.2006 15:20
String in Array als Integer definieren cyberholic PHP-Fortgeschrittene 2 01.12.2006 20:29
String auslesen Shaira PHP Tipps 2006 11 01.12.2006 17:52
string -> integer obi PHP Tipps 2006 2 25.07.2006 00:32
Integer in String umwandeln Luke_Skyscraper PHP Tipps 2005-2 3 07.08.2005 17:29
Integer String etc. FBI PHP Tipps 2005-2 2 03.08.2005 20:21
string -> int, nur wenn string zahl ist PHP Tipps 2005-2 3 06.06.2005 12:33
where string von einer funktion zu anderen transportieren PHP Tipps 2005 5 03.03.2005 16:29
php code als string umwandeln PHP Tipps 2005 8 23.02.2005 18:03
String mit Leerzeichen auffüllen HTML, Usability und Barrierefreiheit 2 27.10.2004 18:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
hashfunktion string, hashfunktion für strings, hashfunktion strings, md5 integer, javascript hash string, hashfunktion code, hashfunktion für string, php string hash, php zahl aus string hash, php hash integer, gute hashfunktion strings, string to integer, php string to int, hashfunktionen string, php integer hash, crc32 als hashfunktion, js hash string function, kurzer hash, php kurzer hash, php hash to int

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:31 Uhr.




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