Из того, что я видел в прошлом, StackOverflow, похоже, нравятся задачи программирования, такие как быстрая задача "char to string" , которая получила десятки ответов. Это задача оптимизации: возьмите очень простую функцию и посмотрите, сможете ли вы придумать более разумный способ ее выполнения.
У меня была функция, которую я хотел дополнительно оптимизировать в течение достаточно долгого времени, но я всегда нахожу, что в моих оптимизациях есть некоторые дыры, которые приводят к неправильному выводу - какой-то редкий особый случай, когда они не работают. Но, учитывая эту функцию, я всегда считал, что можно добиться большего успеха, чем эта.
Функция принимает входной поток данных (фактически случайные биты с точки зрения энтропии) и упаковывает его в единицу NAL. Это включает размещение escape-кодов: любая последовательность байтов 00 00 00, 00 00 01, 00 00 02 или 00 00 03 заменяется на 00 00 03 XX, где XX - это последний байт исходной последовательности. Как можно догадаться, они размещаются только примерно в 1 на каждые 4 миллиона байтов ввода, учитывая шансы против такой последовательности - так что это проблема, когда человек ищет огромный объем данных и почти ничего не делает для это за исключением очень редких случаев. Однако, поскольку «выполнение чего-либо» включает вставку байтов , это усложняет задачу. Текущий неоптимизированный код следующий C:
src и dst - указатели на массивы байтов, а end - указатель на конец входных данных.
int i_count = 0;
while( src < end )
{
if( i_count == 2 && *src <= 0x03 )
{
*dst++ = 0x03;
i_count = 0;
}
if( *src == 0 )
i_count++;
else
i_count = 0;
*dst++ = *src++;
}
Общие размеры входных данных для этой функции варьируются примерно от 1000 до 1000000 байт данных.
Мои первые идеи включают в себя функцию, которая (каким-то образом) быстро ищет входные данные для ситуаций, когда требуется escape-код, чтобы избежать более сложной логики в подавляющем большинстве входных данных, где не нужно размещать escape-коды.