算法复杂度、python混编
1 算法复杂度
https://zhuanlan.zhihu.com/p/50479555
# 数据结构和算法是程序的基石
-所有的数据类型其实就是一种数据结构 # 数据的组织形式
-写的程序逻辑就是算法
# 算法:
-是指用来操作数据、解决程序问题的一组方法
-对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,
但在过程中消耗的资源(空间复杂度)和时间(时间复杂度)却会有很大的区别
-时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。
-空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述
-大O符号表示法 T(n) = O(f(n))
常数阶 O(1)
对数阶 O(logN)
线性阶 O(n)
线性对数阶 O(nlogN)
平方阶 O(n²)
立方阶 O(n³)
K次方阶 O(n^k)
指数阶 (2^n)
# Python:常用的排序算法 # 冒泡、快排、希尔 背一下
https://www.cnblogs.com/wuxinyan/p/8615127.html
2 python与其他语言混编
# Python和go/java/c语言混编
指的是python 调用其他语言写好的程序 eg: go和C 编译完的动态链接库文件、Java的jar包
# 1 动态链接库(dll、so文件)
是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源
# 简单讲:是一个包含函数和数据的模块,它可以被其他模块(应用程序exe 或 DLL)使用
Linux下的动态库以.so 结尾
Windows下的动态库以.dll结尾
# 2 go 和 c 编译成可执行文件的区别
go语言编译程序,把所有代码都编译到一个可执行文件
c语言编译程序,支持主程序编译到一个可执行文件
其他资源代码可编译到动态链接库中,主程序来调用即可 # 节约主程序(可执行文件)的大小
# 3 Python调用动态链接库(so、dll)
from ctypes import *
# ----------以下四种加载DLL方式皆可—————————
# pDLL = WinDLL("./myTest.dll")
# pDll = windll.LoadLibrary("./myTest.dll")
# pDll = cdll.LoadLibrary("./myTest.dll")
pDll = CDLL("./myTest.dll")
# 调用动态链接库函数
res = pDll.sum(1,2)
# 打印返回结果
print(res)
# 4 Python调用java的jar包
百度
# 5 go 写的代码编译成 动态链接库文件
https://zhuanlan.zhihu.com/p/355538331
# 6 什么场景使用
安全性 和 执行速度高的代码 可用其他语言编写,编译so文件,python再调用
# eg:
-生成支付连接的方法
因为python开源,没有加密一说。 # so文件 可调试,不可反编译
-雪花算法
用go编写so文件,python调用