Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/65: Рейтинг темы: голосов - 65, средняя оценка - 4.89
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390

Самый быстрый способ решения задачи a+b

15.11.2014, 17:34. Показов 12915. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
несколько раз ходил на олимпиады, во многих из них в пробном туре даётся задача а+б, решаю её стандартным способом:

C++
1
2
cin >> a >> b;
cout << a+b;
но вот проблема, каждый раз решение моей программой самое долгое, в то время как у других в 20 раз быстрее, как так?

помню давно было у когото меньше милисекунды, то есть 0.???, в то время как у меня около 20мс.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2014, 17:34
Ответы с готовыми решениями:

Самый быстрый способ дополнить вектор массивом
есть вектор заполненный нулями: vector&lt;int&gt; v(100000); есть большой массив: int ar; for (int i = 0; i &lt; 100000;...

Считать квадратную матрицу. Какой самый быстрый способ это сделать?
Какие самые быстрые способы считывания в с++? Пример : мне надо считать квадратную матрицу. Какой самый быстрый способ это сделать?

Memory shift или самый быстрый способ перемещения блока памяти
int* dataField = new int{0}; for (int i = 0; i &lt; 50; i++) dataField = 777; //тут должен быть memory shift delete dataField;...

46
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
15.11.2014, 19:37  [ТС]
Студворк — интернет-сервис помощи студентам
в смысле по скорости они одинаковые

Добавлено через 54 секунды
я не очень сильный программист, начинающий скорее, не подскажете где можно изучить эти ассемблерные вставки?
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
15.11.2014, 19:37
не подскажете каким образом можно засечь время исполнения кода, а то я вроде примерчик нашел
лови
C++
1
2
3
4
5
unsigned int start_time =  clock();
...//алгоритм
  unsigned int end_time = clock(); // конечное время
    unsigned int search_time = end_time - start_time; // искомое время
    cout<<search_time<<endl;
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
15.11.2014, 19:39  [ТС]
и ассмеблерные вставки компиляторами g++ и gcc не компилируются:
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.11.2014, 19:46
Цитата Сообщение от Krock21rus Посмотреть сообщение
я не очень сильный программист, начинающий скорее, не подскажете где можно изучить эти ассемблерные вставки?
Сначала C++ изучи, а потом уже за ассемблерные вставки берись.
Цитата Сообщение от Krock21rus Посмотреть сообщение
и ассмеблерные вставки компиляторами g++ и gcc не компилируются:
Я же написал выше, что Visual Studio компилирует.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
15.11.2014, 19:56
Цитата Сообщение от KitoChimoto Посмотреть сообщение
а не подскажете каким образом можно засечь время исполнения кода, а то я вроде примерчик нашел
Через rdtsc.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
15.11.2014, 20:18
Цитата Сообщение от Krock21rus Посмотреть сообщение
и ассмеблерные вставки компиляторами g++ и gcc не компилируются:
Там просто другой синтаксис ассемблерных вставок. Все там комплируется.

Добавлено через 5 минут
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
mov eax, a;
mov ebx, b;
add eax, ebx;
mov a, eax;
формат (один из) инструкции add
add r/m, r
т.е. твой код можно сократить ровно в 2 раза
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.11.2014, 20:21
Цитата Сообщение от Kastaneda Посмотреть сообщение
т.е. твой код можно сократить ровно в 2 раза
Это не мой код. Я не знаю ассемблер.
0
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
15.11.2014, 20:27  [ТС]
я компилировал через visual studio, но на олимпиадах нет компилятора такого.
другой синтаксис это какой? где это узнать?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.11.2014, 20:36
Цитата Сообщение от Krock21rus Посмотреть сообщение
я компилировал через visual studio, но на олимпиадах нет компилятора такого.
Значит, твоя олимпиада очень низкого уровня. На ACM-подобных олимпиадах всегда есть Microsoft Visual C++ и GNU C++.
До сих пор не видел, чтобы на олимпиадах был компилятор ассемблера.
А так на нормальных олимпиадах и Python, и Haskell, и D, и Java, и, C#, и Borland Delphi, и ещё всякие разные компиляторы имеются.
0
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
15.11.2014, 20:51
Ого, то есть время выполнения можно значительно сократить через ассемблерные вставки? Даже если ими заменять обычные операции типа присваивания и арифметики? Не могли бы ссылочку про Ассемблер и про его синтаксис скинуть? И вообще так важно время выполнения одной команды? Вроде при О-нотации эти константные значения времени отбрасываются вовсе
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
15.11.2014, 20:54
Цитата Сообщение от tnk500 Посмотреть сообщение
Не могли бы ссылочку про Ассемблер и про его синтаксис скинуть?
https://www.cyberforum.ru/asse... 05284.html
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
15.11.2014, 21:16
Цитата Сообщение от tnk500 Посмотреть сообщение
Ого, то есть время выполнения можно значительно сократить через ассемблерные вставки?
Только при условии что вы пишете на этом ассемблере лучше компилятора C++ (если ассемблер знаете только со словарем, 99% что компилятор сделает лучше). При этом переносимость кода будет чуть более чем нулевая. То что у разных процессоров и набор ассемблерных инструкций будет различаться это еще полбеды. Так ведь от компилятора к компилятору еще и синтаксис ассемблерных вставок гулять будет. Короче, оправдано это лишь как последнее средство оптимизации. Иначе слишком много сопутствующего геморроя.
0
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
15.11.2014, 21:32
Самое быстрое, что знаю я для ввода и вывода данных(ведь именно в этом здесь проблема), так это вот это. Компилится не везде, но на олимпиадах если надо впихнуть что-нибудь, то помогает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include <cstdio>
using namespace std;
typedef long long  ll;
 
ll n, m, i, j, k;
 
 
#define putcx _putchar_nolock
#define getcx _getchar_nolock
 
inline void inp(ll &n)
{
    n = 0;
    ll ch = getcx(); ll sign = 1;
    while (ch < '0' || ch > '9')
    { 
        if (ch == '-')
            sign = -1; 
        ch = getcx(); 
    }
    while (ch >= '0' && ch <= '9')
        n = (n << 3) + (n << 1) + ch - '0', ch = getcx();
    n = n*sign;
    //(n<<3)+(n<<1) + ch - '0'== n*10 + ch-'0'
}
 
inline ll ab(ll &x)
{
    return x>0 ? x : -x;
}
 
void put(ll x)
{
    if(x)
    {
        put(x/10);
        putcx(x%10+'0');
    }
}
 
inline void out(ll x)
{
    if(x)
    {
        if(x<0) putcx('-');
        put(ab(x));
    }
    else
        putcx('0');
}
 
int main()
{
    //freopen("input.txt","r",stdin);
    n = 10;
    ll x;
    for (ll i = 0; i<n; ++i)
    {
        inp(x);
        out(x+1);
    }
    return 0;
}
1
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
16.11.2014, 10:11  [ТС]
_putchar_nolock и _getchar_nolock
не находит такую функцию
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,345
16.11.2014, 11:50
Что-то ветка перешла уже на вторую страницу, но содержит лишь какую-то мешанину из несвязанных вещей.

Во-первых, самым быстрым способом решения задачи 'a+b' является код 'a+b'. Компилятор сам сгенерирует оптимальный код для вычисления такого элементарного сложения. Никакие "ассемблерные вставки" ускорить вычисление 'a+b' вам не помогут. В лучшем случае вы получите код, идентичный по производительности сгенерированному компилятором. В среднем случае ваши "ассемблерные вставки" будут работать медленнее. В худшем случае они будут работать неправильно.

Во-вторых, скорость ввода-вывода никакого отношения к задаче 'a+b' не имеет. Поэтому не понятно, почему скорость ввода-вывода тут вообще обсуждается в теме под названием "Самый быстрый способ решения задачи a+b". Отдельная тема: какой смысл вообще обсуждать скорость форматированного ввода-вывода??? Где, кому и когда это было нужно?
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
16.11.2014, 11:54
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-вторых, скорость ввода-вывода никакого отношения к задаче 'a+b' не имеет. Поэтому не понятно, почему она тут вообще обсуждается в теме под названием "Самый быстрый способ решения задачи a+b".
как же это не имеют, если операции ввода-вывода занимают на порядки больше времени, чем сама a+b?зачем обсуждать ассемблерный код сложения, если изначально ясно, что тормозит не оно, а ввод-вывод?!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,345
16.11.2014, 11:58
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
как же это не имеют, если операции ввода-вывода занимают на порядки больше времени
Да, это так. Но я не представляю задачи, в которой ускорение форматированных операций ввода вывода (на уровне милисекунд) имело бы какое-то значение.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
16.11.2014, 12:03
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
е представляю задачи, в которой ускорение форматированных операций ввода вывода (на уровне милисекунд) имело бы какое-то значение.
даны целые a и b - вывести a+b
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,345
16.11.2014, 12:09
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
даны целые a и b - вывести a+b
Для такой задачи оптимизация и замер времени выполнения на уровне милисекунд не имеет никакого смысла. Время выполнения операции ввода-вывода (как вы ее ни реализуйте) будет подвережена "дребезгу", на порядки превосходящему ту точность, с которой вы пытаетесь делать замеры.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
16.11.2014, 12:22
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
ля такой задачи оптимизация и замер времени выполнения на уровне милисекунд не имеет никакого смысла.
какую же задачу ты в этой теме решаешь? Думал, тут что-то другое решают?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2014, 12:22

Самый быстрый способ посчитать сумма элементов матрицы, находящихся в матрице
Здравствуйте форумчане! Подскажите мне самый быстрый способ нахождении суммы элементов матрицы, находящихся на главной диагонали...

Каков самый быстрый способ узнать количество строк в оргомном текстовом файле в Windows?
Есть текстовый файл с кучей строк (размер файла ~ 1Гб). Как можно максимально быстро узнать кол-во строк в этом файле? Если делать тупо...

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

Найти более оптимальный способ решения задачи
Вот задача: Имеется две таблицы: 1) Items (Id identity(1,1) int, Name varchar(50)) в которой хранятся составляющие продукты и...

Самый быстрый алгоритм Факториала
Всем привет ! Как можно реализовать факториал за log(n) . Помогите плиз ! Знаю ,что можно рекурсией . Но этот алгоритм не быстрый. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru