在一组4个数字中查找重复项的有效方法

马史密斯

我目前正在编写一个程序,其中效率非常重要。

在此程序中,有时我会得到多达4个不同来源的值。我想检查最终得到的值是否相同,如果它们相同,我还想知道哪些来源给了我相同的数字。

我可以自行完成此操作,所以有人为我执行此操作不是我想要的,我只是想知道这样做的有效方法是什么。这是我考虑过的两件事,但我希望有一些更有效,更轻松的方法来完成此操作...

想法1:

struct box
{
    char source; // because it won't be above 4
    char value; // because it will be between 2 and 20
};

struct box boxes[4];
int box_count = 0, i;
for(i=0; i<4; i++)
{
    if(hasValue(i))
    {
        boxes[box_count].source = i;
        boxes[box_count++].value = getValue(i);
    }
}

// idk what to do at this point, but here's how to access them...
for(i=0; i<box_count; i++)
{
    printf("source, id : %d, %d\n", boxes[i].source, boxes[i].value);
}

想法2:

struct sources
{
    char sources[4]; // because max 4 sources
    char sources_count;
};

struct sources sources[19] = { 0 }; // because only values between 2 and 20
int i, j, v;
for(i=0; i<4; i++)
{
    if(hasValue(i))
    {
        v = getValue(i)-2; // only between 2 and 20, and array of size 19
        sources[v].sources[sources[v].sources_count++] = i;
    }
}

for(i=0; i<19; i++)
{
    if(sources[i].sources_count>0)
    {
        printf("Duplicate sources: %d", sources[i].sources[0]);
        for(j=1; j<sources[i].sources_count; j++)
        {
            printf(", %d", sources[i].sources[j]);
        }
        printf("\n");
    }
}

那么有没有更有效的方法呢?

rcgldr

您需要进行6次比较,假设数字为a,b,c,d,然后需要检查a == b,a == c,a == d,b == c,b == d,c = = d。

如果您需要将其转换为状态,请尝试以下操作:

    s  = (a == b) ?  1 : 0;
    s |= (a == c) ?  2 : 0;
    s |= (a == d) ?  4 : 0;
    s |= (b == c) ?  8 : 0;
    s |= (b == d) ? 16 : 0;
    s |= (c == d) ? 32 : 0;

或这个

    s  = (a ^ b) ? 0 :  1;  
    s |= (a ^ c) ? 0 :  2;  
    s |= (a ^ d) ? 0 :  4;  
    s |= (b ^ c) ? 0 :  8;  
    s |= (b ^ d) ? 0 : 16;  
    s |= (c ^ d) ? 0 : 32;  

在X86上的Microsoft编译器上,任何一个序列都实现而没有任何分支。然后将开关用于0至63的64种情况。请注意,在64个状态中只有15个有效,其余状态无效,但是将所有这些无效情况设置为默认故障情况将允许开关情况使用单个情况。 64个入口分支目标表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

检查字符串中的一组字母是否为变量的有效方法?

来自分类Dev

C ++删除一组列表中的重复项

来自分类Dev

在一组4个数字中查找重复项的有效方法

来自分类Dev

在字符串中搜索一组定界符中的第一个的有效方法是什么?

来自分类Dev

从列表中删除重复项的最有效方法

来自分类Dev

从一组列值中识别有效的IP

来自分类Dev

重复提取熊猫中的行组的有效方法

来自分类Dev

有效地查找表中不存在的第一个数字?

来自分类Dev

具有有效查找丢失功能的一组键的数据结构

来自分类Dev

有效获取一组节点的关系直方图

来自分类Dev

有什么有效的方法可以对一组大于一百万的字符串进行重复数据删除?

来自分类Dev

有没有更有效的方法来从单个数字中查找最小的Vector3组合?

来自分类Dev

有没有更有效的方法来规范sklearn或其他python lib中的一组数据

来自分类Dev

在Python中逐位比较2个数字(16位)的最有效方法是什么?

来自分类Dev

以更有效/ Python的方式调整一组行的数字刻度吗?

来自分类Dev

在列表中查找所有重复项,并在其中添加一个数字

来自分类Dev

如何将一个数组中的一组数字相加?

来自分类Dev

在Django中查找一组相关项

来自分类Dev

查看一组值是否出现在数组中的有效方法?

来自分类Dev

在字符串中搜索一组定界符中的第一个的有效方法是什么?

来自分类Dev

是否有一种有效的方法来删除PHP多维数组中的重复项

来自分类Dev

重复提取熊猫中的行组的有效方法

来自分类Dev

检查列表中的数字是否可被另一个数字整除的最有效方法

来自分类Dev

无法从一组字符串中取出一个数字-C

来自分类Dev

在另一个数据框中为每一行重复熊猫行的更有效方法?

来自分类Dev

对 Dataframe 中的一组选定行执行数学运算的最有效方法是什么

来自分类Dev

基于另一个变量设置一组变量的有效方法?

来自分类Dev

检查这些条件是否适用并执行一组任务的有效方法是什么?

来自分类Dev

在每个组中查找第一个有效值

Related 相关文章

  1. 1

    检查字符串中的一组字母是否为变量的有效方法?

  2. 2

    C ++删除一组列表中的重复项

  3. 3

    在一组4个数字中查找重复项的有效方法

  4. 4

    在字符串中搜索一组定界符中的第一个的有效方法是什么?

  5. 5

    从列表中删除重复项的最有效方法

  6. 6

    从一组列值中识别有效的IP

  7. 7

    重复提取熊猫中的行组的有效方法

  8. 8

    有效地查找表中不存在的第一个数字?

  9. 9

    具有有效查找丢失功能的一组键的数据结构

  10. 10

    有效获取一组节点的关系直方图

  11. 11

    有什么有效的方法可以对一组大于一百万的字符串进行重复数据删除?

  12. 12

    有没有更有效的方法来从单个数字中查找最小的Vector3组合?

  13. 13

    有没有更有效的方法来规范sklearn或其他python lib中的一组数据

  14. 14

    在Python中逐位比较2个数字(16位)的最有效方法是什么?

  15. 15

    以更有效/ Python的方式调整一组行的数字刻度吗?

  16. 16

    在列表中查找所有重复项,并在其中添加一个数字

  17. 17

    如何将一个数组中的一组数字相加?

  18. 18

    在Django中查找一组相关项

  19. 19

    查看一组值是否出现在数组中的有效方法?

  20. 20

    在字符串中搜索一组定界符中的第一个的有效方法是什么?

  21. 21

    是否有一种有效的方法来删除PHP多维数组中的重复项

  22. 22

    重复提取熊猫中的行组的有效方法

  23. 23

    检查列表中的数字是否可被另一个数字整除的最有效方法

  24. 24

    无法从一组字符串中取出一个数字-C

  25. 25

    在另一个数据框中为每一行重复熊猫行的更有效方法?

  26. 26

    对 Dataframe 中的一组选定行执行数学运算的最有效方法是什么

  27. 27

    基于另一个变量设置一组变量的有效方法?

  28. 28

    检查这些条件是否适用并执行一组任务的有效方法是什么?

  29. 29

    在每个组中查找第一个有效值

热门标签

归档