2010-07-02 26 views
6

Ölçekler için bir cevap arıyorum, ancak belirli bir amacım için, 48. bir boyut vektörüne sahibim. Bu, 0 ile 255 arasında bir 48 tam sayı dizisi olarak gösterilebilir.Belirli bir vektöre sözlük vektörü için hızlı arama. Yüksek boyutlar

Bu vektörlerin büyük bir sözlüğüne sahibim, bunların yaklaşık 25 bini.

Veritabanımda bulunabilen veya bulunmayan bir vektöre sahip olmalı ve veritabanından hangi vektörün en yakın olduğunu hemen bulmam gerekiyor. En yakın, geleneksel mesafe formülü anlamında.

Kodum python'da sona erecek ancak bu genel bir sorudur.

Brute Force çok yavaş. Yakın bir sözlük hız aramasına ihtiyacım var. Bir fikri olan var mı?

cevap

4

Başka bir teknik mevkiinde duyarlı karma olduğunu. Yaklaşık en yakın komşu olan bir vektörü iade etmekten memnunsanız, daha hızlı çözümler vardır. Buraya bakın (http://www.cs.umd.edu/~mount/ANN/)

+0

LSH şu ana kadar benim için en iyi görünüyor. http://www.mit.edu/~andoni/LSH/ harika bir kaynak oldu. Algoritma hakkında 2006 tarihli çalışma en yararlı oldu. –

8

Nearest neighbour search gerçekleştirebileceğiniz bir kd-tree uygulanmasını öneririm. K boyutlarında N noktaları için en kötü durum arama süresi O(k.N^(1-1/k)) olup, bu nedenle N

'da alt çizgisel olarak ölçeklenmelidir Eğer zamanım varsa bu cevaba geri döneceğim ve Wikipedia'nın daha az bir açıklamasını sağlayacağım.

Python'da çalıştığınız için, bu Scipy yemek kitabı girişinin kdtrees numaralı telefondan yardım alması gerekir. Eğer en yakın komşuları -exact- gerekip gerekmediğini sorudan http://en.wikipedia.org/wiki/Locality_sensitive_hashing

Onun belli değil: yararlı olacaktır

+0

Etkili bir şekilde oldukça ters, ancak en azından işaretçi yerinde görünüyor! Bu btw için –

+0

teşekkürler. Bunu çok inceledim ve kdtrees oldukça havalı ve çok şey öğrendim. Aşağıda belirtilen LSH yöntemi benim problemimin yüksek boyutsallığı nedeniyle en uygun çözüm gibi görünüyor. –

İlgili konular