编码中考虑到其他python实现的效率等问题,比如运算符‘+’在CPython(Python)中效率很高,但是Jython中却非常低,所以应该采用.join()的方式。 尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。 异常中try的代码尽可能少。
用python定义函数和类的时候,如果函数的默认参数是一个可变对象(python中的可变对象包括list和dict),会出现一些诡异的效果 这个默认参数的值是跟着函数的调用一起改变的,或可称之为函数默认参数为可变变量陷阱
在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。
树时一种基础的数据结构,BinaryTree是其中最简单的非平衡二叉树,只定义了一种父-子关系 更常用的是有结构的树:AVL树、红黑树、TRIE树,各种堆 树往往要比python内置的dict类慢一些,python的dict采用和hash表,详见《Python源码剖析》阅读笔记:第五章-dict对象
背包问题,除了01背包、部分背包、实数背包,更多的延展和学习可以参见当年DD大神的背包九讲 现做学习笔记如下
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为:
大家所熟知的01背包中要求输入是一个实数,两个整数,即背包容量和物品体积都是整数,而物品价值可以是实数,这时可以对这个整数部分即体积进行枚举,实现动态规划,即将前i个物品装入容量为j的背包所能的最大价dp[i][j]=max(dp[i-1][j],dp[i-1][j-v(i)]+w(i)),这个方法至少有两个局限,