1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
class SparseVector:
class Node:
def __init__(self, index, value):
self.index = index
self.value = value
self.next = None
def __init__(self, indices, values):
self.head = self.Node(-1, 0) # Dummy node
current = self.head
for index, value in zip(indices, values):
current.next = self.Node(index, value)
current = current.next
def dotProduct(self, vec):
p1 = self.head.next
p2 = vec.head.next
result = 0
while p1 is not None and p2 is not None:
if p1.index == p2.index:
result += p1.value * p2.value
p1 = p1.next
p2 = p2.next
elif p1.index < p2.index:
p1 = p1.next
else:
p2 = p2.next
return result
# Example usage
# Example 1
indicesX1 = [0, 3, 4]
valuesX1 = [1, 4, 5]
X1 = SparseVector(indicesX1, valuesX1)
indicesY1 = [0, 3]
valuesY1 = [2, 7]
Y1 = SparseVector(indicesY1, valuesY1)
print("Dot Product:", X1.dotProduct(Y1)) # Expected output: 30
# Example 2
indicesX2 = [0, 2]
valuesX2 = [1, 3]
X2 = SparseVector(indicesX2, valuesX2)
indicesY2 = [2]
valuesY2 = [2]
Y2 = SparseVector(indicesY2, valuesY2)
print("Dot Product:", X2.dotProduct(Y2)) # Expected output: 6
|