Xây mạng lưới các chuyên gia

Tìm kiếm các mối quan hệ của các chuyên gia trong mạng lưới

Hong Linh Dang
Coding For Fun
2 min readJul 16, 2021

--

Ví dụ về mạng chuyên gia

Chúng ta sẽ đến với một bài toán về mạng lưới các chuyên gia, nó khá thực tế trong cuộc sống, các câu hỏi sẽ được tôi đưa ra và giải quyết dần. Giả sử chúng ta có một tập dữ liệu về các chuyên gia bao gồm: {id, tên} như sau:

Mối quan hệ giữa các chuyên gia…

Các chuyên gia thể hiện mối quan hệ với nhau theo mảng friendship_pairs như sau:

friendship_pairs = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5, 6), (5, 7), (6, 8), (7, 8), (8, 9)]

Ở đây các cặp diễn tả mối quan hệ giữa các chuyên gia, ví dụ cặp (0, 1) thể hiện Bill Gates và Mark Zuckerberg có biết nhau (ở đây tôi giả sử thôi nhé).

Hãy thử tìm kiếm các mối quan hệ của Zuckerberg xem…?

Với việc tổ chức dữ liệu với cấu trúc như hiện tại, để tìm kiếm mối quan hệ của Zuckerberg, chúng ta bắt buộc phải duyệt tất cả các phần tử của mảng để tìm kiếm các phần tử có bao gồm giá trị id=1 (đại diện cho Zuckerberg). Đó thật sự là một công việc quá mất thời gian và tẻ nhạt với những người thông thái và quý trọng thời gian.

Tư duy theo cách khác xem…?

Lưu trữ danh sách mối quan hệ dưới dạng từ điển (tìm kiếm trong từ điển là cực kỳ nhanh), trong đó key là id của chuyên gia và giá trị là danh sách các id của bạn chuyên gia. Chúng ta phải khởi tạo giá trị cho mảng này và chỉ phải làm điều đó duy nhất một lần.

Số lượng mối quan hệ của một chuyên gia…

Quá dễ dàng để làm việc này đơn giản chỉ cần đếm số phần tử trong danh sách bạn của chuyên gia đó, cách tư duy này giống hệt cách con người nghĩ.

Số kết nối trung bình trong mạng chuyên gia…

Muốn tính số kết nối trung bình trọng mạng chuyên gia chúng ta lấy tổng số kết nối chia cho tổng số user.

Ai là người có nhiều mối quan hệ nhất?

Người có nhiều kết nối nhất là người có nhiều mối quan hệ nhất.

Phần tiếp theo chúng ta sẽ giải quyết vấn đề đưa ra những gợi ý cho các chuyên gia những người bạn họ có thể biết.

Bạn có thể tải đầy đủ mã nguồn ở GitHub, tất cả là miễn phí!.

Cảm ơn bạn đã đọc bài viết!

--

--