SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
PermissiveResearch
par Jérôme Morissard
@leverdeterre
leverdeterre
Cocoheads / Paris - Meetup du 09/05/2015
PermissiveResearch
Contexte :
• Application de GED (application de gestion de documents),
• Recherche dans PDF,
• Recherche dans des objets CoreData,
• Recherche dans les plist.
Pourquoi ce composant ?
PermissiveResearch
Les problèmes :
• Recherche dans un objet, il faut une ou plusieurs propriétés.
• Recherche dans des objets hétérogènes, il faut prévoir des
méthodes de recherche spécifiques par type d’objet.
• La recherche est exacte, mais ne pourrait - elle pas m’autoriser
quelques fautes ?
• Taille du clavier, sur iPhone j’ai parfois l’impression d’avoir des gros
doigts.
Pourquoi ce composant ?
PermissiveResearch
PermissiveResearch
Un algorithme biologique
http://fr.wikipedia.org/wiki/Algorithme_de_Smith-Waterman
PermissiveResearch
Un algorithme biologique
http://fr.wikipedia.org/wiki/Algorithme_de_Smith-Waterman
• Dans les années 80, la grande question était de
classer les être vivants,
• Comment les classer ?
• En comparant leurs séquence d’ADN.
PermissiveResearch
Un algorithme de Smith et Waterman (1981)
http://fr.wikipedia.org/wiki/Algorithme_de_Smith-Waterman
L'algorithme de Smith-Waterman est un algorithme optimal
qui donne un alignement correspondant au meilleur score
possible de correspondance entre les acides aminés ou les
nucléotides des deux séquences.
Le calcul de ce score repose sur l'utilisation de matrices de
similarité ou matrices de substitution.
PermissiveResearch
Un algorithme de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
Séquence 1 : FATCATY
Séquence 2 : CATFAST
Alignement 1
Séquence 1 : FATCA-TY
Séquence 2 : CATFAST
Alignement 2
Séquence 1 : FATCATY———
Séquence 2 : ———CATFAST
Alignement 3
Thréonine
Sérine
Tyrosine
Phénylalanine
Pour trouver le meilleur alignement, il faut trouver le
bien comprendre ce que l’on peut substituer.
PermissiveResearch
Smith et Waterman : Matrice de similarité (nucléotide)
Alignement nucléotides
• alphabet : 4 lettres
PermissiveResearch
Smith et Waterman : Matrice de similarité (acidé aminé)
Alignement acide aminés
• alphabet : 22 lettres
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C
A
G
S
F
A
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A
G
S
F
A
Pour chaque cellule, on maximise le score
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G
S
F
A
Pour chaque cellule, on maximise le score
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G
S
F
A
Pour chaque cellule, on maximise le score
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G
S
F
A
Pour chaque cellule, on maximise le score
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G
S
F
A
Pour chaque cellule, on maximise le score
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G 0 0 2 2 12 16 10
S
F
A
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G 0 0 2 2 12 16 10
S 0 0 5 1 6 17 14
F
A
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G 0 0 2 2 12 16 10
S 0 0 5 1 6 17 14
F 6 0 0 3 0 11 20
A
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G 0 0 2 2 12 16 10
S 0 0 5 1 6 17 14
F 6 0 0 3 0 11 20
A 0 10 4 0 7 5 14
PermissiveResearch
Un algorithm de Smith et Waterman (1981)
Séquence 1 : FATCATY
Séquence 2 : CATFAST
F A T C A T Y
T 0 0 5 0 0 5 0
C 0 0 0 14 8 2 3
A 0 4 0 8 18 12 6
G 0 0 2 2 12 16 10
S 0 0 5 1 6 17 14
F 6 0 0 3 0 11 20
A 0 10 4 0 7 5 14
PermissiveResearch
Performance (iPhone 4)
Données NSPredicate Permissive Research
5272 villes 250ms 1s
52720 villes 2,5s 8s
PermissiveResearch Vs NSPredicate : l’algorithme de
PermissiveResearch à une plus grande complexité
algorithmique.
PermissiveResearch
Performance (iPhone 4)
Données NSPredicate Permissive Research
5272 villes 250ms 1s
52720 villes 2,5s 8s
Les 2 algorithmes ont une complexité temps
~linéaire : f(nombre de données)
PermissiveResearch
Optimisation : Commençons par une heuristique
Une heuristique est une méthode de calcul qui fournit
rapidement une solution réalisable, pas nécessairement
optimale ou exacte, pour un problème d'optimisation
difficile.
http://fr.wikipedia.org/wiki/Heuristique_(mathématiques)
PermissiveResearch
Optimisation : Heuristique
Données Segments
Découpage de nos données en segments, c’est un
paramètre configurable (ici, une longueur de 3)
PermissiveResearch
Optimisation : Heuristique
Segments Données
Pour un segment, on sait retrouver les données associées
PermissiveResearch
Optimisation : Heuristique
autre station
Ma cherche
aut
utr
tre
sta
tat
tion
On recherche les objets avec un maximum d’étiquettes
PermissiveResearch
Optimisation : Heuristique
SCNF
Ma cherche
SCN
CNF
On garde les X meilleurs
x
x
x
x
x
x
x
PermissiveResearch
Optimisation : Heuristique
Données NSPredicate
Permissive Research
(heuristique)
5272 villes 250ms 30ms
52720 villes 2,5s 0,6s
C’est rapide … mais : c’est moins précis, la
complexité espace augmente (les segments)
et on ne tolère d’erreur.
PermissiveResearch
Les problèmes :
• Recherche dans un objet, il faut une ou plusieurs propriétés,
• Recherche dans des objets hétérogènes, il faut prévoir des
méthodes de recherche spécifiques par type d’objet,
• La recherche est exacte, mais ne pourrait - elle pas m’autoriser
quelques fautes ?
• Taille du clavier, sur iPhone j’ai parfois l’impression d’avoir des gros
doigts.
Pourquoi ce composant ?
PermissiveResearch
Optimisation : Heurexacte (Heuristique + Exacte)
Données
Heuristique rapide, on supprime 90% des données.
On garde les objets qui ont un maximum fragments communs.
Sous-ensemble de données
On analyse finement les objets restants
Sous-sous-ensemble de données
Retour des résultats
PermissiveResearch
Optimisation : Heuristique
Données NSPredicate
Permissive
Research
(heuristique)
Permissive
Research
(heurexact)
5272 villes 250ms 30ms 300ms
52720
villes
2,5s 0,6s 2,4s
On conserve la performance, on a une bonne
approximation, et on autorise des erreurs :)
PermissiveResearch
Les améliorations à faire : matrice custom
Il faudrait faire une matrice sur pour gérer nos
pondérer nos erreurs.
PermissiveResearch
Des questions ?

Más contenido relacionado

Más de CocoaHeads France

Más de CocoaHeads France (20)

My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 
BitTorrent on iOS
BitTorrent on iOSBitTorrent on iOS
BitTorrent on iOS
 
CloudKit as a backend
CloudKit as a backendCloudKit as a backend
CloudKit as a backend
 
Comment faire de HLS votre solution vidéo préférée ?
Comment faire de HLS votre solution vidéo préférée ?Comment faire de HLS votre solution vidéo préférée ?
Comment faire de HLS votre solution vidéo préférée ?
 

PermissiveResearch par Jérôme Morissard