- 博客(54)
- 收藏
- 关注
原创 六、二叉树(2)
注意:+1不应该在节点node里面,应该在层里面,达到迭代退出条件是在中途遇到左右子树都为空。由于递归的本质就是用一个先进后出的容器,而迭代是用层序遍历,用先进先出的容器。递归要考虑二叉树用的哪种遍历,也就是先执行操作,遍历左子树,右子树的顺序。对称,和根节点无关,看左右子树,对左右子树递归,看左边是不是等于右边。递归参数、递归的终止条件、递归的单层逻辑(前序遍历 or 后序遍历)直接一个return返回头节点,其他节点都不会返回。104.二叉树的最大深度 (优先掌握递归)
2025-01-06 15:16:43
247
原创 10 二叉树的递归-相同、对称、平衡、右视图
递归,是考虑大问题的时候包含了重复的小问题(比如计算树的深度,也就是计算根节点所在树的高度,左节点、右节点所在树的高度以此类推,这是。呢是到达边界条件,终止后往上回归结果。)在计算的时候也需要从上往下,从大往小,上面的先进,后出,这样的数据结构,就是熟悉的。层序遍历,注意queue([root])传入的得是[root]可迭代的变量。递归函数是对某些变量进行修改,所以不需要有返回值,并且需要递归的初始条件。先右子树,再左子树。当递归深度大于答案长度时就记录。
2024-08-17 17:17:18
263
原创 六、二叉树(1)
面试传入二叉树需要自己定义数据结构 初始值赋值None确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑144.二叉树的前序遍历递归法,后面见迭代res = [] # 全局变量# 递归参数# 终止条件return# 入口dfs(root)return res145.二叉树的后序遍历,递归ans = []returndfs(root)return ans94.二叉树的中序遍历,递归左中右ans = []returndfs(root)return ans递归。
2024-08-17 15:42:09
731
原创 flask和fastapi和streamlit有什么区别
Flask 是一个轻量级的、易于使用的 Python Web 框架,非常适合构建简单的 Web 应用和 API。
2024-08-15 15:07:20
895
原创 五、栈与队列(2)
如果比maxnum小,有两种可能,在maxNum之前(排除,因为如果在之前,就会被pop),在之后(排除,之后的话不会有maxnum这个数比他早pop),所以只有。因为只有一种可能需要弹出,就是最大值在队首的时候,后面的都比他小,所以长度就等于滑动窗口的时候,弹出那个出窗口的值也就是当下的最大值。一个单调减的队列,头始终保存最大的,后面加进来的如果比前面的大,就把前面的都弹出,也就是说,这个数进来以后,之前的小一点的数都不可能成为最大值。单调队列 = 单调栈 + 滑动窗口(移除队首,左指针后移)
2024-08-05 15:08:27
881
原创 Linux+InternStudio(入门)
可以使用hostname查看开发机名称,使用uname -a查看开发机内核信息,使用lsb_release -a查看开发机版本信息,使用nvidia-smi查看GPU的信息,这些命令我们后面都会讲到,如果想要退出远程连接,输入两次exit就可以了。内网的资源没法在外网加载,比如开发机上面的网页demo在你的电脑上就看不到,所以通过端口映射,将外网链接映射到我们本地主机,我们使用本地连接访问,解决这个代理问题。好多好复杂,记不住也没关系,只要会用最常用的,其他参数啥的直接输入–help具体问题具体查询即可。
2024-07-31 17:37:33
997
原创 三、哈希表(2)
法三:defaultdict 是 collections 模块中的一个类,用于提供一个默认值。如果尝试访问不存在的键,它会自动创建该键并赋予默认值。if elif else才是完整3部分的结构,如果2个if +一个 else则类似满足条件则进去+一个2部分结构。剪枝:>target是不对的 因为负数+负数可以变小,当num[a]正数, target也是正数,才可以剪枝。a 那层循环要剪枝去重,b那层也要剪枝去重(这部分就是3数之和)时间复杂度: O(n^2)空间复杂度: O(n^2)空间复杂度: O(1)
2024-07-24 17:43:44
384
原创 四、字符串(1)
python中str和int都是不可变的类型,修改值之后其实得到的是新地址的新对象,而不是原来的对象,不像字典 列表 集合。用enumerate+字符串连接(反正是新开一个),直接得到对应位置s。元组虽然不可以通过下标修改,但是元素可以是可变变量,比如元素是列表。如果不是字符列表而是string,整体反转字符串。string超出下标边界也没有关系,列表就不行。步长其实可以是2k去循环,不用先算出来。不用额外空间 空间复杂度O(1)字符串类似数组,属于字符数组。
2024-07-24 15:52:32
719
原创 三、哈希表(1)
ord()返回单个字符对应的 Unicode 编码,用数组,索引可以用a~z的 ASCII 值,字符减去a,用两个数组可以优化成一个数组,先加计算s的,再减去t的,看是否等于0,看是否是空数组 生成器+all, 类似的还有any(),(是否有true) filter()(找出所有true的元素,常与lamba连用)找到了一个数,要看他的搭子有没有出现过,(在一些数中找一个数sum-num有没有)看有咩有出现过就用哈希表的方法。集合里,如果枚举查找,需要O(n),哈希表索引查找,只要O(1)。
2024-07-23 15:15:08
1118
原创 二、链表(2)
快指针速度是慢指针的两倍,环长为b,前面直的部分长度为a,当慢指针到达入环的节点时,(走了一段直a)快指针的路径是他的两倍,(在环里走了a),实。接下来他们的速度差还是两倍,快的在前面,慢的在后面,两个的距离越来越大,慢的看做静止,快的相对于慢的走b-a次就能追上慢的,此时慢的也走了b-a次。相交部分长度c,走完a,再走一段b-c,就到了相交的head,对于b,走完b再走一段a-c,也到了相交的head,两个走的长度都一样,如果==就返回,(这个可能是Head也可能没有相交就纯None。
2024-07-22 21:05:25
366
原创 二、链表(1)
需要3个变量,除了pre cur还有nxt保存当前的下一个(不然当前翻转完找不到下一个了)创建一个虚拟哨兵头节点,就不用考虑原本头结点要不要删除。
2024-07-22 00:19:34
208
原创 一、数组(2)
当右端点移动到的区间和大于等于t时,记录区间长度,更新ans和左端点,可是左端点可能不止移动一次,所以左端点是while。定义长为n列表,要[None]*n 列表推导式,每个元素是none,而不是 [ ]*n,这个是对空列表重复n次,最终还是空列表。遍历的边界不断在变,分为l , r, u, d, 当上面一行遍历填充好[l,r],u就下移,以此类推,循环的条件是cnt
2024-07-20 17:50:44
321
原创 异步编程 进程 线程 协程(补充
进程:适用于需要完全隔离的任务,适合多核CPU。线程:适用于需要并发执行的任务,适合I/O密集型任务。协程:适用于异步I/O操作,具有更高效的资源利用。异步编程:通过不阻塞的方式处理I/O操作,提高程序响应速度和资源利用率。不同的编程模型和机制有各自的优缺点,选择合适的方式取决于具体的应用场景和需求。
2024-07-18 15:07:43
352
原创 python装饰器
装饰器是一种强大的工具,能够在不修改原始函数代码的情况下添加或修改功能。它们在代码重用、功能增强和保持代码简洁方面非常有用。内置装饰器如@property和@dataclass提供了特定的功能,帮助开发者更方便地定义和使用类的方法和属性。
2024-07-12 16:30:01
429
原创 两种读取环境变量的方法:os.getenv()和os.environ[]区别
和都用于访问环境变量,但它们在使用上有一些区别。os.environ字典KeyErroros.getenv函数None。
2024-07-12 16:12:50
1134
原创 通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4(win版)
Azure OpenAI 是微软提供的一项云服务,旨在将 OpenAI 的先进人工智能模型与 Azure 的基础设施和服务相结合。通过 Azure OpenAI,开发者和企业可以访问 OpenAI 的各种模型,如 GPT-3、Codex 和 DALL-E 等,并将其集成到自己的应用程序和服务中。
2024-07-12 15:54:00
1666
原创 Agent Group复现
3、有且只能有一个top_level script,这个top_level script就是最开始运行的那个脚本(python somefile.py)2)from A import B,先为A创建modules对象,再解析A,从中寻找B,并填充到A的__dict__中。1)import A,先在sys.modules中搜索是否存在A,存在则不加载不存在则先喂A创建module,并加载。= glm即可以在变化的时候停下。温馨提示,token量很大,最好搞的免费额度的。如果没有gpt,可以用其他,例如智谱。
2024-07-11 18:12:45
486
原创 python 笔试面试八股(自用版~)
2猴子补丁(Monkey Patch)和装饰器(Decorator)都是 Python 中用于修改或增强已有对象功能的技术,但它们的用途、实现方式以及适用场景有所不同猴子补丁(Monkey Patch)猴子补丁是在运行时动态地修改类或模块的行为。通过直接修改类或模块的属性,可以添加、修改或删除现有的方法、属性等。猴子补丁的主要优点是可以在不修改原始代码的情况下调整行为,这在调试、测试和扩展第三方库时非常有用。然而,猴子补丁可能导致代码难以维护和理解,因为它改变了对象的内部实现。
2024-07-01 22:23:57
3401
原创 github上传代码
如果远程仓库在创建时勾选了readme,会创建一个main分支,里面有一个空的readme文件。在要上传的本地文件里右键,选择git bash here。
2024-06-25 19:23:57
470
原创 三、知识库搭建
词向量就是把词、句、文段通过向量的形式表示出语义信息。比如猫和狗在向量相似度上就比猫和苹果要近。词向量的优势是可以通过向量存储、相似度语义上的查询(而非关键词搜索);同时可以将多模态的信息映射成统一的向量形式。langchain内置了llama 千帆等emdedding但并没有包含所有大模型。
2024-06-24 22:58:28
1439
原创 二、使用LLM api开发应用
大模型是通过概率预测下一个词的生成来组织输出的,将数值的概率变成最终的字符就是采样策略(也就是选择哪个词作为下一个的输出)。当温度较低时,候选词的概率分布差异大,模型就更容易选择概率较大的值,输出就更稳定,反之,输出就更有创造性。如果任务包含不一定能满足的假设(条件),我们可以告诉模型先检查这些假设,如果不满足,则会指出并停止执行后续的完整流程。system prompt是对大模型基调的定性,在整场回会话任务中规范着模型的输出,一般就只有一个。可以看到,通过分隔符,命令是命令,待处理是待处理,不会混淆。
2024-06-22 21:40:24
812
原创 一、大模型LLM理论简介
大模型是大规模参数和复杂计算结构的模型,参数达到十亿乃至上千亿。当参数变多,模型就会出现涌现能力。GPT系列是OpenAI的大语言模型,采用Transformer模型的编码器,而BERT采用解码器。编码器和解码器的作用编码器:捕捉输入序列的语义信息,通过自注意力层和前馈神经网络层处理输入词汇,以捕捉词汇间的依赖关系和语义信息。解码器:根据编码器的输出和之前的输出生成目标序列,通过自注意力层和前馈神经网络层进行多轮预测,生成新的输出序列。BERT。
2024-06-19 21:28:46
1108
原创 3.1订阅智能体
订阅智能体能够在不同的时间里从外界收集信息并对信息总结。对于python工具要简单了解from bs4 import BeautifulSoup #导入 BeautifulSoup# 解析<body>"""# 查找所有的 <a> 标签# 查找 class 为 'title' 的元素# 查找 id 为 'link2' 的元素# 获取元素的文本内容# 获取元素的属性值# 遍历元素的子节点3、trigger() 函数负责定期生成需要发送的消息。
2024-05-28 16:50:18
976
原创 3、单智能体开发
在metagpt看来,agent = LLM+观察+思考+行动+记忆。一个agent启动后会观察获取信息,加入记忆,进行多轮思考和行动后(ReAct)后输出结果。
2024-05-26 22:52:23
356
原创 2、智能体及框架
231,现在的大模型由于是根据上一个词生成下一个词,还停留在直觉性的快思考;通过思维链、reAct、反思等让他具有一定的思考能力。metaGPT同将目标分解,分配给不同的专家完成,增加了可靠性,同时,对于需要交互协作的复杂任务,metaGPT也能解决。所以,可以理解成chatgpt只解决了聊天,而metagpt解决了协作。metagpt是多智能体协作框架,标准化操作,采用结构化流程。通过评审来解决模型幻觉(错误)。思维分为快思考和慢思考,快思考是直觉性思考,例如2。2,慢思考是逻辑性思考,例如1399。
2024-05-26 17:17:29
337
原创 1、metagpt准备工作(安装部署)
报错:error: RPC failed;报错:TypeError: dataclass() got an unexpected keyword argument ‘slots’报错:mportError: cannot import name ‘BaseModel’ from ‘pydantic’python=3.10 一开始装的10,尝试建一个3.9的库。我的路径在如下,而不是进入metagpt。尝试安装最新版本的metagpt。创建虚拟环境、激活、获取。
2024-05-26 16:48:57
623
原创 MetaGPT异步编程基础
是在同一个处理器上,任务交替运行(趁别的任务等待或者IO操作的时候先运行其他任务),某一时刻只有一个任务运行;当 I/O 操作完成时,该协程会被唤醒继续执行,适合于I/O密集型的应用程序,提高并发性能。在异步方法中,顺序调用不代表顺序执行,异步函数返回的是一个异步对象,不会直接执行,添加到asyncio.gather才被调用执行,并发执行这些协程。是在不同处理器上,任务同时运行来减少总时间,某一时刻可以有多个任务在不同的硬件上运行;异步能够同时发起多个网络请求,在等待其中 一个的时候,处理其他请求。
2024-05-25 20:23:09
392
原创 1.6 链表(数组模拟链表)
(这里不能用Idx作为截止条件,因为最增删之后,不知道idx是否还在,所以直接在链表中看,虚拟左端点0的右边就是起始条件,右端点1是终止条件)单链表只能看到后面一个,不能看到前面一个点,所以在o(n)时间复杂度内只能在第k个点后面插入,不能在第k个位置插入。在第2个点后面插入一个值为6的点:e[idx] = 6, ne[idx] = ne[2], ne[2] = idx。第1个点,值 e[1] = 3 指针 ne[1] = 2。第2个点,值 e[2] = 2 指针 ne[2] = 3。
2024-05-15 15:06:11
398
原创 1.5链表(环形链表)
快指针走2步,慢指针一次走一步,那相当于慢指针不动,快指针每次一步靠近慢指针,所以一定会相遇,如果快指针是走3步,相对于慢指针是走2步,可能就会错过。相遇之后,再来两个指针,一个从head出发,一个从相遇点出发,这两个指针一次一步,相遇时即是入口x的位置。次数小于链表长度,快慢指针相遇后,两个index指针走的次数也小于链表长度,总体为走的次数小于 2n。n大于等于1,x = n(y+z)-y = (n-1)(y+z)+z。时间复杂度: O(n),快慢指针相遇前,指针走的。空间复杂度: O(1)
2024-05-12 14:42:21
172
原创 1.3 链表(删除链表的倒数第 N 个结点)
两个指针fast和 slow,fast先走n步,之后两个一起走。直到fast到达最后一个结点,slow指向待删除的前一个结点。待删除slow->next.需要返回头结点,所以最好还是用虚拟头结点。(不用单独考虑头结点被删)时间复杂度: O(n)空间复杂度: O(1)
2024-05-11 22:25:55
153
2
原创 1.2 链表(两两交换链表中的节点)
1、头处和中间处举例发现操作不一样,增强普适性 2、头结点会变,为了最后直接head = dummyhead->next)力扣24 https://leetcode.cn/problems/swap-nodes-in-pairs/description/1 2 3 4变成2 1 4 3。下一轮,cur要指向第二个位置就是新的1的位置,才能处理下轮的4个,变成 2->1 1->3 dummyhead ->2。加入虚拟头结点之后就发现一共是4个结点之间的关系。时间复杂度:O(n)空间复杂度:O(1)
2024-05-11 22:03:00
197
2
原创 1.1链表(翻转-双指针|递归)
初始化两个指针 cur (head) pre(null),遍历结束的时候pre指向最后一个,cur指向Null,不需要再反转指向啦、tmp临时保存cur的下一个节点,不然先反转cur之后就找不到了。力扣206 https://leetcode.cn/problems/reverse-linked-list/直到有一个return.注意两处reverse传参,思路来自于双指针。时间复杂度: O(n)空间复杂度: O(1)
2024-05-11 20:51:16
241
2
原创 一、链表笔记
口诀:插入先连后再前,删除留前连后后;(插入的时候需要先连后面,把原本的下一个cur->next给newnode->next,再更新cur->next为newnode;删除的时候cur是删除位置index的前一个,删的是cur->next,这样才能把后后的cur->next->next连到cur上,最后delete完手动nullptr一下指针。遍历时得由一个新指针 cur,不然head遍历完找不回头了。链表节点定义。
2024-05-11 16:51:54
363
1
原创 第一模块-图像分类
在ROC曲线中,横轴是假正例率(False Positive Rate, FPR,分母是负样本总数),纵轴是真正例率(True Positive Rate, TPR分母是正样本总数)。Swin :W-MSA,把输入图像分成不同窗口,只在窗口里面计算,所以图片大小变大,计算量只是线性的,但是没有窗口与窗口间的联系,所以引入了滑动窗口(shifted window)精度是对于所有预测为正样本而言的,包括了实际是负样本,错误预测为正样本,召回是针对所有正样本而言的,包括了实际为正样本预测成负样本。
2023-04-28 13:35:35
231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人