我的任务是为一个项目编写一个算法。基本上,我扫描数据以获得唯一的项并将它们的位置存储在一个数组中。所以我得到了可变长度的多个数组。现在我必须对所有这些数组和它们的元素进行元素操作。请注意,这些总是被排序的(如果这很重要的话)
a = [0, 7, 13, 18]
b = [1, 2, 8, 10]
c = [0, 3, 5, 6, 7]
当前的解决方案是一个非常基本的循环解决方案,我循环遍历每个数组,并将其元素与每个其他数组及其元素进行比较。它只适用于少量的数组,并且,正如您可以想象的那样,当我有许多具有自己的数组/列表的唯一项时,它就不能很好地工作。
def add(a, b):
result = []
for i in range(len(a)):
for j in range(len(b)):
result.append(a[i] + b[j])
return result
a = [0, 7, 13, 18]
b = [1, 2, 8, 10]
c = [0, 3, 5, 6, 7]
total_unique_items = [a, b, c]
calc = []
for i in range(len(total_unique_items)):
for j in range(i+1, len(total_unique_items)):
calc.append(add(total_unique_items[i], total_unique_items[j]))
print(calc)
我知道有像zip这样的python解决方案,但是我的老师要求这里有一个通用的独立于语言的解决方案。 我不太确定如何处理这个问题。一种方法是使用树或图这样的数据结构并遍历它?另一种方法是在循环的第i次迭代中对数组的所有第i个元素执行操作。这样,主循环将运行最长数组的长度。我只是真的很困惑,我很想知道我应该走的方向。 问题来源StackOverflow 地址:/questions/59382875/generic-algorithm-for-element-wise-operation-between-hundreds-of-lists
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
理解你的问题后,看起来你想要一个高效的方法来对多个已排序数组执行元素级操作(比如加法),而不依赖于特定语言的特性如Python的zip
。考虑到这一点,我们可以设计一个更通用且效率更高的算法。这里的关键是利用这些数组已经排序的事实。
合并排序数组:首先,可以考虑将所有数组合并成一个大的有序数组,同时记录每个元素来自哪个原始数组。这可以通过优先队列(最小堆)实现,每次从各个数组头部取出最小值加入结果,并记录其来源。
元素级操作:一旦有了这个合并后的有序数组,就可以遍历它,对于相同位置的元素(由于已排序,它们自然会相邻或重叠),执行所需的运算。因为数组是有序的,所以处理逻辑相对直接。
存储结果:根据运算结果和元素的来源信息,重新组织数据到新的数组中。
# 假设有一个函数可以合并并标记来源
def merge_and_tag(arrays):
# 实现细节略,使用优先队列等方法合并数组并记录元素来源
# 假设这是合并并标记后的结构简化表示
merged = merge_and_tag([[0, 7, 13, 18], [1, 2, 8, 10], [0, 3, 5, 6, 7]])
# 元素级操作函数,这里以加法为例
def element_wise_operation(merged_data, operation=lambda x, y: x + y):
result = []
current_source = merged_data[0]['source']
current_list = [merged_data[0]['value']]
for item in merged_data[1:]:
if item['source'] == current_source:
current_list.append(item['value'])
else:
# 对当前列表应用操作
result.append(operation(*current_list))
current_source = item['source']
current_list = [item['value']]
# 处理最后一个列表
result.append(operation(*current_list))
return result
# 应用操作
result = element_wise_operation(merged)
请注意,上述伪代码仅提供了一个概念性的解决方案框架,实际实现时需要根据具体需求调整。例如,merge_and_tag
函数的具体实现可能涉及复杂的数据结构操作,而element_wise_operation
则需根据实际操作逻辑进行调整。
虽然这个问题更多地涉及到算法设计,但如果你在处理大规模数据集时遇到性能瓶颈,可以考虑使用阿里云的产品和服务来加速计算过程:
不过,基于你的描述,优化算法本身可能是最直接有效的解决途径。