第k大/小

leetcode 264
用最小堆解决,先把最小的丑数1入堆,每次出最小的x,把2x、3x、5x入堆,用哈希表去重。
leetcode 373
如果说要枚举所有点对,复杂度至少是O(n^2)起步。
想办法利用非递减顺序排列的性质:想象一个矩阵,纵坐标表示nums1下标,横坐标表示nums2下标,矩阵的值是数对和,这样一个矩阵有什么性质?显然每行都是非递减序列,每列也都是非递减序列,左上角(0, 0)点对和最小。
这样维护一个最小堆,先把第一列入堆,然后开始出堆,出堆元素坐标(i, j),每出堆一个元素对应入堆一个元素,入堆元素坐标有两个选择:(i + 1, j)和(i, ...

Read more

二叉树


二叉树

二叉搜索树

特点:一般用中序遍历 性质:中序遍历会得到一个单调递增的序列
leetcode 2476
中序遍历得到递增序列,对于每个询问做一次二分查找,时间复杂度O(n*logn)
leetcode 1932
需要观察出两个性质:
1、根节点是唯一的
2、合并方式是唯一的
1解释:一棵树能成为根节点,说明它没有出现在任何叶子节点上,无法“被”合并,如果不是唯一的,最后不可能合并成一棵树
2解释:一棵树如果能被多个叶子节点合并,假设最后能合并成一棵树,必然会有值相同的节点,不符合二叉搜索树的性质
理解上面两个性质,可以得到做法如下:
1、先找到最终树的根节点,这个根节点必然没有出现...

Read more

一文解决逆序数


计算逆序数有两种思路,一种是统计归并排序过程中交换的次数,另一种是根据rank逐个修改位置计数,当前rank的逆序数等于[rank + 1, n]的区间和
leetcode有一个弱模板题

class Solution:
    def reversePairs(self, record: List[int]) -> int:
        a = record
        if a == []:
            return 0
        global ans
        ans = 0
        def change(nums1, nums2):
    ...

Read more

mmpretrain增加回归任务组件


openmmlab介绍

openmmlab系列框架在2023年全面进入2.0时代,官方把自监督mmselfsup和分类mmclassification两个项目合并成mmpretrain。
openmmlab 2.0系列底层是有一些变化的,最大变化是从mmcv中抽离出功能更强大的mmengine。新的项目我还没仔细看过,目前简单理解就是轮子更多、用的更爽。
从mmpretrain这种更上层的应用项目看,基本没什么变化。底层封装的完善,上层应用调包,皆大欢喜。
如果熟悉openmmlab系列构建方式,diy上层应用是比较简单的。当然必须会用pytorch,mm是对pytorch的包装和扩展,...

Read more

nvidia TAO Toolkit使用总结


TAO表示train、adapt、optimize,TAO Toolkit是nvidia TAO框架的低代码版本,使用者无需专业的AI知识即可轻松构建高准确度的AI模型,在英伟达设备上做到训练部署一条龙。
流程参考快速上手tao toolkit
1、注册英伟达开发者账号,略。
2、去ngc官网ngc官网目录 右上角登陆,选用英伟达账号登陆。
3、回到ngc首页,右上角点卡自己的账号,点Setup,此时里面会出现Generate API Key选项卡,点击Get API Key进入。 4、点击Generate API Key,下方会生成专属Key值,这个Key需要记下来,以后都用这个K...

Read more

win10 python环境安装GPU版本opencv并简单使用


python环境:anaconda base环境,python版本3.9.7
CMake版本:3.24.1 cmake下载
opencv版本:4.6.0
vs版本:2019社区版
cuda Toolkit版本:11.3.1 cuda-toolkit下载,nvcc -V显示版本
cuDNN版本:8.2.1 cuDNN下载
英伟达cuda相关下载需要注册英伟达账号,vs2019和anaconda安装省略。
cuda toolkit和cuDNN版本需要对应,cuda11的试了几个应该都没问题,再老的不清楚能不能用。vs版本老一些没关系。
从仓库下载指定版本opencv,需要安装git(git...

Read more

django设置时区支持导致mysql查询报错


        django settings中设置USE_TZ = True,这是django官方推荐的方法,也是django5.0之后默认的设置。

        当启用对时区的支持时,Django 在数据库中以 UTC 为单位存储日期时间信息,在内部使用具有时区的日期时间对象,并在模板和表单中将其转换为最终用户的时区。
        如果用户居住在多个时区时,这会很方便。你要根据用户的时间来显示日期信息。
        即使你的网站只在一个时区提供服务,在你的数据库中用 UTC 存储数据仍然是一个好的做法。主要原因是夏令时(DST)。许多国家都有一个 DST 系统,春天...

Read more

yolov5 fp16动态输入转TensorRT部署到triton服务


目的:yolov5训练出的pytorch模型需要转换成tensorrt模型扔到triton里部署

需求:

        1、为加快推理速度,需要把fp32精度的模型转成fp16
        2、为支持yolov5动态padding和批推理,输入的batch和图片size需要是动态的

版本:

        yolov5——v6.1;
        triton docker镜像——22.08;
        TensorRT——8.4.2.4;
        cudnn——8.2.1.32;
        CUDA Toolkit——11.3.1

流程:

1、pt转onnx
...

Read more