• STATISTIQUES
  • Il y a eu un total de 4 membres et 6601 visiteurs sur le site dans les dernières 24h pour un total de 6 605 personnes!


    1 membre s'est inscrit dans les dernières 24h!


    Membres: 2 609
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [EN] wechall
    Pour les gens n'étant pas familiers avec les sites de challenges, un site de challenges est un site propos...
    Hacking
    [FR] PHP France
    Pour tout savoir sur le PHP, en français. Vous trouverez des tutoriels, des exemples, des astuces, toute la do...
    Hacking
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges
    [EN] SecurityFocus
    SecurityFocus a été conçu pour faciliter la discussion sur des sujets liés la sécu...
    Vulnérabilités

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Algorithmie] Cron et Calendrier
04-06-2013, 01h10
Message : #1
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
[Algorithmie] Cron et Calendrier
Salut,

Je suis face à un problème auquel je pense pas qu'il y ai de réponse, mais dans le doute, si quelque chose m'aurais échapper, je viens poser la question.

Considérons un ensemble d'évènements A et de longeur B, à chacun des termes est associé une règle similaire à ceux utilisé par cron.
Ainsi qu'un ensemble de jours de longueur C.

C = 365
B = [0,50000]

La problématique est la suivante : comment générer la totalité des match des évènements, et cela avec le moins de ressource CPU possible ?

Mon idée d'algo était de prendre un jour, et de parcourir les events et ainsi d'obtenir les évènements survenu ce jour là. Ca marche, mais c'est gourmand si on essaye de récuperer ceux de tout le mois par exemple...
Alors je pensais prendre le problème à l'envers, et parcourir les évènements pour obtenir les jours où la règle se vérifieras.
Problème résolu ? Pas sûr...
Si le nombre d'évènement est de l'ordre de la dizaine de milliers, cela prendrait énormement de ram pour toutes les possibilités existantes...

Dans le pire des cas, je passerais pas un système de cache, mais je trouvais la question intéressante.

Qu'en pensez-vous ?
+1 (0) -1 (0) Répondre
04-06-2013, 09h05
Message : #2
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [Algorithmie] Cron et Calendrier
j'ai rien compris, mais t'as l'air de maîtriser ton sujet
(donc la longueur B vaut [0,50000] c'est ca ?)
+1 (0) -1 (0) Répondre
04-06-2013, 10h09
Message : #3
Machin Hors ligne
Membre actif
*



Messages : 60
Sujets : 1
Points: 16
Inscription : Apr 2013
RE: [Algorithmie] Cron et Calendrier
Je ne suis pas bien sûrs d'avoir bien compris. Si je résume tu as un ensemble de tâche, type cron, qui se déclenche à intervalle régulier et durent une certains temps. Et tu cherche à trouver de manière systématique quand plusieurs sont déclenchées en même temps, c'est ça ?

Si tu as N événements, a vu de nez, tu va avoir N*(N-1)/2 combinaisons de 2 événements à tester. Je considère que c'est suffisant. Si tu test E1 avec E2 tu dois être capable de sortir une info type "ils se croisent tous les M jours pendant J heures décallé de H heures". Avec ce genre d'infos + tous les autres croisements de E2 tu peux affiner le modèle pour détecter les croisements à 3, 4....

Bref ça te fais une sacré combinaison. De ce fait, ce serait cool que tu nous précise un peu dans quel cadre tu va l'utiliser. Quel info t'interesse ? Comment va tu l'utiliser ?

Car si le but est "juste" de trouver quand ou si il y a plus de K croisements, on peut se permettre des simplifications. Si ton but est de tracer le nombre d'événements chaques jours aussi, etc.
+1 (0) -1 (0) Répondre
04-06-2013, 15h06 (Modification du message : 04-06-2013, 15h19 par InstinctHack.)
Message : #4
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Algorithmie] Cron et Calendrier
@gruik ouep, c'est ça

@Machin, non, non c'est plus simple que ça quand même Smile
L'application serais un agenda accesible via une api et je coderais une interface web par-dessus.
Je te passe les autres spécificités du truc (groups, block-life, etc...)

Voilà à quoi pourrais ressembler le fichier d'évènements public :
Code :
** 01 01 Jour de l'an
** 01 02 Basile
** 01 03 Geneviève
** 01 04 Odilon
** 01 05 Edouard
** 01 06 Mélaine
** 01 07 Raymond
** 01 08 Lucien
** 01 09 Alix
** 01 10 Guillaume
** 01 11 Pauline
** 01 12 Tatiana
** 01 13 Yvette
** 01 14 Nina
** 01 15 Rémi
.....
(Les étoiles ont la même signification que dans les règles cron.)
mais on peux imaginer des règles similaires à celles-ci :
Code :
** ** /7 dimanche

Et à partir de ça, je voudrais faire la listes des évènements de l'année toute entière, il peux donc y avoir plusieurs évènements par jour (jour == la plus petite unité de temps dans mon programme pour le moment)
Et c'est là que je suis pas sûr de la qualité de mon algo :
Citation :Mon idée d'algo était de prendre un jour, et de parcourir les events et ainsi d'obtenir les évènements survenu ce jour là. Ca marche, mais c'est gourmand si on essaye de récuperer ceux de tout le mois par exemple...
Alors je pensais prendre le problème à l'envers, et parcourir les évènements pour obtenir les jours où la règle se vérifieras.
+1 (0) -1 (0) Répondre
05-06-2013, 20h33 (Modification du message : 05-06-2013, 21h14 par b0fh.)
Message : #5
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [Algorithmie] Cron et Calendrier
Yop,

Soit n le nombre de dates dans la plage que tu veux sortir, et m le nombre d'évènements.

Tes deux algorithmes sont en O(nm), ce qui n'est pas fantastique.

Je te propose d'utiliser un tas, une structure de données qui permet d'obtenir en O(1) le plus petit élément d'une collection, et en O(log n) d'insérer un élément dans la collection.

Dans le tas, nous allons stocker une structure qui contient deux choses: la date de la première occurrence de l'évènement (qui sert de clef pour le tas), et le descripteur de l'évènement.

Pour générer dans l'ordre les évènements, il suffit alors de:
- prendre l'élément minimum du tas, qui sera le prochain évènement (O(1))
- émettre l'évènement sur la sortie (O(1))
- calculer la date suivante à laquelle l'évènement arrive (O(1))
- et réinsérer la structure dans le tas (O(log m))

On arrive donc à une complexité en O(m log m), ce qui est très nettement mieux pour un grand nombre d'évènements, et encore plus quand la plage d'évènements (n) est large !
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [Algorithmie] Les chans IRC InstinctHack 5 451 22-07-2013, 16h15
Dernier message: InstinctHack
  [Algorithmie] Pentominos InstinctHack 5 393 05-05-2013, 15h09
Dernier message: gruik
  [Algorithmie] Compression de donnée "binaire" dans un plan 2D InstinctHack 3 221 25-03-2013, 12h54
Dernier message: InstinctHack
  [Algorithmie] Gestion de l'espace dans un plan 2D InstinctHack 0 161 06-03-2013, 01h07
Dernier message: InstinctHack

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut