注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
平台: Karat
面试官: 南非外包小哥
15 min - Design Social Mediag的逻辑,没有特别的算法- Write a function that takes the logs as input, builds the transition graph and returns it as an adjacency list with probabilities. Add __START__ and __END__ states.
- Specifically, for each resource, we want to compute a list of every possible next step taken by any user, together with the corresponding probabilities. The list of resources should include __START__ but not __END__, since by definition __END__ is a terminal state.
- Expected output for logs1:
- transition_graph(logs1) # =>
- {
- '__START__': {'resource_1': 0.25, 'resource_2': 0.125, 'resource_3': 0.5, 'resource_6': 0.125},
- 'resource_1': {'resource_6': 0.333, '__END__': 0.667},
- 'resource_2': {'__END__': 1.0},
- 'resource_3': {'__END__': 0.4, 'resource_1': 0.2, 'resource_2': 0.2, 'resource_3': 0.2},
- 'resource_4': {'__END__': 1.0},
- 'resource_5': {'resource_4': 1.0},
- 'resource_6': {'__END__': 0.5, 'resource_5': 0.5}
- }
- For example, of 8 total users, 4 users have resource_3 as a first visit (user_1, user_2, user_3, user_5), 2 users have resource_1 as a first visit (user_6, user_22), 1 user has resource_2 as a first visit (user_7), and 1 user has resource_6 (user_8) so the possible next steps for __START__ are resource_3 with probability 4/8, resource_1 with probability 2/8, and resource_2 and resource_6 with probability 1/8.
- These are the resource paths per user for the first logs example, ordered by access time:
- {
- 'user_1': ['resource_3', 'resource_3', 'resource_1'], r
- 'user_2': ['resource_3', 'resource_2'],
- 'user_3': ['resource_3'],
- 'user_5': ['resource_3'],
- 'user_6': ['resource_1', 'resource_6', 'resource_5', 'resource_4'],
- 'user_7': ['resource_2'],
- 'user_8': ['resource_6'],
- 'user_22': ['resource_1'],
- }
- Expected output for logs2:
- transition_graph(logs2) # =>
- {
- '__START__': {'resource_3': 1.0},
- 'resource_3': {'resource_3: 0.857, '__END__': 0.143}
- }
- Expected output for logs3:
- transition_graph(logs3) # =>
- {
- '__START__': {'resource_5': 1.0},
- 'resource_5': {'__END__': 1.0}
- }
- Complexity analysis variables:
- n: number of logs in the input
- sample_input:
- logs = {
- { "6500", "user_1", "resource_1" },
- { "4200", "user_2", "resource_2" },
- { "7800", "user_22", "resource_1" },
- { "980", "user_7", "resource_2" },
- { "23", "user_6", "resource_1" },
- { "6000", "user_1", "resource_3" },
- { "345", "user_6", "resource_5" },
- { "3200", "user_2", "resource_3" },
- { "2", "user_1", "resource_3" },
- { "201", "user_6", "resource_6" },
- { "998", "user_8", "resource_6" },
- { "5621", "user_3", "resource_3" },
- { "10212", "user_6", "resource_4" },
- { "29899", "user_5", "resource_3" }
- }
- sample_output of above input:
- __START__: [["resource_3": 0.5], ["resource_2": 0.125], ["resource_1": 0.25], ["resource_6": 0.125]]
- resource_1: [["__END__": 0.6666667], ["resource_6": 0.33333334]]
- resource_2: [["__END__": 1.0]]
- resource_3: [["__END__": 0.4], ["resource_3": 0.2], ["resource_2": 0.2], ["resource_1": 0.2]]
- resource_4: [["__END__": 1.0]]
- resource_5: [["resource_4": 1.0]]
- resource_6: [["__END__": 0.5], ["resource_5": 0.5]]
复制代码 |