Я хотел знать, какие алгоритмы они используют внутри и как разумно выбрать конкретный алгоритм для конкретной задачи? Например, если сортировка получает огромный входной файл, будут ли она использовать разные алгоритмы для разных размеров данных?
Это интересный вопрос (+1 за это). Я понятия не имею, каков ответ, но на вашем месте я бы посмотрел исходный код типичных утилит GNU, чтобы получить представление об их алгоритмах.
Разумно ли переключается grep при поиске различных наборов данных?
Я так не думаю. Не цитируйте меня, так как я не могу сказать вам со 100% уверенностью, но я действительно так не думаю. Философия вещей UNIX заключается в том, что одна вещь делает одну вещь и только одну вещь. Вот почему у нас есть несколько версий Grep ( grep
, egrep
, fgrep
).
Кроме того, идея состоит в том, чтобы делать одно и только одно во время выполнения. Разное поведение и алгоритмы могут быть настроены в качестве аргументов командной строки, так что одна и та же программа может действовать немного по-разному (и, возможно, немного более оптимизировано) между запусками. Хорошие примеры являются wc
и diff
командой.
Однако поведенческая адаптация основана на конфигурации (через аргументы строки cmd); они не меняют / не адаптируют поведение во время выполнения. Как правило, это ненужная сложность для типа артефактов, к которым стремятся инструменты UNIX.
Такая сложность больше подходит для более сложных, менее универсальных инструментов IMO.
grep
,egrep
илиfgrep
.