Size: a a a

2021 July 05

DP

Defragmented Panda in pro.algorithms
слишком сложно.

я не понимаю.
источник

VK

Vyacheslav Koval in pro.algorithms
предполагается непрерывная последовательность
abcd..xyzabcd...
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
🙃, понял. В любом случае спасибо
источник

VK

Vyacheslav Koval in pro.algorithms
написал такую функцию (на JS), но для больших строк долго работает
function getAllSubstrings(str) {
 let len = str.length;
 let seen = {};

 for (let i = 0; i < len; i++) {
     for (let j = i + 1; j < len + 1; j++) {
       const substr = str.slice(i, j);
       if (! seen[substr]) {
         seen[substr] = 1;
       } else {
         ++seen[substr];
       }
     }
 }
 return seen;
}

console.log(getAllSubstrings('abc'))
{ a: 1, ab: 1, abc: 1, b: 1, bc: 1, c: 1 }
источник
2021 July 06

AB

Artem Brezhnev in pro.algorithms
От slice можно избавиться
источник

R

Raxkas in pro.algorithms
Если взять число M, и совместить вместе в порядке возрастания все двоичные записи чисел от 0 до 2^M-1 (дозаполненные слева нулями до длины, равной M), то длина получившейся строки S будет M*2^M.

Для любой подстроки S длины хотя бы 3*M можно однозначно восстановить границы, на которых заканчивается одно число и начинается другое. И засчёт этого восстановить информацию о стартовой и конечной позиции.
То есть любая такая подстрока уникальна.

Средняя длина такой подстоки будет O(N), а количество таких подстрок O(N^2).

В результате, для одного лишь создания результата нам в худшем случае понадобится O(N^3) времени и памяти.

То есть при текущем формате результата этот алгоритм асимптотически оптимален
источник

CD

Constantine Drozdov in pro.algorithms
эм... вообще-то список всех подстрок с количеством раз, сколько встречается, можно за линию времени и памяти построить (но выписать за линию времени не получится :) )
источник

R

Raxkas in pro.algorithms
> при текущем формате результата
источник

CD

Constantine Drozdov in pro.algorithms
при текущем формате результата - за размер ответа, очевидно
источник

VK

Vyacheslav Koval in pro.algorithms
Всем привет! А каким образом можно избавиться?
источник

AB

Artem Brezhnev in pro.algorithms
for (let i = 0; i < len; i++) {
     let substr = "";
     for (let j = i + 1; j < len + 1; j++) {
        substr+=str[j-1];
        ...
     }
}
источник

AB

Artem Brezhnev in pro.algorithms
Только там нужно немного по-другому делать, так как это JS, а в нём конкатенация строк за O(n+m)
источник

A

AR in pro.algorithms
Да элементарно индексы только хранить. Если вызывающей стороне нужна строка, то ее можно получить в любой момент. Правда, усложнится заполнение списка.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
string_view подойдёт, если на С++ делать seen.
unordered_map<string_view, int> seen;
источник

MB

Mikail Bagishov in pro.algorithms
Тут люди JS-ом обмазываются.
источник

 P

 ‌‌Gleb Pilipets... in pro.algorithms
Какого списка, если здесь хеш-таблица?
источник

VK

Vyacheslav Koval in pro.algorithms
на самом деле нужно количество этих подстрок, но сделал с помощью хэша для удаленя дублей
источник

VK

Vyacheslav Koval in pro.algorithms
источник

A

AR in pro.algorithms
Да все равно как называть. В js ассоциативный массив, в c++ map. Потенциально можно результат и в двухмерный массив занести, да во что угодно.
источник

VK

Vyacheslav Koval in pro.algorithms
в js объект, в php ассоциативный массив, в perl хэш))
источник