Bazı tavsiyeleri burada bulabilirsiniz. N-boyutlu bir alanda eşleşen algoritmaya bakmaya başlamak için iyi bir yer bilen var mı? Örneğin, orada herhangi bir arkadaşlık sitesi 2 kişi ile eşleştirmek için bir çeşit algoritma kullanmalıdır. Okuduğum şey, bir karakterin özelliklerini, her bir karakteristik için bir nokta sistemi ile n boyutlu bir dizide haritalayabilmemizdir. Bir insanın tüm (mevcut) özelliklerine sahip olduktan sonra, bu kişiyi n boyutlu bir dizi içinde bir noktada temsil edebiliriz. Daha sonra, 2 kişiyi eşleştirmek için bu n-dim dizisinde 2 nokta arasındaki en kısa mesafeyi bulmak kadar basit olacaktır. Bu tür bir algoritmanın uygulanmasında herhangi bir referans var mı? Bu tür şeyleri yazmanın en iyi dili nedir?n boyutlu eşleştirme algoritması
cevap
Öncelikle en tanıdık olduğunuz dili seçin. Bunu işlemek için algoritmalar oldukça basittir ve herhangi bir modern dilde çalışmalıdır. (Bir dizi dizi ve potansiyel olarak bir matris kütüphanesi olduğu sürece, iyi olmalısınız.) Bunlardan birçoğunu C, C++ ve C# 'de uygulamıştım ama python, vb.net, vb.
Ne yapmaya çalıştığınıza bağlı olarak, birkaç seçenek vardır.
Bu söylenecek şey, yapmak istediğiniz hedeflere bağlıdır. En iyi eşleşmeyi bulmak istiyorsanız, basit mesafe hesaplamaları kullanabilirsiniz (örneğin: n boyutlu dizideki her boyut/özellik için karelerin toplamı), isteğe bağlı olarak her özellik uzaklığı ve en yakın noktayı kullanın.
İnsanları gruplandırmak istiyorsanız, clustering algorithms'a bakmak isteyeceksiniz. Böyle bir veri için, K-Means'in bir çeşit kümelenmesinin ya da bulanık c-araç kümelenmesinin en iyi şekilde çalışacağından şüphelenirim. Eğer bir kişi için en yakın eşleşmeyi bulmak istiyorsanız
Bentley & Shamos çok boyutlu bir böl ve fethet yöntemi yayınlanan: O'da Böl ve yönet süresini (N, N log): Divide-and-conquer in multidimensional space Proceedings of Bilgisayar teorisi üzerine sekizinci yıllık ACM sempozyumu 1976. this bir kopyasını alamıyorsanız, yardımcı olabilir. Ancak, örnek uygulamanız için en yakın komşusu bulmak en büyük sorun olarak görünmüyor - pek çok şey, girdileri boyutlara ayırıyor. Örneğin, bir boyut "hayvanları sever" ise, & kediyi seven ama atlara dayanamayan birine ne değeri veriyorsunuz? Atları seven, köpeklerin iyi olduğunu düşünen, kediler tarafından rahatsız edilen ve akvaryum balığı konusunda kararsız olan nedir?
Bahsettiğiniz işlem k = 1 ile k-en yakın komşu olarak bilinir. Benzer vektörleri bulmak için en sezgisel yaklaşımdır.
Nasıl çözümü aşağıdaki ilgili.
Kullanıcıların U1, U2, U3, U4, U5 olduğunu varsayalım. Nitelikler A1, A2, A3, A4, A5 ..... Am
Mağaza olan bu
A1
olarak - U1, U2, U3 ... A2 - U4, U6, U7 ... A3 -Profil özniteliği, dizin ve tüm kullanıcıları depolar. Şimdi, eğer yeni bir Kullanıcı gelirse, onun niteliklerine bakın ve bu nitelikler için ortak insanları bulun. Bu listelerde bir kişinin var olduğu zaman sayısı - yüksek sıralama.
Örneğinizle anlattığınız n boyutsal eşleşme değil, birden çok özelliğe sahip düğümlerin bipartite matching olmasıdır. (Bu mesafeyi iki kişi hesapladığında verilen bir işlevi sağlamanız gerekecektir). Bunun için çok verimli algoritmalar olmalı. N boyutsal eşleştirmede, düğümleri ikiden fazla kümeyle eşleştirmeyi denediniz (örneğinizde, insanları bedene, ruha ve müzik tercihlerine indirebileceğinizi, sonra bunları yeni kişiler haline getirebildiğinizi varsayalım. Daha sonra n-boyutlu eşleşme insanları birbirinden ayırın ve onları yeniden tasarlayın, böylece yeni kişiler gerçekten güzel çiftler yaparlar: D) İşte np-complete olan wikipedia article for 3-dimentional matching.
Ayrıca, başka biri tarafından da belirtildiği gibi, hedefiniz kişilerle eşleşmiyorsa, ancak uyumlu gruplar buluyorsa, bunları gruplara ayırmayı düşünmelisiniz. Bu, örn. Unsupervised Learning
- 1. n boyutlu vektör
- 2. Çok boyutlu dizi oluşturma algoritması
- 3. Python/Cython'da hızlı n boyutlu seyrek dizi
- 4. Eşleştirme 7.6
- 5. n-gramlar Solr ile yaklaşık eşleştirme nasıl kullanılır?
- 6. Düzenli ifade: "\ n" (newline) içeren bir dizeyle eşleştirme?
- 7. Eşleştirme
- 8. n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n bana 1 * 1 olmalıdır. bunun yerine 2 * 2
- 9. Etiketsiz eşleştirme düğümleri
- 10. O (n) 'de çalıştırılan dizi "maksimum fark" algoritması?
- 11. Randomize algoritması
- 12. JSLint'i mutlu ederken n boyutlu bir Dizi oluşturma?
- 13. Bir n n^^^^^^^^^^^^ (örneğin “aaabbbccc”) C#
- 14. Çok boyutlu dizilerin yerinde karıştırılması
- 15. Kalıp eşleştirme
- 16. Dize deseni eşleştirme sorunu
- 17. Eşleştirme (C++ 11)
- 18. Birleştirme Sıralama Algoritması?
- 19. IP ASN haritalama algoritması
- 20. seçim algoritması sorun
- 21. Asal Sayı Algoritması
- 22. tek geçişli kuvvet yönelimli grafik çizim algoritması
- 23. Uygulama Cannon algoritması
- 24. javascript bölünmüş ('\ n') ve değil ('\ n \ n')
- 25. Scala: sürgülü (N, N) ve gruplandırılmış (N)
- 26. A-star algoritması
- 27. Önemsiz dizge ayrıştırma algoritması
- 28. Maksimum dikdörtgen algoritması uygulaması
- 29. 2 boyutlu dizideki değerler
- 30. Eşleştirme ve silme ürün
İnsanları boyutlara göre eşleştirmenin iyi tarafı. Belki de boyut başına bir ölçek gibi bir şey, yani: kedilerden + köpeklerden hoşlanan ancak atlardan nefret eden biri + 1/+ 1/-1, yani: bu boyutta bir puan olarak +1, ya da bu satırlardaki bir şey olurdu. –
@danio: Tek bir "beğenme hayvanı" boyutunu her zaman ayrı "beğenme köpekleri", "kedilerden" vb. Boyutlara ayırabilirsiniz. –