Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexdremov/1cqualification
Практическое задание для отбора на кафедру КИС
https://github.com/alexdremov/1cqualification
algorithms bigdata cpp knuth-morris-pratt strings suffix-tree ukkonen
Last synced: 1 day ago
JSON representation
Практическое задание для отбора на кафедру КИС
- Host: GitHub
- URL: https://github.com/alexdremov/1cqualification
- Owner: alexdremov
- Created: 2022-03-31T06:53:00.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-31T17:55:49.000Z (almost 3 years ago)
- Last Synced: 2024-11-16T15:26:43.947Z (2 months ago)
- Topics: algorithms, bigdata, cpp, knuth-morris-pratt, strings, suffix-tree, ukkonen
- Language: C++
- Homepage:
- Size: 594 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 1CQualification — String search
В решении используется сразу несколько алгоритмов и рассматривается возможность,
что файл может не поместиться в оперативную память.## Установка
```bash
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
```## Использование
```
Search substring in a file, enter pattern in stdin. Type !exit to exit
Usage:
StringMatch [OPTION...]-f, --file arg File name
-s, --single Get first entry only
-x, --extralarge Extra large file search. O(nm) solution but can work
with extra large data
-b, --buffSize arg Buffer size for extra large mode in bytes. 100Mb by default
-v, --verbose Verbose (default: true)
-h, --help Print usage
```## Алгоритм
В случае большого файла, он разбивается на пересекающиеся куски и каждый кусок обрабатывается как указано ниже.
Для `pattern` размеров 1, 2, 4, 8 используется оптимизация маленьких строк: `pattern` хранится в `uint{16, 32, 64}_t`. Для однобайтовых `pattern` используется `strchr`.
В остальных случаях применяется два алгоритма:
- Только первое вхождение
В этом случае используется сжатый бор. Построение алгоритмом Укконена.
- Асимптотика построения: O(|text|)
- Асимптотика ответа: O(|pattern|)
- Все вхождения
Используется алгоритм Кнута-Морриса-Пратта
- Асимптотика построения: O(1)
- Асимптотика ответа: O(|text|)## Тестирование
```bash
mkdir testbuild
cd testbuild
cmake ..
make
ctest
```## Doxygen документация
link