10/10/2018, 11:04

Làm tính năng suggest friends như Facebook

Mình đang cần làm một tính năng mà về cơ bản thuật toán có yêu cầu như tính năng suggestions của Facebook, nên xin đc lấy tính năng này của FB làm ví dụ:

- A là bạn của B, C, D, E, F
- B, C, D là bạn của X
- E, F là bạn của Y
Mình cần tạo 1 danh sách "friend suggestions" cho A, mà trong trường hợp này sẽ bao gồm X và Y. Và X phải đứng trước Y trong danh sách này vì X có 3 người bạn chung với A, trong khi Y chỉ có 2 người bạn chung với A.

Vấn đề là mình phải tạo 1 danh sách suggestions cho bất kỳ người dùng nào đăng nhập vào hệ thống, và vì hệ thống có cả trăm nghìn user, mỗi user lại có thể có hàng chục người bạn (thực ra tính năng mình đang làm ko phải suggest user mà là suggest cái khác nên chỉ có tới hàng chục thôi), nên danh sách phải được tạo một cách hiệu quả. Vậy có bạn nào đã từng làm tính năng tương tự hay biết về vấn đề này mong đc chia sẻ kinh nghiệm.

P/s: mình ko bị giới hạn bởi công nghệ hay database cho hệ thống trên, nên các bạn cứ thoải mái đề xuất công nghệ phù hợp miễn là giải quyết đc vấn đề trên.

if you prefer English then plz answer my question at stackoverflow
chesterben viết 13:15 ngày 10/10/2018
Hô hô, nghe như bài toán của Zing Me đang cần giải quyết
bka viết 13:12 ngày 10/10/2018
Được gửi bởi VnVision
Mình đang cần làm một tính năng mà về cơ bản thuật toán có yêu cầu như tính năng suggestions của Facebook, nên xin đc lấy tính năng này của FB làm ví dụ:

- A là bạn của B, C, D, E, F
- B, C, D là bạn của X
- E, F là bạn của Y
Mình cần tạo 1 danh sách "friend suggestions" cho A, mà trong trường hợp này sẽ bao gồm X và Y. Và X phải đứng trước Y trong danh sách này vì X có 3 người bạn chung với A, trong khi Y chỉ có 2 người bạn chung với A.

Vấn đề là mình phải tạo 1 danh sách suggestions cho bất kỳ người dùng nào đăng nhập vào hệ thống, và vì hệ thống có cả trăm nghìn user, mỗi user lại có thể có hàng chục người bạn (thực ra tính năng mình đang làm ko phải suggest user mà là suggest cái khác nên chỉ có tới hàng chục thôi), nên danh sách phải được tạo một cách hiệu quả. Vậy có bạn nào đã từng làm tính năng tương tự hay biết về vấn đề này mong đc chia sẻ kinh nghiệm.

P/s: mình ko bị giới hạn bởi công nghệ hay database cho hệ thống trên, nên các bạn cứ thoải mái đề xuất công nghệ phù hợp miễn là giải quyết đc vấn đề trên.

if you prefer English then plz answer my question at stackoverflow
yêu cầu thì có thể giải quyết đc ,nhưng thấy yêu cầu củ chuối quá.

vì giả sử:

B,D, E, F có chung thằng N1
B,D Có chung thằng N2
D,F có chung thằng N3
.....

rất nhiều ....

Đề xuất là:

Lấy danh sách friends của từng thằng đút vào array.
rồi lấy những phần tử chung của các array này

ok.

để thuật toán đạt hiệu suất cao nhất cho cái này là một vấn đề bởi nếu như có cả trăm nghìn user hoặc mỗi user có hàng nghìn friends thì bốc kít. bala...bala
VnVision viết 13:17 ngày 10/10/2018
Được gửi bởi bka
yêu cầu thì có thể giải quyết đc ,nhưng thấy yêu cầu củ chuối quá.

vì giả sử:

B,D, E, F có chung thằng N1
B,D Có chung thằng N2
D,F có chung thằng N3
.....

rất nhiều ....

Đề xuất là:

Lấy danh sách friends của từng thằng đút vào array.
rồi lấy những phần tử chung của các array này

ok.

để thuật toán đạt hiệu suất cao nhất cho cái này là một vấn đề bởi nếu như có cả trăm nghìn user hoặc mỗi user có hàng nghìn friends thì bốc kít. bala...bala
Nếu hệ thống chỉ có vài nghìn thành viên thì mình đã không lên đây hỏi.

Vấn đề ko phải là làm thế nào tạo được danh sách này, mà là làm thế nào để tạo được danh sách này một cách hiệu quả.

Mình ko mong giải quyết vấn đề này bằng ngôn ngữ lập trình, mà chỉ hi vọng có một mô hình cấu trúc dữ liệu nào có thể giải quyết được vấn đề này.

Nếu bạn ko trả lời được sao còn tốn thời gian type?
bka viết 13:15 ngày 10/10/2018
Được gửi bởi VnVision
Nếu hệ thống chỉ có vài nghìn thành viên thì mình đã không lên đây hỏi.

Vấn đề ko phải là làm thế nào tạo được danh sách này, mà là làm thế nào để tạo được danh sách này một cách hiệu quả.

Mình ko mong giải quyết vấn đề này bằng ngôn ngữ lập trình, mà chỉ hi vọng có một mô hình cấu trúc dữ liệu nào có thể giải quyết được vấn đề này.

Nếu bạn ko trả lời được sao còn tốn thời gian type?
chưa thấy ông nào đi hỏi mà củ chuối như ông này

1. diễn đàn là nơi để mọi người trao đổi và học hỏi
2. tôi không nói là ông làm thế này thế kia
3. những gì tôi nêu ra là để chúng ta thấy đc những vấn đề khó khăn gặp phải trong tình huống này. nó cũng chẳng phải là vấn đề tôi có thể giải quyết đc hay không?

riêng câu hỏi trên của ông

P/s: mình ko bị giới hạn bởi công nghệ hay database cho hệ thống trên, nên các bạn cứ thoải mái đề xuất công nghệ phù hợp miễn là giải quyết đc vấn đề trên

và câu nói dưới này

Mình ko mong giải quyết vấn đề này bằng ngôn ngữ lập trình, mà chỉ hi vọng có một mô hình cấu trúc dữ liệu nào có thể giải quyết được vấn đề này
nó đã mâu thuẫn rồi

Nếu bạn ko trả lời được sao còn tốn thời gian type?
với thái độ này liệu có ai sẽ trả lời cho bạn không?

lỡ tham gia vào topic của bạn rồi nên có đôi lời vậy
VnVision viết 13:06 ngày 10/10/2018
Được gửi bởi bka
để thuật toán đạt hiệu suất cao nhất cho cái này là một vấn đề bởi nếu như có cả trăm nghìn user hoặc mỗi user có hàng nghìn friends thì bốc kít. bala...bala
Trong câu trả lời của bạn ở trên tự bạn đã nói rằng bạn không trả lời được câu hỏi rồi, vậy sao tốn thời gian gõ mấy dòng vô ích vào làm gì?


Được gửi bởi bka
chưa thấy ông nào đi hỏi mà củ chuối như ông này

1. diễn đàn là nơi để mọi người trao đổi và học hỏi
2. tôi không nói là ông làm thế này thế kia
3. những gì tôi nêu ra là để chúng ta thấy đc những vấn đề khó khăn gặp phải trong tình huống này. nó cũng chẳng phải là vấn đề tôi có thể giải quyết đc hay không?
Nếu bạn muốn nói đến cách giải quyết cho một vấn đề khác vấn đề của mình thì hãy mở một thread mới bàn luận. Đừng trả lời cho một vấn đề khác (hijacking thread), rồi nói vấn đề chính củ chuối, rằng với yêu cầu đó thì có mà bốc kít... bla bla


Được gửi bởi bka
riêng câu hỏi trên của ông
"P/s: mình ko bị giới hạn bởi công nghệ hay database cho hệ thống trên, nên các bạn cứ thoải mái đề xuất công nghệ phù hợp miễn là giải quyết đc vấn đề trên"

và câu nói dưới này
"Mình ko mong giải quyết vấn đề này bằng ngôn ngữ lập trình, mà chỉ hi vọng có một mô hình cấu trúc dữ liệu nào có thể giải quyết được vấn đề này"

nó đã mâu thuẫn rồi
Mâu thuẫn ở chỗ nào thế bạn? Mình nói mình không mong giải quyết vấn đề này bằng ngôn ngữ lập trình, tức là mình không tin/hi vọng là ngôn ngữ lập trình sẽ giải quyết được vấn đề này, nhưng vẫn sẵn sàng chấp nhận mọi giải pháp khả thi (dù là dựa vào ngôn ngữ lập trình hay dựa vào cấu trúc dữ liệu nào đó).


Được gửi bởi bka
với thái độ này liệu có ai sẽ trả lời cho bạn không?

lỡ tham gia vào topic của bạn rồi nên có đôi lời vậy
Cái mình muốn là giải pháp khả thi chứ ko phải mấy quả bom ng khác quăng vào.
kenphan19 viết 13:20 ngày 10/10/2018
Cách hỏi và cách cư xử của chủ thớt hơi bị căng, mình cần thì mình phải ân cần.
Thử tìm hiểu về trí tuệ nhân tạo data-mining xem. có ích đóa
VnVision viết 13:13 ngày 10/10/2018
Được gửi bởi kenphan19
Cách hỏi và cách cư xử của chủ thớt hơi bị căng, mình cần thì mình phải ân cần.
Thử tìm hiểu về trí tuệ nhân tạo data-mining xem. có ích đóa
Sorry nhưng mà trc h tớ hay nói thẳng
Thx clue của bạn, thử tìm hiểu về data mining & Structured data analysis nhưng vẫn chưa thấy đc giải pháp liên quan cụ thể nào, hoặc trình độ mình có hạn nên chưa tìm đc cách áp dụng.
Có vẻ đây là một vấn đề khó và ít người gặp phải nên hỏi ở mấy trang web cntt lớn trên thế giới đều chưa có answer.
ngoc_viet08 viết 13:10 ngày 10/10/2018
ờ ,chủ topic căng thẳng với cả người comment quá .nên tớ cũng chỉ vào nói chơi thôi chứ ko đụng zô kĩ thuật mắc công có chuyện tức để ngồi cãi cọ hehe.
BnoL viết 13:04 ngày 10/10/2018
@VnVision: bài toán suggestion nói riêng và AI nói chung luôn là yếu tố quyết định trong việc sống còn của các website mang tính chất social. Nói riêng về suggestion friend thì bài toán không đơn giản như bài toán của bạn là chỉ suggest phần mutual friend mà còn base trên nhiều yếu tố như: cùng nơi ở, cùng sở thích, cùng trường học/công ty... Bài toán sẽ phức tạp hơn rất nhiều. (vd 1 người có ít bạn chung hơn nhưng làm cùng công ty thì sẽ có priority cao hơn?)

Quay lại với câu hỏi của bạn:

1/ Bạn quan tâm đến vấn đề giải thuật của bài toán hay là phần scalability, performance của nó?
2/ Kinh nghiệm của bạn trong implement các hệ thống support nosql?
3/ Kiến thức và kinh nghiệm của bạn về các giải thuật AI (trí tuệ nhân tạo)?
4/ Hệ thống user của bạn gồm bao nhiêu người? Trung bình 1 người có bao nhiêu mối quan hệ (ước tính)?
5/ Chiều sâu của các mối quan hệ mà bạn biết được?
Bài liên quan
0