写点什么

ARTS——week 3

用户头像
steve_lee
关注
发布于: 2021 年 03 月 23 日
ARTS——week 3

上周任务太多,加上 review 的文章篇幅太长,耽误了时间,本周会连续发布两篇文章补上

Algorithm

题目链接

https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。


题目分析

依次在左右两个子树中寻找对应节点 p, q,如果 p, q 两个节点分别位于左右子树之间,则当前节点是目标节点;退出条件是,找到其中一个节点或者为空,即当前子树不包含 p, q 任意节点, 必然在另一个子树上

代码实现

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {       if(root==p || root==q || root==nullptr) return root;       TreeNode *left = lowestCommonAncestor(root->left, p, q);       TreeNode *right = lowestCommonAncestor(root->right, p, q);       if(!left){           return right;       }       if(!right){           return left;       }       return root;      }};
复制代码


Review

python Async IO 介绍https://realpython.com/async-io-python/. 本文作者为 Brad Solomon, 介绍了 python 协程机制,异步 IO 的用法,整篇文章结构清晰,示例代码都是考下来直接跑的通,非常好的介绍了 python 3.7 以上版本的协程用法。唯一的缺点就是太长,当我读完这篇文章,甚至忘记了当时要用协程来


协程解决什么问题?

协程也是支持并发任务的一种方法,但是是一单线程的方式进行。对于密集 IO 任务,多线程的线程切换成本太高,导致扩展性差,协程的出现成为很好的替代品。"Nginx 是支持异步 IO 的服务器,在单核 CPU 上采用单进程模型可以高效支持多任务"--廖雪峰。

协程可以和多进程一起使用,最大化效率。

Aysnc IO 使用方法?


在 python 3.7 中,引入 async, await 两个关键字,async 定义异步函数,await 在等待 async 函数执行的时候,可以让 CPU 执行其他任务,等该任务完成后继续执行后续代码,从而形成了很好的中断机制,完成异步 IO 任务。

注意:await 的函数必须是定义为 async 的。

可以将多个 async 函数串联起来,提高执行效率。

asycio 也提供 Queue 进行控制,可以作为生产者/消费者模型使用;相比同步多线程版本,能够减少阻塞;

Tips

python 内存分析方法实现, 上周介绍了逐行分析时间的方法,line_profiler, kernprof 工具,本周介绍一个内存分析工具, memory_profiler. 安装方法

pip install memory_profiler
复制代码

使用方法,对要分析的函数加 @profile, 然后运行

python -m memory_profiler <the_program.py>
复制代码

注意:memory_profiler 的耗时非常久,所以一定要定位好要分析的函数,建议先用 line_profiler 定位行,基本定位了要分析的函数,再进行 memory 分析。

Share

本周分享的观点是:文档是给未来自己留下的最大的宝藏。文档是给未来自己的珍贵礼物 - InfoQ 写作平台。文档不但是宣传工具,也是生产力工具。

发布于: 2021 年 03 月 23 日阅读数: 16
用户头像

steve_lee

关注

还未添加个人签名 2018.03.09 加入

还未添加个人简介

评论

发布
暂无评论
ARTS——week 3