This commit is contained in:
krahets
2023-08-22 13:50:12 +08:00
parent 0c9bf14e20
commit 92a0853ab8
64 changed files with 478 additions and 479 deletions
+6 -6
View File
@@ -10,7 +10,7 @@ comments: true
## 11.8.1   算法流程
考虑一个长度为 $n$ 的数组,元素是范围 $[0, 1)$ 的浮点数。桶排序的流程如图所示。
考虑一个长度为 $n$ 的数组,元素是范围 $[0, 1)$ 的浮点数。桶排序的流程如图 11-13 所示。
1. 初始化 $k$ 个桶,将 $n$ 个元素分配到 $k$ 个桶中。
2. 对每个桶分别执行排序(本文采用编程语言的内置排序函数)。
@@ -18,7 +18,7 @@ comments: true
![桶排序算法流程](bucket_sort.assets/bucket_sort_overview.png)
<p align="center"> 图桶排序算法流程 </p>
<p align="center"> 图 11-13 &nbsp; 桶排序算法流程 </p>
=== "Java"
@@ -409,16 +409,16 @@ comments: true
为实现平均分配,我们可以先设定一个大致的分界线,将数据粗略地分到 3 个桶中。**分配完毕后,再将商品较多的桶继续划分为 3 个桶,直至所有桶中的元素数量大致相等**。
图所示,这种方法本质上是创建一个递归树,目标是让叶节点的值尽可能平均。当然,不一定要每轮将数据划分为 3 个桶,具体划分方式可根据数据特点灵活选择。
如图 11-14 所示,这种方法本质上是创建一个递归树,目标是让叶节点的值尽可能平均。当然,不一定要每轮将数据划分为 3 个桶,具体划分方式可根据数据特点灵活选择。
![递归划分桶](bucket_sort.assets/scatter_in_buckets_recursively.png)
<p align="center"> 图递归划分桶 </p>
<p align="center"> 图 11-14 &nbsp; 递归划分桶 </p>
如果我们提前知道商品价格的概率分布,**则可以根据数据概率分布设置每个桶的价格分界线**。值得注意的是,数据分布并不一定需要特意统计,也可以根据数据特点采用某种概率模型进行近似。
图所示,我们假设商品价格服从正态分布,这样就可以合理地设定价格区间,从而将商品平均分配到各个桶中。
如图 11-15 所示,我们假设商品价格服从正态分布,这样就可以合理地设定价格区间,从而将商品平均分配到各个桶中。
![根据概率分布划分桶](bucket_sort.assets/scatter_in_buckets_distribution.png)
<p align="center"> 图根据概率分布划分桶 </p>
<p align="center"> 图 11-15 &nbsp; 根据概率分布划分桶 </p>