GAP 系统中列表的两倍和计算错误
Error in Computing the Two-Fold Sumset of a List in the GAP System
我正在尝试在 GAP 系统中编写代码,允许我用自身构造一个集合的两倍总和。本质上,这只是一组元素,可以写成给定集合中两个元素的和。明确地,如果 S 是所讨论的集合(或列表),则其两倍和集是集合(或列表)S + S.
在GAP系统中,我设计了以下代码来实现这个构造。我将提供一个测试集用于演示目的,但用户应该能够提供一般的测试集。
A := [8, 11, 15, 16, 17, 19, 20, 22, 23, 24, 25,
26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37];
L := [ ];
for i in A do
for j in A do
Add(L, i + j);
od;
od;
我希望此代码添加 A
所有可能的元素对,并将它们收集在一个(最初为空)列表 L
中;然而,当我执行代码时,L
!
中神秘地缺少元素 22 = 11 + 11
我承认我是一个新手程序员,也许这个构造可以以更有效的方式实现,但这是首先想到的。我将不胜感激关于此事的任何见解或建议。我提前感谢大家的时间和考虑。
- 实际上,那里有 22 个:
gap> 22 in L;
true
gap> Position(L,22);
24
- 根据目的,您可能希望使用
AddSet
而不是 Add
来消除重复项,或者至少对结果列表进行排序 L
gap> L1 := [ ];;
gap> for i in A do for j in A do AddSet(L1, i + j); od; od;
gap> L1=Set(L); # just to check
true
- 同样,根据操作的目的和可交换性(您处理的是整数列表,还是只是一个示例,而您可能正在处理其他类型的对象?),您可能还需要进一步优化,以避免在计算
a+b
之后计算 b+a
(你说你想要“设置(或列出)S + S”所以它并不十分清楚)。
gap> L2 := [ ];;
gap> for i in [1..Length(A)] do
> for j in [i..Length(A)] do
> AddSet(L2, A[i] + A[j]);
> od;
> od;
gap> L2=Set(L);
true
我正在尝试在 GAP 系统中编写代码,允许我用自身构造一个集合的两倍总和。本质上,这只是一组元素,可以写成给定集合中两个元素的和。明确地,如果 S 是所讨论的集合(或列表),则其两倍和集是集合(或列表)S + S.
在GAP系统中,我设计了以下代码来实现这个构造。我将提供一个测试集用于演示目的,但用户应该能够提供一般的测试集。
A := [8, 11, 15, 16, 17, 19, 20, 22, 23, 24, 25,
26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37];
L := [ ];
for i in A do
for j in A do
Add(L, i + j);
od;
od;
我希望此代码添加 A
所有可能的元素对,并将它们收集在一个(最初为空)列表 L
中;然而,当我执行代码时,L
!
我承认我是一个新手程序员,也许这个构造可以以更有效的方式实现,但这是首先想到的。我将不胜感激关于此事的任何见解或建议。我提前感谢大家的时间和考虑。
- 实际上,那里有 22 个:
gap> 22 in L;
true
gap> Position(L,22);
24
- 根据目的,您可能希望使用
AddSet
而不是Add
来消除重复项,或者至少对结果列表进行排序L
gap> L1 := [ ];;
gap> for i in A do for j in A do AddSet(L1, i + j); od; od;
gap> L1=Set(L); # just to check
true
- 同样,根据操作的目的和可交换性(您处理的是整数列表,还是只是一个示例,而您可能正在处理其他类型的对象?),您可能还需要进一步优化,以避免在计算
a+b
之后计算b+a
(你说你想要“设置(或列出)S + S”所以它并不十分清楚)。
gap> L2 := [ ];;
gap> for i in [1..Length(A)] do
> for j in [i..Length(A)] do
> AddSet(L2, A[i] + A[j]);
> od;
> od;
gap> L2=Set(L);
true