Поскольку вы хотите размножить два массива, мы должны предположить, что они имеют одинаковый размер.
Следовательно, ниже приведен простой способ их умножения - он имеет сложность времени O (n). Другие ответы также одинаково хорошо, вы можете выбрать любой один
a = [3, 2, 1]
b = [1, 2, 3]
a.size.times.collect { |i| a[i] * b[i] }
#=> [3, 4, 3]
Если время действительно сущности, то, вы можете использовать несколько потоков. Ниже представлена примерная программа, демонстрирующая концепцию. Вы можете использовать его на основе ваших конкретных потребностей.
a = [3, 2, 1]
b = [1, 2, 3]
num_cores = 2 # This decides number of threads, ideally equal to number of cores
ary_size = a.size
# We need to collect result of each thread as separate sub-array.
# We will use result array-of-array so that order of result is preserved
results = Array.new(num_cores, [])
# Divide the array indexes into equal parts
index_splits = (0...ary_size).each_slice(num_cores)
threads = []
# Process each sub-array in a thread of its own
index_splits.each_with_index do |ary, i|
threads << Thread.new do
results[i] = ary.collect {|j| a[j] * b[j] }
end
end
threads.each {|t| t.join}
p results.flatten
#=> [3,4,3]
@shivam жаль, на самом деле ту же тему, спасибо –
Его хорошо. Рад, что вы нашли то, что искали :) – shivam
Я снова открыл вопрос, потому что OP не ищет сумму. – Stefan