powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритмы
25 сообщений из 208, страница 8 из 9
Алгоритмы
    #39170093
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взял следующую по сложности задачку и опубликовал на скруле.

Тяпничные лампочки
...
Рейтинг: 0 / 0
Алгоритмы
    #39170152
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovDima TЯ так и не понял это ноу-хау с MaxBaseForPower.


Да там примитивно все.
Пусть два самых уровня башни представляют собой башенку a^b.
Тогда мы заменяем их одним эквивалентным уровнем ("склеиваем"),
Понятно. Некоторые 3хуровневые тоже клеятся, Например 49^(2^2) = 7^(2^3) я такую тебе подсунул :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Алгоритмы
    #39414097
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди добрые, помогите. Настрочил корявенький код на Java.
Эти тесты проходит.

23
9 2 2 2 2 2 2 99 2 9 19
9 99 99 99 99 99 99 98 2 9 19
8 25 34 99 75 2 99 99 92 99
7 99 99 78 98 99 90 99 99
5 98 99 99 8 2 34
5 99 99 99 2 2 35
5 98 99 99 16 2 33
4 2 2 4 5 4
3 98 99 98 98
4 4 4 4 4 4
3 3 3 3 3
4 2 2 2 2 2
3 64 2 2 2
3 2 3 2 2
2 4 3 3
3 2 2 2 2
1 3 3
2 2 2 2
1 3 2
1 2 3
0 7
0 5
1 2 2

ответ
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

3
4 5 2 49 4 5
4 3 2 7 2 11
4 2 2 49 32 2

ответ
3 2 1

При сдаче задачи на проверку на acmp.ru выдает ошибку на втором тесте "Wrong answer".
Может кто знает входные данные для этого теста? Не могу понять, где ошибся.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414139
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКнут, Скиена, Кормен.
Приведите пожалуйста пример неоптимального кода, о котором вы пишите выше


крута в жопу, бесполезная книга.
Кнут мужик потрясающий, но книги пишет просто почти абсолютно бесполезные.

Корме, Лейзерсон Риверст, Штайн (если не переврал) - книга, которой хватит на всё.
разбита по главам, можно и нужно читать не все, а только общие темы и то, что конкретно сейчас нужно.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414141
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zitz1989, в этих случаях "помогите" не работает. Ты взялся за одну из самых сложных задач того ресурса, решать ее тебя никто не заставляет. Напрягай мозг, ищи что не учел в коде, топик почитай, может мысли какие появятся. Сам, сам, сам.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414202
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Да, задача непростая. Но тем она и интересна. Пришлось вспомнить курс школьной алгебры. :)
Мыслей по поводу задачи куча, но как лучше впихнуть невпихуемое- хз. Были бы входные данные теста- было бы проще, сразу стало бы ясно, где недоглядел.
Но ничего, буду дальше думать.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414204
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТриггерманEatsFullLemonsтехнический директор сказал, что мне нужно подтянуть основы алгоритмов, т.к. мой код не всегда самый оптимальныйНу да, да, конечно. А что вы такое супер-важное разрабатывать будете, что позарез нужен оптимальный код? Пишете софт для атомных реакторов? Или для управления самолётами?
Ну будет ваша программа считать 0.2 сек вместо 0.1 сек, и бухгалтерша получит отчёт на 0.1 сек позже? И что?
Там где говорят про алгоритмы и оптимизацию, там налицо явное непонимание вектора развития разработки прикладного ПО.


как бы любой неоптимальный алгоритм на 0.2 вместо 0.1 на 10 миллионах будет работать два дня вместо одного, и чего ты нам тут будешь говорить про вектора развития?
...
Рейтинг: 0 / 0
Алгоритмы
    #39414397
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Час от часу не легче. Алгоритм сравнения написал, второй тест прошло. Теперь не хватает времени на тест(2,15-2,20 вместо положенных 2 секунд). Бьюсь над сокращением времени. Пузырьковую сортировку заменил на быструю- результат не изменился.
На Java никто эту задачу не решил.
Тешу себя надеждой, что дело не во мне, а в Джаве )))
...
Рейтинг: 0 / 0
Алгоритмы
    #39414527
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время в третьем тесте победил, но теперь выдает "Wrong answer" в тесте №3.
Может кто подкинет еще данных для теста?
...
Рейтинг: 0 / 0
Алгоритмы
    #39414609
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или может подскажет, где поступаю неверно:
1)При чтении данных башню типа N .. y 1 z .. преобразую в N-2 .. y.

2)Нормализую верха башен N .. x y = N-1 .. z, где z=x^y, z<500.
Брал 500, т.к. 99^500~(10^2)^500=10^1000<10^1023-вместимость типа double.


3)Из метода сортировки передаю два массива(две башни) в метод boolean isBigger(short[] a, short[] b).
3.1) Сравниваю длину башен. Если одна из них длинней на 3 элемента, то она и больше. И наоборот. Иначе иду далее.
N .. 2 2 2 2 2 == N-3 .. 2 65536 ~~ N-3 .. 99 9886 > N-3 .. 99 499.
Это пример граничного случая, когда верх длинной башни состоит из "2", а верх короткой башни- 99^z(где z взят максимальным из пункта 2).

3.2) Добиваю меньшую башню единицами до размера больше башни.
N-2 .. x y == N .. x y 1 1

3.3) Сравниваем башни.
3.3.1) Если этажность башен дополненных единицами равна
а)равна 0(0 x)- сравниваем башни по x.
б)равна 1(1 x y)- сравниваем по логарифму.
ln(x^y)=y*ln(x)

в)равна 2(2 x y z)- сравниваем по двойному логарифму.
lnln(x^y^z)=ln(y^z*ln(x)=ln(y^z)+lnln(x)=z*ln(y)+lnln(x)

г)больше либо равна 3(N .. u x y z)- считаем разность двойных логарифмов t.
Пусть даны башни (N .. u x y z) и (N .. a b c d). Тогда:
double t=(y^z*ln(x)-c^d*ln(b))+(lnln(u)-lnln(a))
Подсчет ведем именно в таком порядке, т.к. при double t=(y^z*ln(x)+lnln(u))-(c^d*ln(b)+lnln(a)) потеряем в точности, что приведет к ошибке.

г')если t>0, то башня (N .. u x y z) больше.
г'')если t<0, то башня (N .. a b c d) больше.
г''')если t=0, то сравниваем нижестоящие элементы башни. Где первым попадется больший элемент, та башня и больше.

Вот такой алгоритм. Полностью код не публикую, т.к. во-первых он сильно корявенький и в нем черт ногу сломит, а во-вторых он уже наверное близок к прохождению.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414618
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дополню. Сразу после публикации предыдущего поста решил поиграться со значениями z из пункта 2.
При установке 10<=z<=160 третий тест проходит, но выдает "Wrong answer" в пятом тесте.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414657
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zitz1989 б)равна 1(1 x y)- сравниваем по логарифму.
ln(x^y)=y*ln(x)
Ты в курсе что double надо совсем по другому сравнивать?
...
Рейтинг: 0 / 0
Алгоритмы
    #39414662
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, нет, не в курсе. Просветите пожалуйста, если не сложно.
Плюс понял, почему z должен быть значительно меньше меньше 500. double хранит до 1,7е+308.
Число 10^1023 взял с конспекта переписанного с JavaRush.ru. Либо JR обманул, или я переписал не то.

Грубо говоря, должно быть так z<150
...
Рейтинг: 0 / 0
Алгоритмы
    #39414667
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
у меня в коде это выглядит так:
Код: java
1.
2.
if (max == 4)
            return a[3] * log(a[2]) > b[3] * log(b[2]);


max- длина массивов дополненных единицами. Первых две позиции в массивах я выделил под грубый хэшкод(сейчас он в реализации не участвует, но лень код переписывать) и номер башни. На позициях>=3(с индексом >=2) находятся сами элементы башен. По-этому пусть Вас не смущает то, что длина массивов на 2 больше количества элементов башни.

Такой подход ошибочен?
...
Рейтинг: 0 / 0
Алгоритмы
    #39414678
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zitz1989Dima T, нет, не в курсе. Просветите пожалуйста, если не сложно.
Плюс понял, почему z должен быть значительно меньше меньше 500. double хранит до 1,7е+308.
Число 10^1023 взял с конспекта переписанного с JavaRush.ru. Либо JR обманул, или я переписал не то.

Грубо говоря, должно быть так z<150
Да, double хранит до 1,7е+308, но не хранит все 308 десятичных разрядов, там только первые 15-16. Гугли про погрешности.

Тут можешь почитать . Про погрешности раздел 4.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414689
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Да, про мантиссу слыхал. Спасибо за подсказку. Погуглил, числа с плавающей точкой через > < = сравнивать нельзя.
Проверка должна быть вида (X-Y>эпсилон). Осталось определиться с вычислением "эпсилон" на основе X и Y.
Еще раз спасибо.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414870
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бьюсь головой об стену.
Код: java
1.
2.
3.
4.
5.
6.
7.
        double aT= pow(a[max - 2], a[max - 1]) * log(a[max - 3])+ log(log(a[max - 4]));
        double t = pow(a[max - 2], a[max - 1]) * log(a[max - 3]) - pow(b[max - 2], b[max - 1]) * log(b[max - 3]) + log(log(a[max - 4])) -log(log(b[max - 4]));

        if (t > aT*1.0e-16)
            return true;
        else if (t < -aT*1.0e-16)
            return false;


При эпсилон =aT*1.0e-16 не проходит 5 тест. При =aT*1.0e-11 не проходит 10 тест. При промежуточных значениях =aT*1.0e-15..=aT*1.0e-12 не проходит 12.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414957
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё. 4 дня, 182 попытки(большая часть из них при подборе эпсилон). Теперь можно и выпить.
Переписал код, массив вместо short сделал int, нормализацию вел до 2e+9. Немного изменил метод нахождения большей из двух башен.
Dima T, боооольшущее спасибо.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414984
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zitz1989Бьюсь головой об стену.
И дальше будешь биться. Ищи обход стены.
zitz1989Всё. 4 дня, 182 попытки(большая часть из них при подборе эпсилон). Теперь можно и выпить.
Я решил и мое время до сих пор лучшее. По количеству букав не на первом месте. Из-за их глупых рейтингов по количеству букав смотрю на свой код год спустя как на китайскую грамоту, я смутно вспоминаю как я это решил, 100500 оптимизаций, в итоге говнокод прошедший проверку. Да и не уверен я что на последний исходник смотрю, т.к. не было цели сохранить решение.
...
Рейтинг: 0 / 0
Алгоритмы
    #39414991
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zitz1989, я так понимаю ты не школьник и не студент, решаешь просто для себя. Если так, то или можешь или не можешь, третьего не дано, а вариант "могу, но с чужой помощью" - это вообще не вариант в реальной жизни, это означает "не могу" даже при положительном результате.

Мой совет: отложи эту задачку и порешай что-нибудь попроще. Со временем и на нее ответ найдешь. А под спойлер не заглядывай.
...
Рейтинг: 0 / 0
Алгоритмы
    #39415015
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, наверное не так меня поняли. Я решил ее. Трудности вызвало:
-превышение времени выполнения программы. Перепробовал различные сортировки массива, ничего не помогло. В итоге, как говорится, дело было не в бобине, дол**еб сидел в кабине. Сортировка работала быстро. Медленно работал метод, выводящий порядок башни. Он в цикле для каждой башни из отсортированного массива искал ее индекс в неотсортированном.
-сравнение башен. Знал, что double обрезает дробное число, знал про мантиссу. Да почему-то как-то и не подумал. Сравнивал как целочисленные.
-погрешности. Сначала считал по одной формуле, где double умножается на double. Одно урезанное число умножаем на другое. Из-за этого и не проходил 12 тест.

Время у меня не лучшее(хотя мог бы немного улучшить, если бы вернул идею с хэшкодом для башен одной высоты), памяти сожрал почти больше всех(можно решить изменив массив на byte, добавить в код массив с шапками башен и позицией этой шапки). Но теплит душу мысль о том, что я единственный решил задачу на Java. Мелочь, а приятно.

И да, я не школьник, не студент. Просто решил в свои 27 лет вникнуть в программирование.
Еще раз спасибо за подсказку про сравнение чисел с плавающей точкой.
...
Рейтинг: 0 / 0
Алгоритмы
    #39415018
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, а по поводу рейтинга... Дурное это дело. Код должен быть в меру короток. Лучше будет на 20 символов больше, но переменные будут называться своими именами, а не "a", "b", "c", "x", "y", "z". Время выполнения и занимаемый объем памяти должен быть в приоритете.
...
Рейтинг: 0 / 0
Алгоритмы
    #39415022
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zitz1989Я решил ее.
Молодец! Поздравляю! Честно. Важно что решил, неважно как. Java не С, есть свои накладные расходы, как по времени, так и по памяти.
...
Рейтинг: 0 / 0
Алгоритмы
    #39415025
zitz1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может пускай тест остается, вроде и не выдает решение задачи, но способствует пониманию некоторых нюансов.

В ближайшее время попробую немного оптимизировать код, верну массив ключей для быстрого сравнения. Думаю и время, и память немного снизятся.
...
Рейтинг: 0 / 0
Алгоритмы
    #39430110
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересная задача. Я тоже попробовал.
Все упомянутые здесь тесты прошёл но пока 3й официалный не смог. неверный ответ.
Только для удовлетворения любопытства, поделитесь тайным знанием.
Тестовыми файлами или просто в ответами на пару вопросов в приватном канале littlesuspense эт live и в самом com.
...
Рейтинг: 0 / 0
25 сообщений из 208, страница 8 из 9
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритмы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]