определить, все ли байты равны в потоке - PullRequest
0 голосов
/ 06 октября 2010

Я ищу алгоритм, чтобы проверить, все ли байты в потоке или буфере равны.Существует ли какой-либо алгоритм для проверки этого?

Я знаю, эту проблему можно решить, пройдя через поток и сравнив каждый элемент с первым элементом, но я ищу лучшее решение.поток может иметь тысячи элементов.

1 Ответ

2 голосов
/ 06 октября 2010

Каждый байт должен быть просмотрен и проверен, поэтому возможности оптимизации кажутся ограниченными. Я могу думать о двух возможностях:

Знаете ли вы что-нибудь о вероятности изменчивости? Например, есть ли основания полагать, что различия более вероятны на одном конце буфера или на другом. Вы можете проверить некоторые вводимые данные выборки статистически и посмотреть, есть ли какая-либо польза от начала сравнения на одном конце или другом.

Еще одна возможность: вы можете работать в дюймах или длинных? В C вы можете играть трюки с указателями, чтобы обрабатывать 4 смежных байта как int, а затем делать сравнения int, а не байтовые сравнения. Не очевидно, что это должно быть быстрее, чем в 4 раза больше байтовых сравнений, но, возможно, это может быть.

Это один из немногих случаев, когда даже ручная сборка может принести некоторые преимущества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...