1. 拓扑排序
主要是建立一个graph(unordered map)用来存放依赖关系(注意,是存放每个点作为前置点连接的后续任务),然后建立入度数组ingree,存放每个点的入度。如果一个点没有前置,说明它的入度为0
然后先把所有入度为0的数组入队列,也就是bfs。取出每个队首,找到它后续任务,让所有后续任务的入度--,如果该任务入度为0,就入队列。
import sys
# If you need to import additional packages or classes, please import here.
import queue
def func():
graph = dict()
ru = [-1]
lines = sys.stdin.readlines()
N = int(lines[0].strip())
times_b = lines[1].strip().split(' ')
times = [-1]
for i in range(N):
times.append(int(times_b[i]))
idx = 1
for line in lines[2:N + 2]:
if (line.strip() != "-1"):
nums = line.strip().split(' ')
# print(nums)
for i in range(len(nums)):
nums[i] = int(nums[i])
if nums[i] not in graph:
graph[nums[i]] = [idx]
else:
graph[nums[i]].append(idx)
ru.append(len(nums))
else:
ru.append(0)
idx += 1
# print(graph)
res = 0
que = queue.Queue()
for i in range(1, len(ru)):
if ru[i] == 0:
que.put(i)
maxtime = [0] * (N + 1)
while not que.empty():
cur = que.get()
# print(cur)
res = max(res, times[cur])
if cur not in graph:
continue
for nextt in graph[cur]:
ru[nextt] -= 1
# 更新时间要放在入度前面
times[nextt] = times[cur] + times[nextt]
if ru[nextt] == 0:
# print(nextt)
que.put(nextt)
# print(nextt)
res = max(res, times[cur] + times[nextt])
# maxtime[nextt] = maxtime[cur] + times[nextt]
print(res)
if __name__ == "__main__":
func()
2. 如果要用大模型搞一个问答系统,如果用户问了个问题,如何根据这个问题给他推荐其他他可能想问的问题?这个问题不在问题库中,也没有历史记录
要为问答系统推荐相关问题,可以使用以下方法:
-
语义相似度:
- 使用嵌入模型(如BERT)将用户问题转化为向量。
- 计算该向量与其他问题的相似度,推荐相似度高的问题。
-
主题建模:
- 使用主题建模技术(如LDA)识别问题的主题。
- 推荐属于相似主题的问题。
-
知识图谱:
- 构建领域相关的知识图谱。
- 根据用户问题的实体和关系,推荐相关问题。
-
深度学习模型:
- 训练一个深度学习模型来预测用户可能感兴趣的问题。
- 使用用户问题作为输入,生成推荐问题。
-
用户行为分析:
- 分析其他用户在相似情况下的行为。
- 利用协同过滤推荐类似问题
协同过滤是一种方法,因为我肯定需要很快,那我就可以用相似度来计算,物品过滤是计算问题的相似度,用户协同过滤是计算用户的相似度
上下文的话,就是在输入promt的时候,要记得把之前的也输入进去
3. Tensorflow是怎么并行加快效率的?
Tensorflow首先是基于张量流动的,会构建计算图流,每个节点是一个操作。
调度原则:存在依赖关系的节点或子节点之间串行执行,不存在依赖关系的任务节点或者子图之间并行执行。
具体说,tensorflow使用任务队列来解决依赖关系。他会分成多个子图,一个子图包括多个串行任务,不同子图之间并行。这些子图会放在队列里,每次GPU有计算节点时,拉出来一个子图进行执行
如果是多机分布式训练的话,会不太一样,多机的数据也是分布的,数据并行的方式来训练,每个任务的数据不同,然后产生的梯度再一起更新
4. 推荐系统的优化目标
对于大部分电商都是看点击率,但是视频网站会看播放时长,youtubu播放时长建模的方式是用分类代替回归,本身预测播放时长是回归做的事,但是他把播放时长转换成正样本的权重,输出层利用加权逻辑回归来训练,预测出一个概率,概率就是对播放时长的预测,e的wx+b次方
5. 用卷积算二阶导数进行边缘检测
使用拉普拉斯算子来检测边缘: