Πιο γρήγορα στρινγκς!

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Πιο γρήγορα στρινγκς!

Δημοσίευση από Christianago » 13 Ιούλ 2011 23:38

Ναι ξερω γω να γινει

Κώδικας: Επιλογή όλων

char characters[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ()@!$#*.-_";
Κοιτα ο κωδικας ειναι για ολους. Η χρηση ομως του καθενος ειναι προσωπικη. Και εχει ουκ ολιγες χρησεις αυτος ο κωδικας.
Απλα επειδη δεν ξερω να διαβαζω καλα c ή java θελω να ξερω αν οι κωδικες παραπανω οντως παραγουν μοναδικα string.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από cherouvim » 13 Ιούλ 2011 23:40

Christianago έγραψε:...θελω να ξερω αν οι κωδικες παραπανω οντως παραγουν μοναδικα string.
Μοναδικά string; Πότε το είπες αυτό ξανά;

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από gvre » 14 Ιούλ 2011 00:49

Μοναδικά στρινγκς μόνο στο παρακάτω λινκ :D
http://sexyfemme.skroutzstore.gr/assets ... SL0066.jpg

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Πιο γρήγορα στρινγκς!

Δημοσίευση από Christianago » 14 Ιούλ 2011 01:02

Ποια ειναι η πιθανοτητα ενα string να ξαναπαραχθει ενα string με τις παραπανω functions? Αμα ειναι μηδαμινη ενταξει παλευεται.
Μοναδικά στρινγκς μόνο στο παρακάτω λινκ
http://sexyfemme.skroutzstore.gr/assets ... SL0066.jpg
Μοναδικα στριγκς φοριουνται μονο σε μοναδικους λωλους. :P

orfeo
Δημοσιεύσεις: 98
Εγγραφή: 17 Μάιος 2001 03:00
Τοποθεσία: Αθήνα

Πιο γρήγορα στρινγκς!

Δημοσίευση από orfeo » 14 Ιούλ 2011 12:42

Ωραίο thread guys. Να μην ξεχάσουμε όμως να πούμε ότι πολλές φορές το να κάνει κάποιος optimize κάτι τέτοιο είναι εντελώς άσκοπο.

Καλό είναι να μπορεί, αλλά πολλές φορές δεν χρειάζεται. Γιαυτό πάντα πρέπει να σκεφτόμαστε τι θέλουμε να κάνουμε και αν αξίζει τον κόπο να ασχοληθούμε 1-2 ώρες για να το κάνουμε πιο γρήγορα.

Μπορεί από την αρχή η απόφαση να κάνουμε 1 εκατ. εγγραφές σε ένα function call να μην ήταν και η πιο έξυπνη.

Προπαντώς για καταστάσεις που είναι να γίνουν 1 φορά ή π.χ. 1 φορά τον μήνα, μπορεί να μην παίζει απολύτως κανέναν ρόλο αν θα κάνει 10 secs ή 40.

Πριν λίγο καιρό ήθελα να κάνω ένα check στην ακεραιότητα δεδομένων μεταξύ πινάκων. Μάλιστα είχα πίνακες και σε διαφορετικές βάσεις. Αφού έφαγα 1-2 ώρες προσπαθώντας να το επιταχύνω αποφάσισα να το αφήσω όπως ήταν και να φτιάξω σε html ένα μηχανισμό ώστε να τρέχει και μετά να ξανατρέχει τον εαυτό του από εκεί που είχε σταματήσει. Σε μισή ώρα ήταν έτοιμο και απλα το άφησα να τρέχει για μισή ώρα μέχρι να τα κάνει όλα. Έκανε 500 records την φορά (αν θυμάμαι καλά) και συνολικά έλεγξε περίπου 100.000. Done.

my 2cents

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από gvre » 14 Ιούλ 2011 12:59

orfeo έγραψε:Ωραίο thread guys. Να μην ξεχάσουμε όμως να πούμε ότι πολλές φορές το να κάνει κάποιος optimize κάτι τέτοιο είναι εντελώς άσκοπο.

Καλό είναι να μπορεί, αλλά πολλές φορές δεν χρειάζεται. Γιαυτό πάντα πρέπει να σκεφτόμαστε τι θέλουμε να κάνουμε και αν αξίζει τον κόπο να ασχοληθούμε 1-2 ώρες για να το κάνουμε πιο γρήγορα.

Μπορεί από την αρχή η απόφαση να κάνουμε 1 εκατ. εγγραφές σε ένα function call να μην ήταν και η πιο έξυπνη.

Προπαντώς για καταστάσεις που είναι να γίνουν 1 φορά ή π.χ. 1 φορά τον μήνα, μπορεί να μην παίζει απολύτως κανέναν ρόλο αν θα κάνει 10 secs ή 40.

my 2cents
Σωστά είναι όλα αυτά που λες. Το θέμα είναι ότι δεν ξέρουμε και δε μας λέει τι πρόβλημα προσπαθεί να λύσει ο Christianago ο οποίος άνοιξε αυτό εδώ το thread.

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Πιο γρήγορα στρινγκς!

Δημοσίευση από Christianago » 14 Ιούλ 2011 13:17

Σωστά είναι όλα αυτά που λες. Το θέμα είναι ότι δεν ξέρουμε και δε μας λέει τι πρόβλημα προσπαθεί να λύσει ο Christianago ο οποίος άνοιξε αυτό εδώ το thread.
Απαντησα σε παραπανω posts. Μενει μονο να τρεξω τα προγραμματα που δοθηκαν.
Κατα τα αλλα ειμαι ειμαι υπερ το αρκετον καλυμμενος.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από dva_dev » 14 Ιούλ 2011 16:35

orfeo έγραψε:Ωραίο thread guys. Να μην ξεχάσουμε όμως να πούμε ότι πολλές φορές το να κάνει κάποιος optimize κάτι τέτοιο είναι εντελώς άσκοπο.

Καλό είναι να μπορεί, αλλά πολλές φορές δεν χρειάζεται. Γιαυτό πάντα πρέπει να σκεφτόμαστε τι θέλουμε να κάνουμε και αν αξίζει τον κόπο να ασχοληθούμε 1-2 ώρες για να το κάνουμε πιο γρήγορα.

Μπορεί από την αρχή η απόφαση να κάνουμε 1 εκατ. εγγραφές σε ένα function call να μην ήταν και η πιο έξυπνη.

Προπαντώς για καταστάσεις που είναι να γίνουν 1 φορά ή π.χ. 1 φορά τον μήνα, μπορεί να μην παίζει απολύτως κανέναν ρόλο αν θα κάνει 10 secs ή 40.

Πριν λίγο καιρό ήθελα να κάνω ένα check στην ακεραιότητα δεδομένων μεταξύ πινάκων. Μάλιστα είχα πίνακες και σε διαφορετικές βάσεις. Αφού έφαγα 1-2 ώρες προσπαθώντας να το επιταχύνω αποφάσισα να το αφήσω όπως ήταν και να φτιάξω σε html ένα μηχανισμό ώστε να τρέχει και μετά να ξανατρέχει τον εαυτό του από εκεί που είχε σταματήσει. Σε μισή ώρα ήταν έτοιμο και απλα το άφησα να τρέχει για μισή ώρα μέχρι να τα κάνει όλα. Έκανε 500 records την φορά (αν θυμάμαι καλά) και συνολικά έλεγξε περίπου 100.000. Done.

my 2cents
Μερικές φορές ξεκινάμε δίνοντας την πιο "χαζή/αργή/..." λύση που μπορεί να υπάρχει. Όσο το κοιτάμε και το παιδεύουμε θα βρίσκουμε πιο "έξυπνες" και πιο "γρήγορες" λύσεις από την αρχική. Ισως κάποια στιγμή πάλι καταλήξουμε στο να κρατήσουμε την οποιαδήποτε "χαζή" λύση είχαμε φτιάξει αρχικά και να είμαστε πρακτικά πάλι πίσω στο ίδιο σημείο όπως όταν είχαμε πρωτοξεκινήσει. Η διαφορά είναι όμως ότι τώρα ξέρουμε τι άλλο μπορούμε να κάνουμε και το σημαντικότερο να τεκμηριώσουμε γιατί η "χαζή/αργή/..." λύση είναι η καλύτερη.

Ο προγραμματισμός δεν έχει να κάνει μόνο με το να δίνει λύσεις, αλλά και με το να σκέφτεσαι.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Πιο γρήγορα στρινγκς!

Δημοσίευση από jpk » 17 Ιούλ 2011 05:22

orfeo έγραψε:Να μην ξεχάσουμε όμως να πούμε ότι πολλές φορές το να κάνει κάποιος optimize κάτι τέτοιο είναι εντελώς άσκοπο.
Συμφωνώ απόλυτα …


Αν ήταν όμως θεωρητικό το ζήτημα ρίξε μια ματιά σε αυτό που επισυνάπτω είναι κατά 25% πιο γρήγορο από αυτά που δοκίμασα με βάση από εδώ και εγγυείται μοναδικά strings (όχι σαν της φωτογραφίας όμως…) . Ένα από αυτά που έχω αλλάξει όμως είναι το πώς παράγεις το τυχαίο string.
Συνημμένα
test.zip
(2.49 KiB) Μεταφορτώθηκε 406 φορές

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από dva_dev » 17 Ιούλ 2011 07:30

jpk έγραψε:Ένα από αυτά που έχω αλλάξει όμως είναι το πώς παράγεις το τυχαίο string.
Ετσι όπως το έχεις όμως έχει έναν σημαντικό περιορισμό. Το string που παράγεται δεν μπορεί να έχει τον ίδιο χαρακτήρα >1 φορές.
Ισως θα μπορούσες να ξεπεράσεις το πρόβλημα βάζοντας στο $characters τον κάθε χαρακτήρα 8 φορές (κάνοντας το string από 36 χαρακτήρες ουσιαστικά 8*36)

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Πιο γρήγορα στρινγκς!

Δημοσίευση από jpk » 17 Ιούλ 2011 09:58

dva_dev έγραψε:Ισως θα μπορούσες να ξεπεράσεις το πρόβλημα βάζοντας στο $characters τον κάθε χαρακτήρα 8 φορές (κάνοντας το string από 36 χαρακτήρες ουσιαστικά 8*36)
Σωστός… (δεν το είχα δεί...όπως και το PREG_SPLIT_NO_EMPTY στο preg_split)

Έκανα και μια δοκιμή με

Κώδικας: Επιλογή όλων

CREATE FUNCTION randconcatchar () RETURNS CHAR(1) DETERMINISTIC RETURN SUBSTRING('0123456789abcdefghijklmnopqrstuvwxyz' FROM (1 + FLOOR(RAND() * 35)) FOR 1) 
CREATE FUNCTION randconcat () RETURNS CHAR(8) DETERMINISTIC RETURN CONCAT(randconcatchar(),randconcatchar(),randconcatchar(),randconcatchar(),randconcatchar(),randconcatchar(),randconcatchar(),randconcatchar())
Στο __construct και drop τις functions στο __destruct αλλά από χρόνους δεν πήγε καλλίτερα…

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Πιο γρήγορα στρινγκς!

Δημοσίευση από Christianago » 15 Αύγ 2011 00:00

gvre έγραψε:Με το παρακάτω πολύ απλό προγραμματάκι και χωρίς ιδιαίτερα optimizations ο χρόνος είναι μόλις 1.7". Για κάτι τόσο απλό η java και τα threads είναι κάπως too much. Επίσης, επειδή κάποιος κάνει write κάτι δε σημαίνει ότι τα δεδομένα γράφονται αυτόματα και στον δίσκο καθώς μεσολαβούν αρκετά buffers.

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char *buf = NULL;
char characters&#91;&#93; = "0123456789abcdefghijklmnopqrstuvwxyz";

char *random_gen&#40;&#41;
&#123;
        buf&#91;0&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;1&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;2&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;3&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;4&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;5&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;6&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;7&#93; = characters&#91;rand&#40;&#41; % 35&#93;;
        buf&#91;8&#93; = '\0';

        return buf;
&#125;


int main&#40;void&#41;
&#123;
        int i;
        FILE *fp = fopen&#40;"data.txt", "w"&#41;;

        buf = &#40;char *&#41;malloc&#40;9 * sizeof&#40;char&#41;&#41;;
        if &#40;fp && buf&#41;
        &#123;
                srand&#40;time&#40;NULL&#41;&#41;;
                for &#40;i = 0; i < 1000000; i++&#41;
                        fprintf&#40;fp, "%s\n", random_gen&#40;&#41;&#41;;
                fclose&#40;fp&#41;;
        &#125;

        return EXIT_SUCCESS;
&#125;
Ξεκινησα να δοκιμασω το προγραμμα του gvre καθως οπως αναφερω και στον τιτλο η ταχυτητα ειναι η πιο σημαντικη.
Οντως ειναι πολυ γρηγορος ο κωδικας για παραγωγη 1.000.000 strings.
Να ρωτησω υπαρχει περιπτωση να ανεβασω το οριο πχ. στα 1 billion strings ή θα υπαρξουν απροβλεπτα αποτελεσματα;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από dva_dev » 15 Αύγ 2011 02:44

...υπαρχει περιπτωση να ανεβασω το οριο πχ. στα 1 billion strings...
Υπάρχει αυτή η περίπτωση χωρίς να μπορώ να πω με βεβαιότητα αν θα το κάνεις ή όχι.
...ή θα υπαρξουν απροβλεπτα αποτελεσματα;
Εξαρτάται από το τι εννοείς απρόβλεπτο αποτέλεσμα. Μπορεί να σου καεί ο δίσκος; Μπορεί. Μπορεί να σου κάνει μήνυση ο γείτονας για τον θόρυβο που κάνει το πληκτρολόγιο σου όσο αλλάζεις τον κώδικα; Και αυτό μπορεί. Μπορεί να γίνει σεισμός όσο γεμίζει το αρχείο σου; Πάλι μπορεί. Μπορεί να έρθει η καταστροφή του κόσμου επειδή τελικά το μετάνωισες και δεν θα βάλεις 1 billion strings, πάλι μπορεί.

Αν γίνεις πιο συγκεκριμένος σε αυτό που θέλεις να ρωτήσεις...

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Πιο γρήγορα στρινγκς!

Δημοσίευση από Christianago » 15 Αύγ 2011 13:30

Για να εχει θεσει ο gvre την παραγωγη strings μεχρι 1mil θα εχει καποιο λογο, ισως περιορισμους σε μνημη, εγγραφη στο δισκο δεν ξερω γι αυτο ρωταω.
Οκ θα δοκιμασω να δω συμπεριφορα ευχαριστω.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πιο γρήγορα στρινγκς!

Δημοσίευση από dva_dev » 15 Αύγ 2011 14:05

Ισως, αλλά πιο πιθανό μου φαίνεται να έχει χρησιμοποιήσει το 1000000 επειδή κι εσύ στο πρώτο σου post έχεις
while ($i < 1000000){

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες