| 136 | namespace coding |
| 137 | { |
| 138 | size_t BWT(size_t n, uint8_t const * s, uint8_t * r) |
| 139 | { |
| 140 | std::vector<size_t> sa(n); |
| 141 | base::Skew(n, s, sa.data()); |
| 142 | |
| 143 | size_t result = 0; |
| 144 | for (size_t i = 0; i < n; ++i) |
| 145 | { |
| 146 | if (sa[i] != 0) |
| 147 | { |
| 148 | r[i] = s[sa[i] - 1]; |
| 149 | } |
| 150 | else |
| 151 | { |
| 152 | result = i; |
| 153 | r[i] = s[n - 1]; |
| 154 | } |
| 155 | } |
| 156 | return result; |
| 157 | } |
| 158 | |
| 159 | size_t BWT(std::string const & s, std::string & r) |
| 160 | { |