Целочисленное уравнение.

folk
Сообщений: 4177
Зарегистрирован: 11 сен 2009, 21:00

Целочисленное уравнение.

Сообщение folk » 17 янв 2014, 08:09

geh писал(а):Source of the post
Но что делать с программами, где идет разработка искусственного интеллекта?
Это все на Бейсике! Это тысячи строк кода! Это моя Любовь!! Все бросить? Нет!!

Начать писать новые программы на новом языке)
Последний раз редактировалось folk 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

Целочисленное уравнение.

Сообщение geh » 17 янв 2014, 10:21

Я конечно подумаю, ведь придется сменить стиль мышления.
Ибо решая задачу, я сразу представляю ее как бейсик-программу.
А в Си надо раз и бесповоротно перейти на указатели.
А как в Си графика? Насколько просто (сложно) создать форму, кнопки,
текстовые поля и событийные процедуры??
Последний раз редактировалось geh 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zam2
Сообщений: 3760
Зарегистрирован: 13 авг 2013, 21:00

Целочисленное уравнение.

Сообщение zam2 » 17 янв 2014, 10:26

geh писал(а):Source of the post А как в Си графика? Насколько просто (сложно) создать форму, кнопки, текстовые поля и событийные процедуры??
Это не вопрос языка. Это вопрос системы программирования. В современных системах поддержка этих вещей есть везде и достаточно проста в использовании.
Последний раз редактировалось zam2 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

Целочисленное уравнение.

Сообщение geh » 17 янв 2014, 11:16

Вы не правы. Но не хочу с вами спорить.
Как в Бейсике, так и в Паскале есть графические операторы.
Они Неотъемлемая часть языка программирования!!
Последний раз редактировалось geh 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
kiv
Сообщений: 1012
Зарегистрирован: 02 дек 2011, 21:00

Целочисленное уравнение.

Сообщение kiv » 17 янв 2014, 13:31

geh писал(а):Source of the post
в Паскале есть графические операторы.
Они Неотъемлемая часть языка программирования!!


Можно с этого места подробнее?
Какие именно графические операторы являются неотъемлемой частью языка?
Именно языка Pascal, а не версии такой-то такого-то компилятора такой-то фирмы.
Последний раз редактировалось kiv 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

Целочисленное уравнение.

Сообщение geh » 17 янв 2014, 14:55

Kiv, вы меня поймали!
В Паскале для работы программ подключаются
различные модули (например Crt). И если я
не подключу модуль Graph, то ничего не получу.
Я погорячился, есть только один модуль, который
можно не подключать - System.
Последний раз редактировалось geh 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

folk
Сообщений: 4177
Зарегистрирован: 11 сен 2009, 21:00

Целочисленное уравнение.

Сообщение folk » 17 янв 2014, 22:17

geh писал(а):Source of the post
Я конечно подумаю, ведь придется сменить стиль мышления.
Ибо решая задачу, я сразу представляю ее как бейсик-программу.
А в Си надо раз и бесповоротно перейти на указатели.

Вот именно поэтому надо изучить пару других языков. Указатели не принципиально совершенно. Можете не париться про них поначалу - пользуйтесь массивами.

Когда вы решаете задачу вам хорошо представлять не программу а структуру данных и что вы с этой структурой данных делаете) То есть ваши действия над данными. И это на самом деле практически не зависит от языка, А сейчас ваш любимый язык тормозит вашу фантазию - дело не в бейсике даже.

Язык определяет мысли - если у вас мало слов то вы мало сможете сказать. Богатый язык дает возможность гибко мыслить. Ну это так - философия)

Ввод вывод подозреваю примерно одинаково богат и в C и в Basic, Для символьного вывода и рисования есть библиотека curses по-моему. Для графики - тоже много вариантов но там сложнее начать.
Последний раз редактировалось folk 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
kiv
Сообщений: 1012
Зарегистрирован: 02 дек 2011, 21:00

Целочисленное уравнение.

Сообщение kiv » 18 янв 2014, 06:21

А ну-ка проверьте, совпадает список с вашим или нет (тривиальные решения опущены):

Код: Выбрать все

x = 9, y = 10, z = 12
x = 64, y = 94, z = 103
x = 73, y = 144, z = 150
x = 135, y = 235, z = 249
x = 334, y = 438, z = 495
x = 244, y = 729, z = 738
x = 368, y = 1537, z = 1544
x = 1033, y = 1738, z = 1852
x = 1010, y = 1897, z = 1988
x = 577, y = 2304, z = 2316
x = 3097, y = 3518, z = 4184
x = 3753, y = 4528, z = 5262
x = 1126, y = 5625, z = 5640
x = 4083, y = 8343, z = 8657
x = 5856, y = 9036, z = 9791
x = 3987, y = 9735, z = 9953
x = 1945, y = 11664, z = 11682
x = 11161, y = 11468, z = 14258
x = 13294, y = 19386, z = 21279
x = 3088, y = 21609, z = 21630
x = 10876, y = 31180, z = 31615
x = 16617, y = 35442, z = 36620
x = 4609, y = 36864, z = 36888
x = 27238, y = 33412, z = 38599
x = 5700, y = 38782, z = 38823
x = 27784, y = 35385, z = 40362
x = 11767, y = 41167, z = 41485
x = 26914, y = 44521, z = 47584
x = 38305, y = 51762, z = 57978
x = 6562, y = 59049, z = 59076
x = 49193, y = 50920, z = 63086
x = 27835, y = 72629, z = 73967
x = 35131, y = 76903, z = 79273
x = 7364, y = 83692, z = 83711
x = 65601, y = 67402, z = 83802
x = 50313, y = 80020, z = 86166
x = 9001, y = 90000, z = 90030
x = 11980, y = 131769, z = 131802
x = 39892, y = 151118, z = 152039
x = 20848, y = 152953, z = 153082
x = 59728, y = 182458, z = 184567
x = 15553, y = 186624, z = 186660
x = 99457, y = 222574, z = 229006
x = 19774, y = 257049, z = 257088
x = 190243, y = 219589, z = 259495
x = 107258, y = 278722, z = 283919
x = 158967, y = 312915, z = 326033
x = 24697, y = 345744, z = 345786
x = 294121, y = 325842, z = 391572
x = 135097, y = 439312, z = 443530
x = 30376, y = 455625, z = 455670
x = 372106, y = 444297, z = 518292
x = 243876, y = 547705, z = 563370
x = 191709, y = 579621, z = 586529
x = 36865, y = 589824, z = 589872
x = 336820, y = 583918, z = 619111
x = 198550, y = 713337, z = 718428
x = 44218, y = 751689, z = 751740
x = 434905, y = 780232, z = 822898
x = 590896, y = 734217, z = 844422
x = 436626, y = 822825, z = 861920
x = 466727, y = 867679, z = 910541
x = 52489, y = 944784, z = 944838
x = 298405, y = 944409, z = 954237


Просто обидно, понимашь - было время вечером, дай, думаю, поставлю на ночь, пусть посчитает, раз уж двое суток считало, неужто я ночью не обойдусь? Оказалось, хватило 1 часа 15 минут.
Процессор - четырехядерный i5-2500 3.30 GHz, операционка - Windows 7 x64, компилятор - Visual C++ 2010.

Из примененных хитростей - только целочисленная арифметика, никаких float'ов (судя по тестам на первой сотне тысяч - эффект от этого малый), приложение 64-битовое (а вот тут как раз эффект основательный), диапазон поиска x ограничен с обоих сторон (влияние не провераял, но, по прикидкам, малое...), ну, и задействовал все 4 ядра.
Последний раз редактировалось kiv 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

geh
Сообщений: 224
Зарегистрирован: 09 дек 2013, 21:00

Целочисленное уравнение.

Сообщение geh » 18 янв 2014, 11:15

folk, спасибо!! Я установил на своём компьютере программу
Borland C++ Builder Enterprise v6.0 . Никогда бы не подумал, что придется
для установки вводить кучу кодов. Сначала два: серийный номер и авторизация.
После установки еще регистрация и активация, плюс еще непонятно что.
Зачем такие сложности? Окно программы выглядит как у Дельфи. Было бы
неплохо что-нибудь из литературы (что попроще), главное начать, а дальше я и сам разберусь.

Kiv, я потрясен мощностью вашего компьютера!!
Да и язык Си очень быстрый. Kiv, вы еще спрашиваете,
верно ли ?? Это у меня может быть неверно, а у вас ОК!!
Последний раз редактировалось geh 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
kiv
Сообщений: 1012
Зарегистрирован: 02 дек 2011, 21:00

Целочисленное уравнение.

Сообщение kiv » 18 янв 2014, 11:54

geh писал(а):Source of the post
Kiv, я потрясен мощностью вашего компьютера!!


Да я бы не назвал его особо мощным. Я просто хотел подсказать, что надо не полагаться на возможности языка (как вы говорили в задаче о строке - "и программисту не надо задумываться"), а думать о том, как заставить работать программу эффективно.

Например, скорее всего z^3 вычисляется так же, как и z^0.333333333 - через что-то вроде exp(3*ln(z)) (конечно, могу и ошибаться, и для целых чисел возведение развернется в умножения) - а у вас их несколько.

Я, например, попробовал вариант из книги Уоррена

Код: Выбрать все

inline long icrt(unsigned long long x, bool&prec)
{
 long s;
 unsigned long long y, b, bs, xs = x;

 y = 0;
 if (x >= 0x1000000000000000LL) {
 if (x >= 0x8000000000000000LL) {
 x = x - 0x8000000000000000LL;
 y = 2;
 } else {
 x = x - 0x1000000000000000LL;
 y = 1;
 }
 }
 for (s = 57; s >= 0; s = s - 3)
 {
 y = 2*y;
 b = 3*y*(y + 1) + 1;
 bs = b << s;
 if (x >= bs && b == (bs >> s))
 {
 x = x - bs;
 y = y + 1;
 }
 }
 prec = (xs == y*y*y);
 return y;
}


и написал свой, основанный на бинарном поиске

Код: Выбрать все

long long thres[MAX+2] = {0};
inline long _icrt(long long x, bool&prec)
{
 long l = 0, r = MAX+1;
 while(r > l+1)
 {
 //int m = (l+r)/2;
 int m = (l+r)/2;
 if (thres[m] > x)
 {
 r = m;
 }
 else
 {
 l = m;
 }
 }
 prec = (thres[l] == x);
 return l;
}


(при запуске программы thres инициализируется кубами:

Код: Выбрать все

 for(long long i = 0; i < MAX+2; ++i)
 thres[i] = i*i*i;
).

Оказалось, что второй вариант чуть быстрее.

При поиске значение x может быть только в диапазоне

Код: Выбрать все

maxx = icrt((z3+1)/2,prec);
minx = icrt((3*z-3)*z+2,prec)+1;


Ну, и прочие мелочи. Собственно, я вел только к этому. Уберем 4 ядра - время станет 5 часов, но никак не 2 суток. Уменьшим скорость процессора в 2 раза - 10 часов.

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

P.S. Был у меня случай, когда машина у одного графа гамильтоновы пути мучила дня три. А потом через недельку дошло, как можно поступить иначе, причем совершенно внезапно... и счет сократился до минут 15, причем еще и ошибка нашлась в первоначальном расчете. Вобщем, сцена из фильма "Гараж" - "Как я сам не дотумкал!"
Последний раз редактировалось kiv 27 ноя 2019, 21:37, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 3 гостей