首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Prolog中混洗列表,同时保持内部顺序

在Prolog中,可以使用随机化算法来混洗列表,同时保持内部顺序。以下是一个示例的混洗算法:

代码语言:prolog
复制
% 定义混洗规则
shuffle([], []).
shuffle([X], [X]).
shuffle(List, Shuffled) :-
    length(List, Length),
    split(List, Length, Left, Right),
    shuffle(Left, ShuffledLeft),
    shuffle(Right, ShuffledRight),
    merge(ShuffledLeft, ShuffledRight, Shuffled).

% 辅助函数:将列表分为两部分
split(List, N, Left, Right) :-
    length(Left, N),
    append(Left, Right, List).

% 辅助函数:合并两个列表
merge([], List, List).
merge(List, [], List).
merge([X|Xs], [Y|Ys], [X|Result]) :-
    merge(Xs, [Y|Ys], Result).

% 示例用法
?- shuffle([1, 2, 3, 4, 5], Shuffled).
Shuffled = [1, 3, 2, 5, 4].

这个混洗算法使用了递归和分治的思想。首先,判断列表是否为空或只有一个元素,如果是,则无需混洗,直接返回原列表。否则,将列表分为两部分,分别对左右两部分进行混洗,然后将混洗后的左右两部分合并起来。

这种混洗算法可以保持列表的内部顺序,因为在混洗过程中,每次都是先对左右两部分进行混洗,然后再合并起来,保证了内部顺序的一致性。

在腾讯云的产品中,可以使用云服务器(CVM)来运行支持Prolog的环境,例如使用Linux操作系统和SWI-Prolog编译器。云服务器提供了灵活的计算资源,可以满足运行Prolog程序的需求。

腾讯云云服务器产品介绍链接:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么MobileNet及其变体如此之快?

另外,作者还对如何在空间和通道做卷积进行了直观阐述。...如上图所示,通过省略通道的卷积,depthwise 卷积大大减少了计算成本。 通道(Channel shuffle) 通道是改变 ShuffleNet[5] 中所用通道顺序的操作(层)。...这里,G 代表的是分组卷积中分组的数目,分组卷积通常与 ShuffleNet 的通道一起使用。 虽然不能用乘-加运算次数(MACs)来定义通道的计算成本,但是这些计算应该是需要一些开销的。...G=2 的通道的例子。没有进行卷积,只改变了通道顺序。 ? G=3 的通道的例子。...这里的重要组成模块是通道层,它「」了分组卷积的通道顺序。如果没有通道,分组卷积的输出就无法在分组利用,这会导致准确率的降低。

92620
  • 论文研读-用于处理昂贵问题的广义多任务优化GMFEA

    决策变量转换策略根据每个任务的估计最优值来调整个体的位置,以便增强优化过程的知识转移。(是一种使用部分优解进行线性领域适应的方法) 还引入决策变量策略来处理具有不同数量的决策变量的MFO问题。...决策变量策略不仅可以改变染色体决策变量的顺序,使每个变量都有机会与其他任务进行通信,从而提高知识转移的效率,还可以替换未使用的决策变量。用相应的有用信息来保证转移知识的质量。...需要指出的是,本文提出的思想与[38]的思想不同,G-MFEA 将所有任务转换到一个新的空间,同时保持解的相同几何特性,从而避免对 MFEA 多样化能力的不利影响 人口并执行全局搜索。...给定两个随机选择的双亲,决策变量的顺序会进一步受到干扰,未使用的变量在进行分类交配之前会被决策变量洗牌策略所取代。算法6描述了决策变量策略。 应该注意的是,生成的子代也在转换的解决方案空间中。...翻译方向是根据当前这一代的每个任务的有希望的解决方案估计的,如下: (从翻译方向这一点可以看出,GMFEA有能力实现Many-task optimization) 为了保持稳定的平移,算法5的步骤

    1K10

    读书 | Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    当RDD不需要数据就可以从父节点计算出来,RDD不需要数据就可以从父节点计算出来,或把多个RDD合并到一个步骤时,调度器就会自动进行进行"流水线执行"(pipeline)。...当步骤图确定下来后,任务就会被创建出来并发给内部的调度器,这些步骤会以特定的顺序执行。...一个物理步骤会启动很多任务,每个任务都是在不同的数据分区上做同样的事情,任务内部的流程是一样的,如下所示: 1.从数据存储(输入RDD)或已有RDD(已缓存的RDD)或数据的输出获取输入数据 2....3.把输出写到一个数据文件,写入外部存储,或是发挥驱动器程序。...数据与聚合的缓存区(20%) 当数据进行数据时,Spark会创造一些中间缓存区来存储数据的输出数据。

    1.2K60

    卷积神经网络学习路线(十九) | 旷世科技 2017 ShuffleNetV1

    新的架构利用两个操作:逐点组卷积(pointwise group convolution)和通道(channel shuffle),与现有的其他SOTA模型相比,在保证精度的同时大大降低了计算量。...论文发现先进的架构Xception和ResNetXt在小型网络模型效率较低,因为大量的1*1卷积耗费了大量时间。...SequeezeNet在保持精度的同时大大减少了模型的参数和计算量,ResNet利用高效的bottleneck结构实现了惊人的效果。Xception中提出深度可分离卷积概括了Inception序列。...通道Shuffle操作是可微的,模型可以保持end-to-end训练。 单元 在实际过程,我们构建了一个ShuffleNet Unit(单元),便于后面组合为网络模型。 ?...有通道和没有通道 Shuffle操作是为了实现多个组之间信息交流,下表表现了有无Shuffle操作的性能差异: ?

    99120

    【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    当RDD不需要数据就可以从父节点计算出来,RDD不需要数据就可以从父节点计算出来,或把多个RDD合并到一个步骤时,调度器就会自动进行进行"流水线执行"(pipeline)。...image.png   当步骤图确定下来后,任务就会被创建出来并发给内部的调度器,这些步骤会以特定的顺序执行。...一个物理步骤会启动很多任务,每个任务都是在不同的数据分区上做同样的事情,任务内部的流程是一样的,如下所示: 1.从数据存储(输入RDD)或已有RDD(已缓存的RDD)或数据的输出获取输入数据...3.把输出写到一个数据文件,写入外部存储,或是发挥驱动器程序。   ...数据与聚合的缓存区(20%) 当数据进行数据时,Spark会创造一些中间缓存区来存储数据的输出数据。

    1.8K100

    Python|有趣的shuffle方法

    我们将学习如何使用随机模块的shuffle方法来数据。另外,学习如何随机播放 Python列表和字符串。我们在使用这个函数时一定要首先引入random库,否则是代码是不能够执行的。...现在让我们来看看如何在不适当的位置无序排列列表。要执行不到位的无序播放,我们需要使用简单的随机模块方法。random.sample()方法返回新列表,其中包含传递给它的样本大小。...我们首先定义了一个新的列表来存储新的排序,再用新的方法来对其进行随机排序。 5、使用相同的顺序一次洗牌两个Python列表 假设您想随机播放两个列表,但又想保持相同的随机播放顺序。...现在,让我们看看如何在Python无序排列多维数组。...7、在Python随机播放字典 在python不可能修改字典。但是,我们可以重新排列字典键的迭代顺序。从字典中提取所有键并将其添加到列表,无序排列该列表并使用新无序排列的键访问字典值。

    3.3K10

    python执行测试用例_平台测试用例

    pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。...pytest –random-order-bucket=选项,其中可以是global,package,module,class,parent,grandparent: 插件组在存储桶中进行测试,在存储桶中进行...,然后对存储桶进行,设计原理如图 给定上面的测试套件,以下是一些可能生成的测试顺序的两个: 可以从以下几种类型的存储桶中进行选择: class 测试将在一个类中进行,而各类将被...如果仅使用–random-order运行pytest,同时带上参数–random-order-seed=。 package 程序包级别。...none (已弃用) 禁用。自1.0.4起不推荐使用,因为此插件默认不再重做测试,因此没有禁用的功能。

    2K30

    Pytest(16)随机执行测试用例pytest-random-order

    pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。...pytest –random-order-bucket=选项,其中可以是global,package,module,class,parent,grandparent: 插件组在存储桶中进行测试,在存储桶中进行...,然后对存储桶进行,设计原理如图 给定上面的测试套件,以下是一些可能生成的测试顺序的两个: 可以从以下几种类型的存储桶中进行选择: class 测试将在一个类中进行,而各类将被...如果仅使用–random-order运行pytest,同时带上参数–random-order-seed=。 package 程序包级别。...none (已弃用) 禁用。自1.0.4起不推荐使用,因为此插件默认不再重做测试,因此没有禁用的功能。

    74040

    python执行测试用例_java随机函数random使用方法

    pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。...pytest –random-order-bucket=选项,其中可以是global,package,module,class,parent,grandparent: 插件组在存储桶中进行测试,在存储桶中进行...,然后对存储桶进行,设计原理如图 给定上面的测试套件,以下是一些可能生成的测试顺序的两个: 可以从以下几种类型的存储桶中进行选择: class 测试将在一个类中进行,而各类将被...如果仅使用–random-order运行pytest,同时带上参数–random-order-seed=。 package 程序包级别。...none (已弃用) 禁用。自1.0.4起不推荐使用,因为此插件默认不再重做测试,因此没有禁用的功能。

    80940

    Pytest(16)随机执行测试用例pytest-random-order「建议收藏」

    pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。...pytest –random-order-bucket=选项,其中可以是global,package,module,class,parent,grandparent: 插件组在存储桶中进行测试,在存储桶中进行...,然后对存储桶进行,设计原理如图 给定上面的测试套件,以下是一些可能生成的测试顺序的两个: 可以从以下几种类型的存储桶中进行选择: class 测试将在一个类中进行,而各类将被...如果仅使用–random-order运行pytest,同时带上参数–random-order-seed=。 package 程序包级别。...none (已弃用) 禁用。自1.0.4起不推荐使用,因为此插件默认不再重做测试,因此没有禁用的功能。

    56630

    DPOS 共识算法 - 缺失的白皮书

    出块人总数为奇数,因此不可能长时间保持平局。...稍后我们还会谈到出块人“(shuffle)”,它使得出块顺序随机化,从而确保即使是出块人数目相同的两个分叉,也会以不同的速度增长,最终导致一个分叉胜出。...确定性出块人(Deterministic Producer Shuffling) 在上面我们所展示的所有案例,出块人按循环调度出块。...实际上,每出 N 个块(N 是出块人数量),出块人集合都会进行一次。这种随机性确保了出块人 B 不会总是忽略出块人 A,并且当出现多个数量出块人相同的分叉时,最终会有一个分叉胜出。...在此过程,社区可以投票替换掉不合格的出块人,直到恢复 100% 参与率。在如此高强度和变化多端的故障条件下,我还不知道有任何其它算法也可以依然保持如此健壮。

    79920

    【Spark】Spark之how

    开销很大,需要将所有数据通过网络进行(shuffle)。 (5) mapPartitions:将函数应用于RDD的每个分区,将返回值构成新的RDD。 3....不会去重,不进行。 (2) intersection:求两个RDD共同的元素的RDD。会去掉所有重复元素(包含单集合内的原来的重复元素),进行。...(3) subtract:返回一个由只存在于第一个RDD而不存在于第二个RDD的所有元素组成的RDD。不会去除重复元素,需要。 (4) cartesian:RDD与另一个RDD的笛卡尔积。...该任务在默认情况下会需要集群的一个计算核心来执行。 从HDFS上读取输入RDD会为数据在HDFS上的每个文件区块创建一个分区。从数据后的RDD派生下来的RDD则会采用与其父RDD相同的并行度。...Spark提供了两种方法对操作的并行度进行调优: (1) 在数据操作时,使用参数的方式为后的RDD指定并行度; (2) 对于任何已有的RDD,可以进行重新分区来获取更多或者更少的分区数。

    92220

    keras 实现轻量级网络ShuffleNet教程

    该结构利用组卷积和信道两种新的运算方法,在保证计算精度的同时,大大降低了计算成本。...在基于arm的移动设备上,ShuffleNet比AlexNet实际加速了13倍,同时保持了相当的准确性。...padding='same', use_bias=False)(x_group)) return Concatenate(axis=channel_axis)(gc_list) 通道...通道是这篇paper的重点,尽管组卷积大量减少了计算量和参数,但是通道之间的信息交流也受到了限制因而模型精度肯定会受到影响,因此作者提出通道,在不增加参数量和计算量的基础上加强通道之间的信息交流...通道层的代码实现很巧妙参考了别人的实现方法。通过下面的代码说明,d代表特征图的通道序号,x是经过通道后的通道顺序

    77610

    Pyspark学习笔记(四)弹性分布式数据集 RDD(上)

    换句话说,RDD 是类似于 Python 列表的对象集合,不同之处在于 RDD 是在分散在多个物理服务器上的多个进程上计算的,也称为集群的节点,而 Python 集合仅在一个进程存在和处理。...当我们知道要读取的多个文件的名称时,如果想从文件夹读取所有文件以创建 RDD,只需输入带逗号分隔符的所有文件名和一个文件夹,并且上述两种方法都支持这一点。同时也接受模式匹配和通配符。...,也称为完全, repartition()方法是一项非常昂贵的操作,因为它会从集群的所有节点打乱数据。...8、操作 Shuffle 是 PySpark 用来在不同执行器甚至跨机器重新分配数据的机制。...根据数据集大小,较多的内核和内存可能有益或有害我们的任务。

    3.8K10
    领券