Как стать автором
Обновить
-1
0

Пользователь

Отправить сообщение
user@ThinkPad-L380:~$ ./test
Result: 0 15000
Finished in 0.708s

user@ThinkPad-L380:~$ ./testclang
Result: 0 15000
Finished in 0.700s

Сборка
g++ test.cpp -o test -O3
clang++ test.cpp -o testclang -O3

Версии
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
clang version 6.0.0-1ubuntu2

Код на 20 000 символов занимает ~1.25 секунды в среднем.
Не очень понятно зачем сравнивать Си-шную версию на 15 000 символов и версию на Си++ на 20 000 символов. Ведь длина строки закладывает количество итераций обоих циклов. Статья интересная, но выглядит как «желаемое за действительное».

В коде поставил нормальный замер скорости, именно по вызову процедуры.
#include <algorithm>
#include <numeric>
#include <vector>
#include <string>

static size_t lev_dist(const std::string& s1, const std::string& s2)
{
    const size_t s1_size = s1.size();
    const size_t s2_size = s2.size();

    std::vector<int64_t> v0(s2_size + 1, 0);
    std::vector<int64_t> v1(s2_size + 1, 0);

    for (size_t i = 0; i < s1_size; i += 1)
    {
        v1[0] = i + 1;

        for (size_t j = 0; j < s2_size; j += 1)
        {
            auto delCost = v0[j + 1] + 1;
            auto insCost = v1[j    ] + 1;
            auto subCost = s1[i] == s2[j] ? v0[j] : (v0[j] + 1);
            v1[j + 1] = std::min({delCost, insCost, subCost});
        }

        std::swap(v0, v1);
    }

    return v0[s2_size];
}

int main()
{
    std::string s1(15000, 'a');
    std::string s2(15000, 'a');
    std::string s3(15000, 'b');

    clock_t time_start = clock();
    auto r1 = lev_dist(s1, s2);
    auto r2 = lev_dist(s1, s3);
    clock_t time_delta = clock() - time_start;
    fprintf (stdout,
             "Result: %lu %lu\nFinished in %.3fs\n",
             r1, r2,
             ((double)time_delta) / CLOCKS_PER_SEC);
    return 0;
}
При этом спрос будет только расти: во времена, когда десять строчек кода оборачивают в Electron и получают приложение или расширение, которое потребляет ресурсов больше, чем было у целой рабочей станции еще десять-пятнадцать лет назад, размениваться на такую «мелочь», как оптимизация хранения данных и экономия дискового пространства, никто не собирается.

Для таких разработчиков в аду приготовлен специальный котёл повышенной температуры.
Для меня, самым серьезным прорывом в С++ были:
1. Работа с файловой системой.
2. Работа с многопоточностью.
3. Работа в функциональном стиле.

Я ожидал, что наконец добавят поддержку сетевой работы, интегрируют asio в стандартную библиотеку. Из этих мелких фундаментальных инстурментов, понравился rvalue, не хватало его для оптимизации логики. Видимо сетевая работа в 2020 неактуальна для C++, спасибо хоть многопоточность есть из коробки. Подождем до 2030, может добавят.
Кнопочки убогие какие-то.
Вот нормальные у наших же payneteasy.
acquiring.vtb.ru/catalog/terminaly/proiz-is-payneteasy
Лично меня Intel огорчил своей политикой после сборки на LGA 2011-3. Покупаешь топовое десктопное железо. Проходит небольшое время, Intel выпускает поколение процессоров под этот же сокет прибавив мощности и цены. Спустя еще некоторое время, выходит очередное поколение, мощность существенно выше, а цена чуть ниже, но другой сокет и будьте добры занести 15-20 т.р. дополнительно за мат. плату аналогичных ТТХ. Получается так, что в рамках одного сокета LGA 2011-3, десктопные процы практически не эволюционировали, апгрейд просто не на что делать в рамках сокета. Спасибо конечно, что процессоры продают отдельно, не впаяв в мат. плату, только разницы нет :-)

Вот после такого, принципиально уже не хочется делать апгрейд на Intel, лояльность AMD выше.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность