2008-10-16 32 views
8

Chúng tôi có danh sách tự động điền khi bạn gửi email cho ai đó, tất cả đều tốt và tốt cho đến khi danh sách trở nên thực sự lớn, bạn cần phải nhập ngày càng nhiều địa chỉ để đến địa chỉ bạn muốn, Tôi đã nghĩ rằng một số logic nên được thêm vào để các kết quả tự động hoàn thành nên được sắp xếp theo một số chức năng của gần đây nhất liên lạc hoặc thường xuyên nhất liên lạc chứ không phải chỉ là thứ tự chữ cái.Thuật toán cho các địa chỉ liên hệ gần đây nhất/thường để tự động hoàn thành?

Điều tôi muốn biết là nếu có bất kỳ thuật toán tốt nào được biết cho loại tìm kiếm này hoặc nếu có ai có bất kỳ đề xuất nào.

Tôi đã suy nghĩ chỉ là một điều hệ thống điểm, với một cái gì đó giống như ngày là 5 điểm, ba ngày qua là 4 điểm, tuần trước là 3 điểm, tháng trước là 2 điểm và 6 tháng qua là 1 điểm. Sau đó, thường xuyên nhất, 25+ là 5 điểm, 15+ là 4, 10+ là 3, 5+ là 2, 2+ là 1. Không có logic thực nào ngoài những con số "cảm nhận" về đúng.

Ngoài các số được chọn tùy ý, có ai có bất kỳ đầu vào nào không? Các số khác cũng được chào đón nếu bạn có thể đưa ra lý do tại sao bạn cho rằng chúng tốt hơn so với số

Chỉnh sửa: Điều này chủ yếu là trong môi trường kinh doanh mà gần đây (để tạo từ) thường quan trọng như tần suất. Ngoài ra, qua một thời điểm nhất định có thực sự không có nhiều sự khác biệt giữa nói một người nào đó bạn đã nói chuyện với 80 lần so với nói 30 lần.

Trả lời

2

Loại điều này có vẻ tương tự như những gì được thực hiện bởi firefox khi gợi ý trang web bạn đang nhập là gì.

Đáng tiếc là tôi không biết chính xác có bao firefox hiện nó, hệ thống điểm dường như tốt là tốt, có thể bạn sẽ cần phải cân bằng số điểm của bạn :)

tôi muốn đi cho một cái gì đó tương tự như:

NoM = Số thư

(NoM được gửi đến X hôm nay) + 1/2 * (NoM được gửi tới X trong tuần trước)/7 + 1/3 * (NoM được gửi đến X trong tháng trước)/30

Địa chỉ liên hệ bạn không viết trong tháng trước (có thể thay đổi) sẽ có 0 po ints. Bạn có thể bắt đầu sắp xếp chúng cho NoM được gửi trong tổng số (vì nó nằm trong danh sách liên lạc :). Chúng sẽ được hiển thị sau địa chỉ liên hệ có các điểm> 0

Chỉ là một ý tưởng, dù sao, nó cũng mang lại tầm quan trọng khác nhau cho hầu hết các địa chỉ liên hệ được gửi qua thư.

+0

Heh, đoán đây là phiên bản được tính toán một chút của câu trả lời tôi vừa đăng – Davy8

+0

Nó chỉ là tổng của các dẫn xuất, mỗi số có trọng số riêng (hệ số 1, 1/2, 1/3 :) –

+0

Mỏ đã bị xóa vì bạn về cơ bản đã nói cùng một điều và sau đó một số – Davy8

1

Có thể đếm số lượng email được gửi đến từng địa chỉ. Sau đó:

ORDER BY EmailCount DESC, LastName, FirstName

Bằng cách đó, địa chỉ của bạn nhiều nhất thường được sử dụng đến trước, ngay cả khi họ chưa được sử dụng trong một vài ngày.

+0

Vâng, nhưng trong môi trường kinh doanh (tôi đoán là tôi nên chỉ định) có thể liên hệ với khách hàng/khách hàng trong vài ngày/tuần, giải quyết vấn đề hoặc giải quyết thỏa thuận/thỏa thuận và trong đó trường hợp gần đây nhất có liên quan nhiều hơn thường xuyên nhất. – Davy8

+0

Tuyệt đối, có rất nhiều người dùng tiềm năng - tôi có thể gửi email cho ông chủ từ xa của tôi hai tuần một lần, tôi có thể có một tài khoản bán hàng hoạt động trong một tháng, tôi có thể hỗ trợ khách hàng cần trợ giúp thêm sau khi xây dựng mới. Có lẽ một sự kết hợp của tần số và thời gian ngay lập tức? –

+0

"Có thể là sự kết hợp giữa tần suất và thời gian tức thời?" Vâng, đó là nhiều hơn những gì tôi đang tìm kiếm, kinda các chi tiết cụ thể về làm thế nào để cân bằng hai. – Davy8

3

Hãy xem danh sách Tự tổ chức.

Một cách nhanh chóng và dơ bẩn nhìn:

Move to Front Heuristic: Một danh sách liên kết, như vậy bất cứ khi nào một node được chọn, nó được di chuyển vào phía trước của danh sách.

Tần số Heuristic: Danh sách được liên kết, chẳng hạn như bất cứ khi nào nút được chọn, số tần số tăng lên, và sau đó nút được phát tán về phía trước danh sách, để truy cập thường xuyên nhất ở đầu danh sách.

Dường như việc di chuyển sang triển khai trước sẽ phù hợp nhất với nhu cầu của bạn.

EDIT: Khi một địa chỉ được chọn, hãy thêm một vào tần số của nó và di chuyển đến trước nhóm các nút có cùng trọng số (hoặc (trọng lượng div x) cho các nhóm courser). Tôi thấy lão hóa như là một vấn đề thực sự với việc thực hiện đề xuất của bạn, trong đó nó đòi hỏi phải tính toán trọng lượng trên mỗi và mọi mục. Một danh sách tự tổ chức là một cách tốt để đi, nhưng thuật toán cần một chút tinh chỉnh để làm những gì bạn muốn.

Chỉnh sửa thêm: Lão hóa đề cập đến thực tế là trọng số giảm theo thời gian, có nghĩa là bạn cần phải biết mỗi lần sử dụng địa chỉ. Có nghĩa là, bạn phải có toàn bộ lịch sử email có sẵn cho bạn khi bạn xây dựng danh sách của mình.

Vấn đề là chúng tôi muốn thực hiện các phép tính (ngoài tìm kiếm) trên một nút chỉ khi nó thực sự được truy cập - Điều này mang lại cho chúng tôi hiệu suất thống kê tốt.

+0

Thú vị thực hiện, tuy nhiên điều này vẫn sẽ dẫn đến hoặc là gần đây nhất ở phía trước hoặc thường xuyên nhất ở phía trước, không phải là một sự kết hợp của cả hai. – Davy8

+0

Tôi không hoàn toàn chắc chắn ý bạn là gì khi lão hóa. Vấn đề của tôi với giải pháp này là nó đặt trọng tâm hơn vào tần số thay vì (nhiều hơn hoặc ít hơn) bằng nhau trên cả hai. – Davy8

+0

Một ví dụ về nơi mà có thể là một vấn đề là nói rằng bạn nói chuyện với khách hàng qua lại rất nhiều (có một vấn đề thực sự lớn để giải quyết) nhưng bây giờ đã xong, bạn không cần phải liên lạc với họ nữa thời gian. Họ vẫn còn ở phía trước vì tất cả các tần số và sẽ được trong một thời gian dài. – Davy8

2

Nếu bạn muốn nhận được điên, đánh dấu hầu hết các email 'hoạt động' trong một trong nhiều cách:

  • truy cập cuối
  • Tần suất sử dụng
  • Liên hệ với chờ bán
  • sếp trực tiếp
  • Etc

Sau đó, trình bày email hiện hoạt s ở đầu danh sách. Chú ý đến "nhóm" mà người dùng của bạn sử dụng nhiều nhất. Chuyển sang chiến lược sắp xếp đó độc quyền sau khi thu thập đủ dữ liệu.

Đó là rất nhiều công việc nhưng loại niềm vui ...

+0

Heh, phức tạp hơn tôi có thể đang tìm kiếm, nhưng có thể hữu ích cho người khác, vì vậy +1 – Davy8

1

Tôi thích ý tưởng về một hệ thống điểm-based, với các điểm để sử dụng gần đây, tần suất sử dụng, và các yếu tố tiềm năng khác (thích danh bạ trong miền địa phương?).

Tôi đã làm việc trên một vài hệ thống như thế này và không phải "sử dụng gần đây nhất" cũng như "thường được sử dụng phổ biến nhất" hoạt động rất tốt. "Gần đây nhất" có thể là một nỗi đau thực sự nếu bạn vô tình mis-loại một cái gì đó một lần. Ngoài ra, "được sử dụng nhiều nhất" không phát triển nhiều theo thời gian, nếu bạn có nhiều liên hệ với ai đó vào năm ngoái, nhưng bây giờ công việc của bạn đã thay đổi, ví dụ.

Khi bạn có tập hợp các phép đo mà bạn muốn sử dụng, bạn có thể tạo một phép apoplication tương tác để kiểm tra các trọng số khác nhau và xem cái nào mang lại kết quả tốt nhất cho một số dữ liệu mẫu.

0

This paper mô tả chính sách gỡ bỏ bộ nhớ cache của một tham số duy nhất bao gồm các chính sách ít được sử dụng gần đây nhất và ít được sử dụng nhất là trường hợp đặc biệt.

Tham số, lambda, nằm trong khoảng từ 0 đến 1. Khi lambda bằng 0, nó hoạt động giống như bộ đệm LFU, khi lambda là 1 nó hoạt động giống như bộ nhớ cache LRU. Trong khoảng từ 0 đến 1, nó kết hợp cả thông tin về tần số và tần số một cách tự nhiên.

0

Bất chấp câu trả lời đã được chọn, tôi muốn gửi cách tiếp cận để xem xét và phản hồi.

Tôi sẽ tính toán tần suất bằng cách tăng bộ đếm mỗi lần sử dụng, nhưng bởi một số giá trị lớn hơn một, như 10 (Để thêm độ chính xác cho điểm thứ hai).

Tôi sẽ tính đến lần truy cập gần đây bằng cách nhân tất cả quầy theo khoảng thời gian đều đặn (ví dụ: 24 giờ) bởi một số người giảm giá (ví dụ: 0.9).

Mỗi lần sử dụng:

UPDATE `addresslist` SET `favor` = `favor` + 10 WHERE `address` = '[email protected]' 

Mỗi khoảng thời gian:

UPDATE `addresslist` SET `favor` = FLOOR(`favor` * 0.9) 

Bằng cách này, tôi sụp đổ cả tần số và số lần truy cập vào một lĩnh vực, tránh sự cần thiết để giữ một lịch sử chi tiết để lấy {ngày cuối cùng , tuần trước, tháng trước} và giữ nguyên số nguyên (chủ yếu).

Tăng và giảm sẽ phải được điều chỉnh theo sở thích, tất nhiên.

Các vấn đề liên quan