Intern
Коде дар Python нависед, ки маҳсулоти скалярии ду векторро, ки бо RLE фишурда шудаанд, дар як гузариш ҳисоб мекунад.
sobes.tech AI
Ҷавоб аз AI
python
Функция для вычисления скалярного произведения двух RLE-сжатых векторов за один проход
Каждый вектор представлен списком кортежей (значение, количество)
def rle_dot_product(rle_vec1, rle_vec2): i, j = 0, 0 result = 0 count1, count2 = 0, 0
while i < len(rle_vec1) and j < len(rle_vec2):
val1, len1 = rle_vec1[i]
val2, len2 = rle_vec2[j]
# Определяем минимальное количество для текущих блоков
min_count = min(len1 - count1, len2 - count2)
# Добавляем произведение значений, умноженное на количество совпадающих элементов
result += val1 * val2 * min_count
# Обновляем счетчики
count1 += min_count
count2 += min_count
# Если достигли конца блока в первом векторе, переходим к следующему
if count1 == len1:
i += 1
count1 = 0
# Если достигли конца блока во втором векторе, переходим к следующему
if count2 == len2:
j += 1
count2 = 0
return result
Пример использования
vec1 = [(1, 3), (2, 2), (0, 4)] # соответствует [1,1,1,2,2,0,0,0,0] vec2 = [(0, 2), (3, 3), (2, 4)] # соответствует [0,0,3,3,3,2,2,2,2]
print(rle_dot_product(vec1, vec2)) # Выводит скалярное произведение