Soit donc pour un échantillon très court comme il peut être calculé en trouvant la statique du ème des différences par paires:
7 6 5 3 2 1
1 6 5 4 2 1
2 5 4 3 1
3 4 3 2
5 2 1
6 1
7
h = [n / 2] + 1 = 4
k = h (h-1) / 2 = 8
Ainsi
De toute évidence, pour les échantillons de grande taille, soit 80 000 enregistrements, nous avons besoin d'une très grande mémoire.
Est-il possible de calculer dans l'espace 1D au lieu de 2D?
Un lien vers la réponse ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf bien que je ne puisse pas le comprendre complètement.
Réponses:
Mise à jour: Le nœud du problème est que pour atteindre la complexité temporelleO(nlog(n)) , il faut dans l'ordre de stockage O(n) .
Non,O(nlog(n)) est la limite théorique inférieure de la complexité temporelle de (voir (1)) la sélection de l' élément kth parmi tous les n(n−1)2 possible|xi−xj|:1≤i<j≤n .
Vous pouvez obtenir de l' espaceO(1) , mais uniquement en vérifiant naïvement toutes les combinaisons de xi−xj dans le temps O(n2) .
La bonne nouvelle est que vous pouvez utiliser l' estimateur d'échelleτ (voir (2) et (3) pour une version améliorée et quelques comparaisons temporelles), implémenté dans la fonction
τ est un estimateur d'échelle en deux étapes (c'est-à-dire repondéré). Il a une efficacité gaussienne de 95%, un point de rupture de 50% et la complexité du temps O(n) et de l' espace O(1) (en plus, il peut facilement être mis en ligne, ce qui réduit de moitié les coûts de calcul lors d'une utilisation répétée - bien que vous devra fouiller dans le
scaleTau2()
duR
packagerobustbase
. L' estimateur univariéR
code pour implémenter cette option, c'est assez simple à faire).Modifier Pour utiliser ceci
R
(c'est gratuit et peut être téléchargé à partir d' ici )la source
(Very short answer) The text for commenting says
so here it goes: There is a paper about an online algorithm which seemingly runs quite well: Applying theQn Estimator Online.
EDIT
(by user user603). The algorithm linked to in this article is a moving window version version of theQn .
Given a large sample{xi}Ni=1 divided into time windows of width n<N , {xi}ti=t−n+1 we can apply the Qn to each time window yielding N−n+1 values of the Qn . Denote these values {Qin}N−n+1i=1
The algorithm cited here allows to obtainQin|Qi−1n at an average cost less than the worst case O(nlog(n)) needed to compute Qin from scratch.
This algorithm can however not be used to compute theQn of the full original sample {xi}Ni=1 . It also needs to maintain an buffer whose size can be as large as O(n2) (though it is often much smaller).
la source
this is my implement of Qn...
I was programming this in C and the result is this:
la source