潜复制与深复制

l = [1, 1]
ll = l.copy()
lll = l
print(id(l),
      id(ll),
      id(lll))

输出:

2686293370944 2686293337472 2686293370944

取整

1.单纯取整,即只要整数部分

print(int(9.5))
print(int(-9.5))

# 输出
9
-9

2.四舍五入使用round函数

print(round(1.5, 0))
print(round(1.5))
print(round(0.5, 0))
print(round(0.5))
print(round(0.51))
print(round(0.51, 0))

# 输出
2.0
2
0.0
0
1
1.0

解决0.5的四舍五入:Decimal模块的实例可以准确地表示任何数,对其上或其下取整,还可以限制有效数字个数。

3.import math 


range

>>>range(10)        # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)     # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)  # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)  # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]

桶排序

桶排序的时间复杂度为O(n):

如果要排序的数据有 n 个,我们把它们均匀地划分到 m 个桶内,每个桶里就有 k=n/m 个元素。每个桶内部使用归并排序,时间复杂度为 O(k * logk)。m 个桶排序的时间复杂度就是 O(m * k * logk),因为 k=n/m,所以整个桶排序的时间复杂度就是 O(n*log(n/m))。当桶的个数m 接近数据个数 n 时,log(n/m) 就是一个非常小的常量,这个时候桶排序的时间复杂度接近 O(n)。

所以,桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少,但相应的空间消耗就会增大。 

桶排序的使用条件和适用场景:

桶排序对要排序的数据的要求是非常苛刻的。使用条件如下:

(1)首先,要排序的数据需要很容易就能划分成m个桶,并且,桶与桶之间有着天然的大小顺序。这样每个桶内数据都排序完之后,桶与桶之间的数据不需要在进行排序。

(2)其次,数据在各个桶之间的分布比较均匀的。如果数据经过桶的划分之后,有些桶里的数据非常多,有些非常少,很不平均,那桶内数据排序的时间复杂度就不是常量级了。在极端情况下,如果数据都被划分到一个桶里,那就退化为 O(nlogn) 的排序算法了。

所以,桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中。

posted on 2023-04-20 21:31  白的枫叶  阅读(12)  评论(0)    收藏  举报