|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
||||||
Проверить результат умножения матриц31.03.2017, 18:31. Показов 2833. Ответов 22
Метки нет (Все метки)
Здравствуйте! Снова решил сдать задачу на сайте Дистанционная подготовка. Но программа не проходит по времени. Помогите, пожалуйста, оптимизировать код, если это возможно.
Вот ссылка на задачу: http://informatics.mccme.ru/mo... rid=1303#1 Ниже мой код:
0
|
||||||
| 31.03.2017, 18:31 | |
|
Ответы с готовыми решениями:
22
Функция умножения матриц Скорость умножения матриц Подпрограмма умножения 2 матриц |
|
14 / 14 / 14
Регистрация: 15.08.2016
Сообщений: 52
|
|
| 31.03.2017, 20:56 | |
|
Как вы вообще умудрились создать статический массив, указывая в количестве элементов переменную, а не константу?
1
|
|
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 31.03.2017, 21:26 [ТС] | |
|
Reidak, Спасибо за ваш ответ. Я объявлю его как динамический, если это ускорит скорость выполнения программы. Вы могли бы как-то помочь с оптимизацией? Код выполняется, но не проходит по времени
0
|
|
|
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
| 01.04.2017, 11:26 | |
|
Fixer_84, не пойму для чего строка 47. Мне кажется что она лишняя. Вместо sum в 42,45 строка сразу использовать C[j][i].
1
|
|
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
||||||
| 01.04.2017, 17:21 | ||||||
Если у тебя компилировалось то, что ты написал, то у тебя была проблема с излишним выделением памяти при каждой итерации большого цикла. Плюс, ты при нахождении несоответствия выходил только из цикла перебора j, хотя можно сразу вывод делать.
1
|
||||||
|
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
|
|||||||||||||
| 01.04.2017, 19:09 | |||||||||||||
1.Можно попробовать на чистом Си, fscanf читает быстрее cin, fprintf печатает куда быстрее fout. 2.Есть некая вероятность,что задачка поучительная и нужно изучить вот это - http://www.algolib.narod.ru/Math/Matrix.html Добавлено через 1 час 5 минут Код выше неверен. 51 строчка делает не то что задумывалось, не заметил, что в двух циклах сижу. И правда нужна лишняя переменная на проверку. Добавлено через 4 минуты Код на Си, как и ожидалось, превышает как минимум на 0.04. И это с goto. Видимо, вам все-таки придется разбираться с другими алгоритмами перемножения, которые имеют меньшую сложность. Или дождаться более опытных людей.
У меня такое не компилируется в VS, сразу вылетает в QT.
1
|
|||||||||||||
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 03.04.2017, 19:40 [ТС] | |
|
Notoriously, спасибо за ваш ответ. Нет, на сайте "Дистанционная подготовка" другие подобные объявления проходят и тесты засчитывают. Проверено при отправке других задач. Я знаю, что это не совсем правильно. Просто, когда начинал программировать, ничего не знал про динамические массивы, да и к тому же, в Dev-Cpp все работает. А в Visual Studio я почти не сижу, только когда в Windows Forms что-нибудь делаю. Вообщем, спасибо всем, кто откликнулся или еще откликнется. Буду учиться дальше.
0
|
|
|
Любитель чаепитий
|
||
| 03.04.2017, 19:47 | ||
|
но стоит ввести ключик -pedantic-errors и выдаст ошибку компиляции.
0
|
||
|
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
| 03.04.2017, 19:47 | |
|
Fixer_84, а время считывания массива в файл входит в контрольное время или туда входит только время перемножения матриц?
0
|
|
|
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
|
|
| 03.04.2017, 22:04 [ТС] | |
|
мановар, здравствуйте! К сожалению, не знаю. Просто в единственном тесте (там всего один тест) сказано, что превышено время выполнения программы. У меня такое уже было, и стоило найти более оптимальный алгоритм и программы засчитывали. Просто, про настоящую оптимизацию почти ничего не знаю. А в этой программе старался использовать как можно меньше вложенных циклов, но это только лишь чуть-чуть прибавило скорости.
1
|
|
|
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
|
|
| 03.04.2017, 23:44 | |
|
мановар,
Входит всё. Но у меня довольно большой опыт общения с этим сайтом, более чем уверен, что , как я уже говорил нужно использовать алгоритм с меньшей сложностью. Быстрее считать файл вы не сможете. Да и если сможете, не поможет это. Тут n^3, как не бейтесь. Есть алгоритмы на n^(2+E). Они "должны пройти". Ссылка на их реализацию также лежит выше.
1
|
|
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
||||||||
| 04.04.2017, 01:18 | ||||||||
|
А практически уверен, что достаточно кода, предложенного товарищем New man.
2
|
||||||||
|
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
||
| 04.04.2017, 07:31 | ||
|
0
|
||
|
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
|
||||||||
| 04.04.2017, 15:19 | ||||||||
|
Кликните здесь для просмотра всего текста
То нет, он по времени даже хуже "ужасного Сишного". Изначальный вариант - 0.808 Сишный вариант - 0.794 Вариант New man - 0.805 Добавлено через 1 минуту
0
|
||||||||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|
| 04.04.2017, 15:32 | |
|
Очевидно, что iostream медленнее. Но не сильно.
Самую главную идею моего варианта: выделение памяти один раз и переиспользование, у тебя нет. Более того, ты постоянно выделяешь память, не чистя старую, поэтому может случиться переполнение.
0
|
|
|
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
|
||
| 04.04.2017, 15:36 | ||
|
Не по теме: Проблема в том,что eJudge плевать на это хотел.
0
|
||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|||||||
| 04.04.2017, 15:49 | |||||||
|
Notoriously, затести этот вариант. Я, конечно, никогда не писал на C, но, думаю, это будет ещё быстрее.
Кликните здесь для просмотра всего текста
Добавлено через 11 минут А вообще, думается мне, что нужно при чтении третьего массива сразу проверять его корректность, а при нахождении ошибки прыгнуть в его конец с помощью fseek и не тратить время на чтение и парсинг всей матрицы.
0
|
|||||||
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
||
| 04.04.2017, 17:06 | ||
|
При этом можно множество двойных циклов заменить на одинарные. New man, за goto metka; я бы тебя проклял.
0
|
||
| 04.04.2017, 17:08 | |
|
Не по теме: nonedark2008,
0
|
|
| 04.04.2017, 17:08 | |
|
Помогаю со студенческими работами здесь
20
Написать функцию умножения матриц
Алгоритм умножения прямоугольных матриц Рекурсивная процедура умножения матриц Исправить программу для умножения матриц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU
YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей.
Звучит. . .
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|