Skip to content

Commit dedee8d

Browse files
committed
implemented alternate way of looping in the rank method
1 parent 847b705 commit dedee8d

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

src/sage/combinat/integer_vector.py

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -956,15 +956,11 @@ def rank(self, x):
956956
if sum(x) != self.n:
957957
raise ValueError("argument is not a member of IntegerVectors({},{})".format(self.n, None))
958958

959-
n, k = self.n, len(x)
960-
961-
r = binomial(k+n-1, n+1)
962-
959+
n, k, s = self.n, len(x), 0
960+
r = binomial(k + n - 1, n + 1)
963961
for i in range(k - 1):
964-
k -= 1
965-
n -= x[i]
966-
r += binomial(k + n - 1, n - 1)
967-
962+
s += x[k - 1 - i]
963+
r += binomial(s + i, i + 1)
968964
return r
969965

970966
def unrank(self, x):
@@ -1095,15 +1091,11 @@ def rank(self, x):
10951091
if len(x) != self.k:
10961092
raise ValueError("argument is not a member of IntegerVectors({},{})".format(None, self.k))
10971093

1098-
n, k = sum(x), self.k
1099-
1100-
r = binomial(n+k-1, k)
1101-
1094+
n, k, s = sum(x), self.k, 0
1095+
r = binomial(n + k - 1, k)
11021096
for i in range(k - 1):
1103-
k -= 1
1104-
n -= x[i]
1105-
r += binomial(k + n - 1, n - 1)
1106-
1097+
s += x[k - 1 - i]
1098+
r += binomial(s + i, i + 1)
11071099
return r
11081100

11091101
def unrank(self, x):
@@ -1335,15 +1327,10 @@ def rank(self, x):
13351327
if x not in self:
13361328
raise ValueError("argument is not a member of IntegerVectors({},{})".format(self.n, self.k))
13371329

1338-
n = self.n
1339-
k = self.k
1340-
1341-
r = 0
1330+
k, s, r = self.k, 0, 0
13421331
for i in range(k - 1):
1343-
k -= 1
1344-
n -= x[i]
1345-
r += binomial(k + n - 1, n - 1)
1346-
1332+
s += x[k - 1 - i]
1333+
r += binomial(s + i, i + 1)
13471334
return r
13481335

13491336
def unrank(self, x):

0 commit comments

Comments
 (0)