请教一个算法题-是否存在所有元素异或结果为 0 的子数组

2018-09-27 22:30:58 +08:00
 sdushn
2295 次点击
所在节点    程序员
13 条回复
sdushn
2018-09-27 22:32:24 +08:00
想看看大家的思路和想法,无需给出解题代码,我也继续想想
ejq
2018-09-27 22:35:03 +08:00
异或前缀和
sdushn
2018-09-27 22:38:54 +08:00
暴力解的话,应该要计算 2 的 N 次方吧,每个数都有 2 种可能性,题目给的 N 比较大,M 比较小,应该不能用暴力解
ejq
2018-09-27 22:52:42 +08:00
@sdushn 欸,这里的子数组的意思是 sub sequence 么……
高斯消元
ejq
2018-09-27 22:58:08 +08:00
二进制异或意义下的高斯消元,原数组看成一个 N*M 的矩阵

如果矩阵的秩没到 N,那么就是 YES

=》 所以如果 N > M 直接 YES ?
sdushn
2018-09-27 22:59:45 +08:00
@ejq {0, 1, 2, 3, 5}的异或前缀和是{0, 1, 3, 0, 5},但是如果改变顺序{0, 1, 5, 2, 3},异或前缀和就变成了{0, 1, 5, 2, 3},这样该如何判断呢,我的理解如果是异或和为零的连续子段的话用这个方法是可行的,但是这里的字段不一定连续,似乎不太适用
zsh1995
2018-09-27 22:59:55 +08:00
今天搜狗的题?
ejq
2018-09-27 23:00:12 +08:00
计数的话,答案就是 2^(N-R) - 1 (N >= R)

R 是矩阵的秩
sdushn
2018-09-27 23:06:58 +08:00
@ejq 如果是{9,8,1}这样的可能就不符合 N>M,但是也是 YES, {0, 1, 3, 5, 9}这个例子其实 M 可以是 4,这样就是 N>M 输出 no 了。 不过我感觉确实应该用矩阵去解啊,矩阵知识忘差不多了,补一下去
sdushn
2018-09-27 23:17:50 +08:00
@ejq {0, 1, 3, 5, 9}这个的秩是不是 4 啊,好像应该把 0 元素排除掉,如果秩小于行数,那就 yes,等于就 no 了
sdushn
2018-09-27 23:22:06 +08:00
@ejq 想明白了,这个问题确实应该用矩阵来解,多谢多谢
CDEGAE
2018-09-27 23:52:58 +08:00
动态规划可解,复杂度 O(N*M),解法可以参见这道题: http://codeforces.com/contest/1053/problem/B,不过 2 的 M 次方超过了 int 的范围,应该要当成字符串去处理。
sdushn
2018-09-28 00:06:05 +08:00
@CDEGAE 最开始我也想用动态规划的,没太想明白怎么规划,今天有些晚了,明天研究,多谢啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493340

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX