LRU全称
Least Recently Used
,即最近最久未使用算法,表示如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。时间复杂度$O(1)$,空间复杂度$O(1)$。
一、代码
1 |
|
LRU全称
Least Recently Used
,即最近最久未使用算法,表示如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。时间复杂度$O(1)$,空间复杂度$O(1)$。
1 | #include <iostream> |
快排的时间复杂度$O(n*log(n))$,空间复杂度$O(1)$
1 | #include <iostream> |
给定一个二叉树和二叉树中的两个不同节点,寻找这个两个节点的最小公共祖先。
思路是:先找到一条路径到这个两个节点中的其中一个,然后从下往上遍历这个节点的各级父节点,寻找这个节点是否包含另外一个节点。
1 | #include <iostream> |
为了查看/修改一个长时间运行系统的内部状态,可以集成IPython,代码如下:
1 | import time |
通常,数据库是持久化的最佳方案,几乎每个稍微大一点的系统都会用到数据库,市面上存在各种各样的数据库系统,本文采用一种最常用的数据库系统——MySql。
访问数据库的方式大体上可以分为两种,一种是直接(或间接)基于数据库驱动的类SQL的方式,另外一种在数据库驱动之上更高抽象的ORM方式。pymysql
是采用Python语言编写的MySql数据库驱动,其优点是安装便捷(可以查看源码哦~),缺点是速度没有那么快,但也基本能满足日常需求(对于性能要求比较高的场景,可考虑mysqldb)。sqlalchemy
是高层次的ORM框架,支持多种数据库和多种数据库驱动。sqlacodegen
可以根据已有的数据库生成sqlalchemy的模型文件,避免手工同步数据库和模型。
本文简单介绍pymysql+sqlalchemy+sqlacodegen的联合使用。
more >>C++的高效 + Python的简单 = 无与伦比的利器
总结一下使用C++编写Python扩展的方法和基本步骤,其中用到
swig
通常需要4类文件,比如
example.h
、example.cpp
、example.i
、setup.py
,可以任意选择你喜欢的IDE
example.h
头文件需要被C编译器识别,如下:
1 | #ifndef PYTHON_EXAMPLE_H |
example.cpp
1 | #include "example.h" |
example.i
swig脚本,用于生成胶水代码。注意,应当把头文件添加到生成的文件中,代码如下:
1 | %module example |
setup.py
用于生成python扩展的配置文件,代码如下:
1 | from setuptools import setup, Extension |
使用如下命令进行编译:
1 | python setup.py build_ext --inplace # 编译,构建扩展 |
使用时,像使用普通模块一样即可:
1 | import example |
有个需求是寻找一个连续函数,来统计图片中的像素修改数量,使用该函数做为loss,能够迫使模型减少修改图像的像素,因此需要一个绘制函数曲线的方法。
目标函数应该在0处有极大的梯度,在x=0
附近以极快的速度从0变为1,因此考虑对sigmoid的函数进行增强,如下图:
代码如下:
1 | import numpy as np |
周末抽空研究了一下vscode中的lsp,lsp是基于rpc协议的,于是就尝试做了一个简单的RPCServer。
RPCServer的使用与Flask类似,如下:
1 | from rpc_server import RpcServer |
在Python中可以很方便的使用弱引用,实例代码如下:
1 | import weakref |
bit数组(位数组)是一个保存大规模对象(通常以万计)状态的有力工具,本文采用内置的bytearray来实现一个轻量级的bit数组,当然你也可以选择使用已发布的bitarray(使用pip进行安装即可),该组件采用c语言编写,功能齐全、性能良好,值得推荐。
既然已经有了类似的工具,为啥还要重复造轮子?
- 为了使项目尽可能少的依赖其他外部组件,使项目轻量化
- 外部组件通常是不可控的,不利于系统结构的优化调整
- 世上只有两种程序员,一种是造过轮子的,另一种是没造过轮子的
1 | class bitarray(): |
more >>通常,在进行文件下载或执行长时间任务的时候,我们希望有一个进度提示,本文介绍一种绘制进度条的简单方法,先来看看效果吧~
1 | #include <llvm/IR/Module.h> |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true