1

Consider a sequence $s$ of $n$ integers (let's ignore the specifics of their representation and just suppose we can read, write and compare them in $O(1)$ time with arbitrary positions). Denote $\text{supp}(s) = \left\{ x \in \mathbb{N} \;|\; x \in s \right\}$, the support set for $s$.

We are interested in obtaining a supporting sequence $s'$ of elements such that $\text{supp}(s) = \text{supp}(s')$; in other words, we want a sequence of elements, in any order and possibly with repetitions, with appearances of all of elements appearing in $s$ (and no others).

The minimum such sequence is any ordering of the actual support set for $s$. But - we don't need the minimum itself. In fact, we are given a size bound $m$, and must produce an $s'$ with $|s'| \leq m$.

What algorithmic approach would you suggest for producing $s'$, which would have meaningfully better than just obtaining the exact support set - in terms of worst-case time complexity?

This question is related to this one.

Notes:

  • The algorithm is not limited to just comparisons (so hashing is on the table if you like).
  • Obviously, the complexity cannot be any better than $\Theta(n)$, since you have to actually read all the input; and it can't be worse than $\Theta(n \log(n))$, with which complexity you can just obtain the exact support.
  • Constant-factor improvements are significant, e.g. fewer reads of each element, even if the $O(\cdot)$ or $\Theta(\cdot)$ class might be same. I'm hoping for something that depends on $m$ or $m - |s'|$ obviously.
einpoklum
  • 1,025
  • 6
  • 19

0 Answers0