def unrank(self, r): """ Returns the subset of s that has rank k. EXAMPLES:: sage: Subsets(3).unrank(0) {} sage: Subsets([2,4,5]).unrank(1) {2} sage: Subsets([1,2,3]).unrank(257) Traceback (most recent call last): ... IndexError: index out of range """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: k = ZZ_0 n = self._s.cardinality() bin = Integer(1) while r >= bin: r -= bin k += 1 bin = binomial(n, k) return self.element_class( [self._s.unrank(i) for i in choose_nk.from_rank(r, n, k)])
def unrank(self, r): """ Returns the subset of s that has rank k. EXAMPLES:: sage: Subsets(3).unrank(0) {} sage: Subsets([2,4,5]).unrank(1) {2} sage: Subsets([1,2,3]).unrank(257) Traceback (most recent call last): ... IndexError: index out of range """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: k = ZZ_0 n = self._s.cardinality() bin = Integer(1) while r >= bin: r -= bin k += 1 bin = binomial(n,k) return self.element_class([self._s.unrank(i) for i in choose_nk.from_rank(r, n, k)])
def unrank(self, r): """ EXAMPLES:: sage: c = Combinations([1,2,3], 2) sage: c.list() == map(c.unrank, range(c.cardinality())) True """ return map(lambda i: self.mset[i], from_rank(r, len(self.mset), self.k))
def unrank(self, r): """ EXAMPLES:: sage: c = Combinations([1,2,3], 2) sage: c.list() == map(c.unrank, range(c.cardinality())) True """ return [self.mset[i] for i in from_rank(r, len(self.mset), self.k)]
def unrank(self, r): """ EXAMPLES:: sage: c = Combinations([1,2,3]) sage: c.list() == map(c.unrank, range(c.cardinality())) True """ k = 0 n = len(self.mset) b = binomial(n, k) while r >= b: r -= b k += 1 b = binomial(n,k) return map(lambda i: self.mset[i], from_rank(r, n, k))
def unrank(self, r): """ EXAMPLES:: sage: c = Combinations([1,2,3]) sage: c.list() == map(c.unrank, range(c.cardinality())) True """ k = 0 n = len(self.mset) b = binomial(n, k) while r >= b: r -= b k += 1 b = binomial(n, k) return [self.mset[i] for i in from_rank(r, n, k)]
def unrank(self, r): """ Returns the subset of s that has rank k. EXAMPLES:: sage: Subsets(3,2).unrank(0) {1, 2} sage: Subsets([2,4,5],2).unrank(0) {2, 4} sage: Subsets([1,2,8],3).unrank(42) Traceback (most recent call last): ... IndexError: index out of range """ lset = self._ls n = len(lset) if self._k > n or r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: return self.element_class([lset[i] for i in choose_nk.from_rank(r, n, self._k)])
def unrank(self, r): """ Return the subset of ``s`` of size ``k`` that has rank ``r``. EXAMPLES:: sage: Subsets(3,2).unrank(0) {1, 2} sage: Subsets([2,4,5],2).unrank(0) {2, 4} sage: Subsets([1,2,8],3).unrank(42) Traceback (most recent call last): ... IndexError: index out of range """ lset = self._ls n = len(lset) if self._k > n or r >= self.cardinality() or r < 0: raise IndexError("index out of range") else: return self.element_class([lset[i] for i in choose_nk.from_rank(r, n, self._k)])
def unrank(self, r): """ Return the subset which has rank ``r``. EXAMPLES:: sage: from sage.combinat.subset import SubsetsSorted sage: S = SubsetsSorted(range(3)) sage: S.unrank(4) (0, 1) """ r = Integer(r) if r >= self.cardinality() or r < 0: raise IndexError("index out of range") k = ZZ_0 n = self._s.cardinality() binom = ZZ.one() while r >= binom: r -= binom k += 1 binom = binomial(n,k) C = choose_nk.from_rank(r, n, k) return self.element_class(sorted([self._s.unrank(i) for i in C]))