c - 变量与存储在数组中的值的高效匹配

标签 c linux arrays pattern-matching

我已经搜索了其他有类似问题的线程,但找不到适合我的线程。 如果我有一个具有某些值的变量和一个具有值列表的数组...我是否有可能有效地(时间高效,空间不是约束)找出索引 当变量与数组中的元素匹配时数组的?

我正在从一个大文件中读取变量,对每一种可能性进行强力迭代将意味着数百万次迭代。作为最后的手段,我愿意这样做,但我宁愿不这样做。 :)

如果算法依赖于 C,我正在用 C 编程。我没有用 C++/Python 编程的选项。 谢谢!

编辑:我想与数组匹配的值成对出现 (x,y)。如果数组与 x 或 y 匹配,我将进一步处理 (x,y)。但重要的是,如果我必须对它进行排序,则顺序不能改变。

最佳答案

如果空间不是问题,并且您想知道数组中是否包含一个值,您可以这样做:

  • 首先,创建一个新数组。让我们调用旧的 v[ ],新的 w[ ],并让 i 成为您通过 v[ ] 的迭代器.

  • 现在,使 w[v[i]] = 1,而 w[ ] = 0 的其余部分。这基本上是说“如果 x 是数组 v[ ] 中的一个值,则 w[x] = 1”。 (注意:如果你全局声明w[ ],它的所有位置都将默认初始化为0)

  • 每当您想检查 v[ ] 中包含的值时,请改为检查 w[value]。如果等于 1,那么答案是肯定的。

如果您对每个数组进行多次检查,这应该会很好地工作。不过请注意,w[ ] 的大小可能会变得相当大。

编辑:如果您还想保留索引,可以将 w[ ] 中的 1 替换为实际位置 - 只要值不重复,就可以正常工作。

关于c - 变量与存储在数组中的值的高效匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014846/

相关文章:

将 C 编译成 MIPS

c - 字符串末尾的空字符 '\0'

android - 这个 DEFINed 常量的值是多少?

python - 在 Python 脚本中找出当前的 linux 运行级别

arrays - 如何从 Typescript 中的数组获取不同的值

c - 为什么这个特定的代码会抛出异常?

sql - Hadoop:创建数据库管理器时出错

linux - 尝试为 Riscv 编译 FreeRtos。错误 : Instruction csrr requires absolute expression

php - 拆分字符串形成多维数组键?

c - 如何定义一个全局数组(获取另一个函数的长度)?