10.10算法题整理

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. 如果要用大模型搞一个问答系统,如果用户问了个问题,如何根据这个问题给他推荐其他他可能想问的问题?这个问题不在问题库中,也没有历史记录

要为问答系统推荐相关问题,可以使用以下方法:

  1. 语义相似度

    • 使用嵌入模型(如BERT)将用户问题转化为向量。
    • 计算该向量与其他问题的相似度,推荐相似度高的问题。
  2. 主题建模

    • 使用主题建模技术(如LDA)识别问题的主题。
    • 推荐属于相似主题的问题。
  3. 知识图谱

    • 构建领域相关的知识图谱。
    • 根据用户问题的实体和关系,推荐相关问题。
  4. 深度学习模型

    • 训练一个深度学习模型来预测用户可能感兴趣的问题。
    • 使用用户问题作为输入,生成推荐问题。
  5. 用户行为分析

    • 分析其他用户在相似情况下的行为。
    • 利用协同过滤推荐类似问题

协同过滤是一种方法,因为我肯定需要很快,那我就可以用相似度来计算,物品过滤是计算问题的相似度,用户协同过滤是计算用户的相似度

上下文的话,就是在输入promt的时候,要记得把之前的也输入进去

3. Tensorflow是怎么并行加快效率的?

Tensorflow首先是基于张量流动的,会构建计算图流,每个节点是一个操作。

调度原则:存在依赖关系的节点或子节点之间串行执行,不存在依赖关系的任务节点或者子图之间并行执行。

具体说,tensorflow使用任务队列来解决依赖关系。他会分成多个子图,一个子图包括多个串行任务,不同子图之间并行。这些子图会放在队列里,每次GPU有计算节点时,拉出来一个子图进行执行

如果是多机分布式训练的话,会不太一样,多机的数据也是分布的,数据并行的方式来训练,每个任务的数据不同,然后产生的梯度再一起更新

4. 推荐系统的优化目标

对于大部分电商都是看点击率,但是视频网站会看播放时长,youtubu播放时长建模的方式是用分类代替回归,本身预测播放时长是回归做的事,但是他把播放时长转换成正样本的权重,输出层利用加权逻辑回归来训练,预测出一个概率,概率就是对播放时长的预测,e的wx+b次方

5. 用卷积算二阶导数进行边缘检测

使用拉普拉斯算子来检测边缘:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值