我正在寻找最有效的二进制值排序网络。 就我而言,效率是所需的比较和交换操作的数量。 背景:排序网络使用一系列具有刚性位置的比较和交换操作对值列表进行排序。 由于严格的顺序,它们适用于硬件实现或并行化。 我有两个子问题: 如果我知道我的数据是二进制的,例如(0, 1, 1, 0, 1, 1...) , ...
我正在寻找最有效的二进制值排序网络。 就我而言,效率是所需的比较和交换操作的数量。 背景:排序网络使用一系列具有刚性位置的比较和交换操作对值列表进行排序。 由于严格的顺序,它们适用于硬件实现或并行化。 我有两个子问题: 如果我知道我的数据是二进制的,例如(0, 1, 1, 0, 1, 1...) , ...
我正在尝试在 C 程序中使用排序网络对包含n元素的小列表A进行排序。 排序网络由SWAP(x, y)宏组成,每个宏比较两个元素A[x]和A[y] ,并在必要时进行交换。 本网站生成SWAP(x, y)宏序列,用于对n <= 32元素进行排序。 现在,我正在寻找用于对n = 64元素进行排序的S ...
我正在研究基于双输入最小/最大操作的九个元素的排序和中值选择网络。 Knuth, TAOCP Vol。 3 ,第2版。 状态(第226页)九元素排序网络需要至少25次比较,这转换为相同数量的SWAP()原语或50 min / max操作。 显然,通过消除冗余操作,可以将分拣网络转换为中值 ...
排序网络是 2 个输入比较器的排列,可以对 n 个元素的输入序列进行排序。 例如,这是一个用于 9 元素输入的排序网络: 每条竖线是一个2输入比较器,左边是输入序列,右边是排序好的序列。 我的问题是:如何证明如果我们删除任何有效的 n 个输入排序网络的顶线或底线,我们最终会得到一个适用于 ( ...
GCC的qsort实现使用中位数为3来选择一个支点。 在此期间,3个元素使用排序网络进行排序。 3个元素的分类网络通常需要3次比较。 但是在这个特定的实现中,可以跳过最后的比较,具体取决于之前的比较: 对于n = 4...16网络(具有已知的最小最佳比较数的网络),可以做类似的 ...
我正在寻找非递归奇偶合并排序算法,并找到了 2 个来源: Sedgewick R 的一本书。 这个问题 两种算法是相同的,但都是错误的。 生成的排序网络不是奇偶合并排序网络。 这是具有 32 个输入的结果网络的图像。 两条水平线之间的垂直线表示将值 a[x] 与 a[y] 进行比较, ...
这些天,我一直在尝试使用最少数量的比较交换单元(最大尺寸 ,而不是深度 )实现最大尺寸为32的分拣网络。 截至目前,我已经能够使用以下资源来生成我的网络: 对网络0到16进行排序:Perl的Algorithm::Networksort模块采用“最佳”算法。 不幸的是,它只提供最知名 ...
给定以下结构: 比较两个这样的结构并返回匹配的变量数(在任何位置)的绝对最快方法是什么? 例如: 我正在寻找3的结果,因为两个结构之间有三个数字匹配。 但是,考虑到以下因素: 然后我期望结果只有2,因为在两个结构之间只有两个变量匹配(尽管第一个中有两个零)。 ...
我正在解决一个问题,它涉及非常快速地对 10 个数字 (int32) 进行排序。 我的应用程序需要尽可能快地对 10 个数字进行数百万次排序。 我正在对一个包含数十亿个元素的数据集进行采样,每次我需要从中挑选 10 个数字(简化)并对它们进行排序(并从排序后的 10 个元素列表中得出结论)。 目前 ...
我正在进行网络排序(对于小于8的数组),并注意到所有算法都关注其允许并行操作的能力。 这是一个大小为5的数组。 我正在使用long int数组(因此每个元素的大小为8个字节)。 那么有什么简单的方法可以在C中并行化这些操作吗? 是否有任何硬件特定命令可用于实现此目的(SIMD,AS ...
根据我的阅读,我不知道如何计算成本和延迟。 成本:摇杆或比较交换块的数量。 延迟:序列中比较交换的数量。 我已经在下面发布了我的示例 ...
我正在编写一个基本程序来使用 Bose-Nelson Algorithm实现此链接网络中 N=5的排序算法。 我使用comb.vhd组件比较两个数字,我的程序的顶层实体在下面的代码中。 我用Quartus编译的时候没有问题,但是当我用modelsim模拟RTL的时候,不管输入是什么,输出总是00 ...
如果我们有一个先前已经排序的大小为N的向量,并且用任意值替换M个元素(其中M远小于N ),是否有一种简单的方法可以以较低的成本对它们进行重新排序(即生成排序网络的深度减少)比完全排序? 例如,如果N = 10且M = 2,则输入可能是 注意:修改元素的索引是未知的(直到我们将它们与 ...
如何使用排序网络对8个元素的列表进行排序? 例如给定的列表:12,5,9,14,33,17,10,8 我知道如何对4个元素的列表进行排序..对n个元素的任何列表进行排序的规则是什么? ...
我的家庭作业文档中有一个问题,而且我很难花时间看到和理解这个问题。 问题如下: 我们可以将具有c个比较器的n输入比较网络表示为从1到n范围内的c对整数的列表。 如果两个对共有一个整数,则网络中相应比较器的顺序由列表中的对顺序确定。 给定此表示形式,描述用于确定比较网络深度的O(n ...
我正在研究C ++中Robert Sedwick算法中的奇数合并排序。 作为文本的一部分,作者提到了如何使用奇偶合并排序来实现排序网络中的并行排序。 在此背景下,作者提到了蝴蝶网 我的问题是什么是基本上蝴蝶网络,为什么它被称为蝴蝶。 将理解用简单示例的解释。 我用谷歌搜索了 ...
我有一些性能关键代码,涉及在 C++ 中对一个非常短的固定长度数组进行排序,其中包含大约 3 到 10 个元素(参数在编译时更改)。 我突然想到,专门针对每个可能的输入大小的静态排序网络可能是一种非常有效的方法:我们进行所有必要的比较以确定我们处于哪种情况,然后进行最佳交换次数进行排序数组。 为 ...
我实现了一个使用排序的算法。 我尝试了 Thrust::sort_by_key 大约需要 0.4 秒来对包含 10^7 个元素的数组进行排序。 我认为双音排序网络应该比 Thrust::sort_by_key 更快。 但是,双调排序需要大约 2.5 秒才能对上述相同的数组进行排序。 我使用了SDK ...
我正在寻找5元素排序的排序网络实现,但是由于我找不到关于SO的良好参考,因此我想要求对所有小值n(至少n = 3)进行排序的网络到n = 6,但更高的值也将是巨大的。 一个好的答案应该至少将它们列为“交换”(按2个元素排序)操作的序列,但是从低阶排序网络的角度来看递归分解可能也很不错。 ...
关于最快排序的固定长度6 int数组 ,我不完全理解这个排序网络如何击败像插入排序这样的算法。 形成该问题,这里是完成排序所需的CPU周期数的比较: Linux 32位,gcc 4.4.1,Intel Core 2 Quad Q8300,-O2 插入排序(Dan ...