Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Всем привет. Так вышло, что я работаю тестировщиком, но хочу быть ближе к разработке (иногда такие вакансии называют dev tools, автотесты и тд). Вот недавно наш технический директор сказал, что мне нужно подтянуть основы алгоритмов, т.к. мой код не всегда самый оптимальный, благодарен ему за советы. Суть поста: что вы могли бы посоветовать из базового курса связанного с алгоритмами? образование не айтишное(физика была), многое упустил( мб книги какие то или просто название... предмета, которое я смог бы загуглить. заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 23:20 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Если физик то осилишь: Никлаус Вирт - Алгоритмы и структуры даннх Томас Кормен - Алгоритмы: построение и анализ Роберт Седжвик - Алгоритмы (есть на C/C++/Java ) 2х томник. Есть еще многотомник Д.Кнута но его читать нудно. Возможно среди вышеперечисленного будет все что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 23:30 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
из перечисленного выше, плюсую именно Кормена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 00:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
спасибо комрады. надеюсь поможет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 00:42 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Кнут, Скиена, Кормен. Приведите пожалуйста пример неоптимального кода, о котором вы пишите выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 01:44 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
EatsFullLemonsСуть поста: что вы могли бы посоветовать из базового курса связанного с алгоритмами? образование не айтишное(физика была), https://www.coursera.org/course/algs4partI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 01:56 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
EatsFullLemonsтехнический директор сказал, что мне нужно подтянуть основы алгоритмов, т.к. мой код не всегда самый оптимальныйНу да, да, конечно. А что вы такое супер-важное разрабатывать будете, что позарез нужен оптимальный код? Пишете софт для атомных реакторов? Или для управления самолётами? Ну будет ваша программа считать 0.2 сек вместо 0.1 сек, и бухгалтерша получит отчёт на 0.1 сек позже? И что? Там где говорят про алгоритмы и оптимизацию, там налицо явное непонимание вектора развития разработки прикладного ПО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 09:25 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ТриггерманТам где говорят про алгоритмы и оптимизацию, там налицо явное непонимание вектора развития разработки прикладного ПО. А если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 09:39 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Станислав С...кийА если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А? на сколько больше денег станет у компании разработчика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:06 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Для практики можешь задачки олимпиадные порешать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:11 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ИзопропилСтанислав С...кийА если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А? на сколько больше денег станет у компании разработчика? :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:34 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Триггерман, авторТам где говорят про алгоритмы и оптимизацию, там налицо явное непонимание вектора развития разработки прикладного ПО. У нас хайлоад проект в авиа индустрии. То что мои скрипты не самые оптимальные не самые эффективные это не критично для проекта, просто компания не большая и норм отношения между коллегами, считаю что мне там оч помогают развиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
EatsFullLemonsУ нас хайлоад проект в авиа индустрии. То что мои скрипты не самые оптимальные не самые эффективные это не критично для проекта, просто компания не большая и норм отношения между коллегами, считаю что мне там оч помогают развиваться. Ты не шути так. А то я больше в самолёт ни ногой... Скрипты у него ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:50 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, авторА то я больше в самолёт ни ногой... Не очкуй) если самолет и упадет, то не из-за нас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:54 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Жемчужины проектирования алгоритмов. Функциональный подход хорошая книга. Но без спецподготовки не прочтешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:57 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Да чур вас! Говнокодеры. Какая-мне разница из-за чьих скриптов я упаду! Давай сменим пластинку... Фух пойду накапаю себе капель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 10:57 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
EatsFullLemonsУ нас хайлоад проект в авиа индустрии ааа, ну тогда ладно ... это другой разговор про самолёт это я что, угадал получается? а я думал спервоначалу, что ты продуктовый ларёк автоматизируешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 15:08 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Станислав С...кийТриггерманТам где говорят про алгоритмы и оптимизацию, там налицо явное непонимание вектора развития разработки прикладного ПО. А если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А?Чтобы допетрить до того, что гораздо быстрее одним махом заполнить Range в Excel, а не по одной ячейке, Кормена читать не обязательно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 19:38 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Или чтобы провести денормализацию с целью ускорения построения отчётов. Или настроить логирование, чтобы понять к какому понедельнику предрасчитать какой отчёт, чтобы пользователь его быстренько распечатал и сдал куда надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 19:40 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ИзопропилСтанислав С...кийА если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А? на сколько больше денег станет у компании разработчика? У компании разработчика буде потенциальный отток клиентов. Если это говнокодеры в штате, то потенциальная потеря работы. Не сразу конечно, постепенно, накопится критическая масса жалоб юзеров на тормоза и начальство начнет решать кардинально: разогнать собственный ИТ-отдел и уйти на аутсорс, или сменить софт на менее тормозной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 19:46 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилпропущено... на сколько больше денег станет у компании разработчика? У компании разработчика буде потенциальный отток клиентов. Если это говнокодеры в штате, то потенциальная потеря работы. Не сразу конечно, постепенно, накопится критическая масса жалоб юзеров на тормоза и начальство начнет решать кардинально: разогнать собственный ИТ-отдел и уйти на аутсорс, или сменить софт на менее тормозной. Ситуация при которой есть 20 минут и никто ничего не может сделать - маловероятна. Что они там? Студенты? Есть-же какой-то априорный прогноз еще до разработки. Олап-кубы для реляционок и гибридов. Облака от Гугл или Амазон или МС для неструктурированных запросов. Ну вобщем есть направления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 20:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, какой-то у вас идеалистический взгляд или даже наивный. Если наизусть не выучил все тома Кнута - так прямо сразу и разгонят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 09:03 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВОффтоп! чета я в условия этой не въеду. Не зря там "Сложность: 95%" Вроде все понятно. Дано: набор башен НомерСодержимое11024^(2^(2^(2^(2^2))))3... надо отсортировать по содержимому и вывести номера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 11:48 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЕвгенийВОффтоп! чета я в условия этой не въеду. Не зря там "Сложность: 95%" Вроде все понятно. Дано: набор башен НомерСодержимое11024^(2^(2^(2^(2^2))))3... надо отсортировать по содержимому и вывести номера. не так, немного: Дано: набор башен НомерСодержимое110 - число башен24-число показателей степени; (2^(2^(2^(2^2)))) - сама башня3... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 12:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, осталось написать функцию сравнения башен ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 12:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, А все допер. Не учел это -"В первой строке входного файла INPUT.TXT задается число башен N ". Считал 10=0. Невнимательность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 12:11 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Станислав С...кийне так, немного: точно, это студенческая классика: "введите кол-во наборов", "введите размер набора 1", "введите элемент 1 набора 1" и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 12:20 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Коллеги. Я для удобства перепишу этот тесткейс. Добавлю номера строк в Given для удобства. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В уже отсортированном виде. Сверху-вниз от меньших к большим. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Несколько мыслей. 1) Возвозить степень в степень - рискованно с точки зрения типов данных. Можно не влезть ни в какой тип а даже если заюзать символьную арифметику - непродуктивно и долго. Ведь задача стоит не вычислить а сравнить. Поэтому предлагаю до последнего не заниматься поиском лонг-арифметики ... ну или в крайнем случае только для само-проверки или теста гипотезы. Вообще сама постановка почему-то напомнила Числа Грэма. 2) Строки номер (1) и (2). Лексикографически отсортированны это плюс. По крайней мере тривиальные случаи сравнения работают. 3) Между сроками (3) и (4) разница не-лексикографическая. 4) Надо поискать красивую изящную (возможно рекуррентную формулу) для сравнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 14:49 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Может логарифмы прикрутить? Если не путаю Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 15:02 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Хм. Если Тогда я наверное могу переписать табличку так. И осилить почему (9) и (10) строки стоят именно так. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 15:04 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TМожет логарифмы прикрутить? Если не путаю Код: sql 1. А это мысль. Можно привязаться к монотонности. Тоесть если A > B и оба числа очень большие то ln(A) > ln(B) также будет справедливо. А сама функция может даст нам возможность чё-нить сократить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 15:06 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Еще там подвохи могут быть, типа Код: sql 1. что равно Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 15:15 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Нашел теорему. Возможно будет полезна. Если a > 1, то неравенство равносильно неравенству того же смысла: f(x) > g(x). Если 0 < a < 1, то показательное неравенство равносильно неравенству противоположного смысла: f(x) < g(x). В нашем случае основание a либо равно 1 - тогда степени равны (башни одинаковы по рангу) либо больше единицы (т.к. из условия задачи у нас только целые). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 16:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
думаю, стоит попробовать приводить к виду e^e^e^e^e^e^e^e^e^x ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 16:27 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, но как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 16:33 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, справа налево, каждый раз переходя к новому основанию e. возможно, идеальным был бы вид x^x^x^x^x^x^x^x^x, но неясно как его получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 17:00 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
если есть n, k>=1, то n^(k+1)>(n+1)^k может отсюда как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 18:29 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonAleksandr Sharahov, но как? mayton, ты тут кладезь алгоритмов. Напиши, порви студентов. Правда там оценка по количеству букав кода, но время тоже показывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 20:26 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Да какой кладезь? Болото скорее. Вот если-б Сашик заскочил. Может чё и придумал а у меня кроме логарифмирования идей нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2016, 21:27 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
С большой долей вероятности, тут присутствует некое нечёткое сравнение. Быстрая сортировка даёт O(nlnn). Теперь нужно понять сколько времени будет выполняться одна операция сравнения, быстрое возведение в степень + некоторый формат хранения больших чисел, должен дать O(lnn) на одну операцию сравнения, таким образом имеем O(n(lnn)^2). Но всё это нужно очень аккуратно реализовать. Кроме того, я сильно сомневаюсь в том что существует корректное решение данной задачи, т.к. нечёткое сравнение будет давать погрешность на высоких башнях, значения которых отличаются незначительно. Таким образом,1 вопрос должен быть такой: а можно ли за обозримое время сравнить две девятиэтажных, например, башни ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 09:12 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
И если процедуру сравнения нельзя провести однозначно, то эта задача неинтересна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 09:13 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
С итоговой оценкой напутал, будет так O(nlgnlga), где n количество чисел, a- максимальное значение коэффициента в башне, что тоже константа, таким образом мы имеем O(nlgn), но на самом деле константа которая находится перед функцией nlgn должна быть скорее всего не меньше 1000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 09:21 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
SashaMercury, подобного рода задачи (конкурсные, олимпиадные) обычно таят в себе хинт или подсказку которая позволяет их решить в доступное время (1.5 - 2 часа). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 11:42 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Если числа A и B, такие что Код: sql 1. 2. и все основания и показатели больше либо равны 1 то я предположил что в данном неравенстве Код: sql 1. можно логарифмировать обе части без потери смысла. (Поскольку в Latex трудно работать с рядами я взял первые 3 цифры для удобства демонстрации) получаем произведение с меньшей степенью еще раз повторил логарифмирование. Раскрыл логарифм произведения. Степень выражения понизилась но осталась сумма. Как дальше быть - не знаю. В полном варианте условий у меня еще семь операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 14:36 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Есть подозрение что ln(ln(A)) можно просто выкинуть при следующем логарифмировании как незначительную величину. Как доказать не знаю, думаю как-то исходя из того что ln(ln(99)) < 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 15:08 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Любая короткая башня легко дополняется единицами до любого требуемого размера. Потом разворачивается. Вместо логарифма можно использовать извлечение корня. В результате получается матрица, которую можно посчитать СЛАУ и стукнуть, например, методом Гаусса. А вот дальше меня заклинило и критерий сортировки я не смог найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 15:09 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonСтепень выражения понизилась но осталась сумма. Как дальше быть - не знаю. Продолжать ) Нумеровать и вычислять удобнее справа налево: x=a8^a7^a6^a5^a4^a3^a2^a1^a0; b0=a0, b1=a1^b0, b2=a2^b1... b8=a8^b7. Пытаемся свести к вычислению 8-ми вложенных логарифмов всей башни log(log(log(log(log(log(log(log(x)))))))): y1=log b1, y2=loglog b2, y3=logloglog b3... Логарифм суммы вычисляется через произведение log(u+v)=log(u*(v/u))=loglog u + log(v/u). Идея в том, чтобы, повторяя это, свести вычисления к предыдущему y (первое слагаемое) и добавки (второе). Оба небольшие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 16:22 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovЛогарифм суммы вычисляется через произведение log(u+v)=log(u*(v/u))=loglog u + log(v/u). Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 16:31 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TAleksandr SharahovЛогарифм суммы вычисляется через произведение log(u+v)=log(u*(v/u))=loglog u + log(v/u). Код: sql 1. ? Конечно, опечатка u+v=u*(1+v/u) log(u+v)=log(u*(1+v/u))=loglog u + log(1+v/u) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 16:39 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Не совсем хорошо. Выражение U степень понижает но в выражении V степень переходит в знаменатель в одном из слагаемых ну вобщем дальше комплексность растёт и я рискую просто допускать ошибки и опечатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 17:19 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, да, там в знаменателе башня с предыдущим значением сверху ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:20 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
А вообще конечно довольно странная задача. У меня совсем нет уверенности, что из-за округлений не совпадут значения для разных башен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:27 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovmayton, да, там в знаменателе башня с предыдущим значением сверху Проделайте пожалуйста шаги с разложением логарифма суммы. Я признаю что не силён в подобных преобразованиях. Навыка мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:58 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonAleksandr Sharahovmayton, да, там в знаменателе башня с предыдущим значением сверху Проделайте пожалуйста шаги с разложением логарифма суммы. Я признаю что не силён в подобных преобразованиях. Навыка мало. как-то так, если нигде опять не ошибся ) Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 23:32 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Я придумал алгоритм сравнения: 2^(2^(2^2)) = 65536 что больше максимального 99, поэтому сравнивать надо только три последних уровня башни. Т.е. берем высоту большей башни, добиваем меньшую единицами и сравниваем верхушки. Например: башня1 a^(b^(c^(d^e))) башня2 f^(g^(h^i)) сравнить надо только c^(d^e) и h^(i^1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 17:51 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЯ придумал алгоритм сравнения: 2^(2^(2^2)) = 65536 что больше максимального 99, поэтому сравнивать надо только три последних уровня башни. Т.е. берем высоту большей башни, добиваем меньшую единицами и сравниваем верхушки. Например: башня1 a^(b^(c^(d^e))) башня2 f^(g^(h^i)) сравнить надо только c^(d^e) и h^(i^1) Конечно, нижние уровни башни имеют гораздо меньший вес по сравнению с верхними, но трех верхних уровней мало для верного сравнения, например: 99^98^2^2 > 2^99^2^2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 18:50 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЯ придумал алгоритм сравнения: 2^(2^(2^2)) = 65536 что больше максимального 99, поэтому сравнивать надо только три последних уровня башни. Ты что-то напутал в условии. Нам дано (максимум) 50 тысяч башен. Каждая из которых может иметь высоту от 1 уровня до 10 уровней максимум: 99^(99^(99^(99^(99^(99^(99^(99^(99^99)))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 19:10 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovнапример: 99^98^2^2 > 2^99^2^2 Хорошо. А если 4 уровня? Я к тому чтобы не искать логарифм суммы. 4 уровня можно так обсчитать Код: sql 1. но пятый уже не полезет в double ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 19:13 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Мне почему-то эта задача напоминает расчёты пределов или сходимости рядов. Тоесть я хочу сказать что наша задача - не делать расчёт а эквивалентно преобразовать две башни (две формулы) и оценить которая из них больше. Типа взять предел соотношения. Там... или еще как-то. А для оценки сойдет даже логарифм с его погрешностями. Думаю что это допустимо, особенно когда речь идет не просто о больших а об астрономически-больших числах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 19:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, для 4х уровней надо сравнить числа: 99^99^99^99^99^98^2^2^2 и 2^2^2^2^2^99^2^2^2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 19:28 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
да, похоже 4х достаточно, если откидывать сверху одинаковые (после уравнивания высот) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 19:50 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, опечатка: да, похоже 4х достаточно, если НЕ откидывать сверху одинаковые (после уравнивания высот) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 20:04 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Не взлетела идея с 4-мя последними. Ошибка на второй проверке. Заслал туда код Код: 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. 79. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 21:22 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TНе взлетела идея с 4-мя последними. Ошибка на второй проверке. странно, а что не так сравнилось, известно? Я тут набросал сравнение из интереса, получилось довольно монструозно, но отсылать не буду, чтобы не расстраиваться ) функция сравнения степенных башен Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 21:52 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovстранно, а что не так сравнилось, известно? не пишут. Aleksandr SharahovЯ тут набросал сравнение из интереса, получилось довольно монструозно, но отсылать не буду, чтобы не расстраиваться ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 21:58 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
А есть пример INPUT/OUTPUT который подтвердит что эти "рукописи" компилируются, работают и выдают корректный резалт? Просто не у всех тут есть компиллятор... Так ште... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 22:20 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TНе взлетела идея с 4-мя последними. Ошибка на второй проверке. Заслал туда код Похоже не взлетела из-за того, что у тебя в коде нет понижения левела, когда верхние одинаковы. Надо понижать до тех пор, пока среди 4х последних пар не будет найдена пара разных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 22:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonА есть пример INPUT/OUTPUT который подтвердит что эти "рукописи" компилируются, работают и выдают корректный резалт? Просто не у всех тут есть компиллятор... Так ште... Вот примеры выхода функции сравнения: Код: pascal 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. Могу прогнать любые предложенные варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 22:48 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima TНе взлетела идея с 4-мя последними. Ошибка на второй проверке. Заслал туда код Похоже не взлетела из-за того, что у тебя в коде нет понижения левела, когда верхние одинаковы. Надо понижать до тех пор, пока среди 4х последних пар не будет найдена пара разных. Нет, это я погорячился, с понижением уровня, надо понижать только если верхние - единицы. Возможно, ты попался в эту ловушку с хвостами из 4х единиц. немного упростил свой код с учетом этого Код: pascal 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. добавил соответствующий тест Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 23:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovМогу прогнать любые предложенные варианты. Давай краевые кейсы. Код: sql 1. 2. 3. 4. 5. 6. 7. И тест на точность Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 23:29 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, у меня ожидаемый результат противоположнный, я из первого параметра вычитаю второй: Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 23:59 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, что такое TPowerTower? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 00:09 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonAleksandr Sharahov, что такое TPowerTower? это массив целых чисел: Код: pascal 1. 2. забыл скопипастить во второй исходник, в первом оно было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 00:15 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
а я тоже не поняла условие: например УсловиеИзвестно, что среди башен во входном файле нет равных. и далее даются башни файла 1 2 2 -> 1^2^2 = 1 1 3 2 -> 1^3^2 = 1 1 2 3 -> 1^2^3 =1 1 3 3 -> 1^3^3 = 1 что я неправильно делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 01:47 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mini.weblabа я тоже не поняла условие: например УсловиеИзвестно, что среди башен во входном файле нет равных. и далее даются башни файла 1 2 2 -> 1^2^2 = 1 1 3 2 -> 1^3^2 = 1 1 2 3 -> 1^2^3 =1 1 3 3 -> 1^3^3 = 1 что я неправильно делаю? Возможно, имелось в виду, что нет двух башен, запись которых во входном потоке в виде строки совпадает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 02:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, терзают смутные сомнения, что и 4х уровней мало, завтра поэкспериментирую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 02:44 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mini.weblabа я тоже не поняла условие: например УсловиеИзвестно, что среди башен во входном файле нет равных. и далее даются башни файла 1 2 2 -> 1^2^2 = 1 1 3 2 -> 1^3^2 = 1 1 2 3 -> 1^2^3 =1 1 3 3 -> 1^3^3 = 1 что я неправильно делаю? первая цифра - количество степеней, или кол-во элементов в башне + 1, т.е. 1 2 2 -> 2^2 2 3 3 3 -> 3^3^3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 07:15 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima T, терзают смутные сомнения, что и 4х уровней мало, завтра поэкспериментирую предчувствия его не обманули: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 11:33 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Я вчера написал что 4 не помогло 18782630 Надо как-то 5-й добавить. Может понятно станет как 6й и т.д. Похоже логарифмы тут не в тему. Надо какую-то другую зависимость искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 11:45 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЯ вчера написал что 4 не помогло 18782630 Надо как-то 5-й добавить. Может понятно станет как 6й и т.д. Похоже логарифмы тут не в тему. Надо какую-то другую зависимость искать. Я видел это. Надо хвост из единиц отсекать, а то и 6, и 7 не поможет )) Выше я привел нормальный пример без единичного хвоста, когда не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 11:53 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Отсекал я хвосты. У меня меньшая добивается единицами до высоты большей. Дальше последние 4 от каждой. Надо как-то к общему основанию или степени привести, чтобы эти правила заработали Код: sql 1. 2. 3. только как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 12:18 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TОтсекал я хвосты. У меня меньшая добивается единицами до высоты большей. Дальше последние 4 от каждой. Я о другом. В исходных данных могут подсунуть башни с длинными единичными хвостами. Dima TНадо как-то к общему основанию или степени привести, чтобы эти правила заработали только как? Проще подшаманить с последней парой элементов. Если они в результате дают меньше 300, то гарантированно переполнения не будет, и можно сократить высоту. типа такого Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 12:39 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, эксперименты показывают, что 300 - сильно заниженная оценка, переполнения не происходит даже при 2470, т.е. при вычислении 99^99^99^2470 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 13:21 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
добавил склейку верхних этажей, пока результат меньше 2470 Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 13:39 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovЯ о другом. В исходных данных могут подсунуть башни с длинными единичными хвостами. Эти тоже отсекал. Aleksandr Sharahovэксперименты показывают, что 300 - сильно заниженная оценка, переполнения не происходит даже при 2470, т.е. при вычислении 99^99^99^2470 Скорее всего ты переполнение не заметил. 99^99 = 3,7 * 10^197 99^(10^197) ~ 10^(2 * 10^197) тут уже никаких стандартных типов не хватит. Стандартный double (который в процессоре реализован) имеет предел 10^308. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 13:50 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TСкорее всего ты переполнение не заметил. Разумеется, я не вычислял башню непосредственно, а вычислял двойной логарифм, как это сделано и в твоем, и в моем исходниках. Кроме того, я использую тип extended, а не double. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 14:09 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Например, вот такой тест проходит сравнение 18783990 Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 14:15 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
оффтоп: решил погуглить "сравнение числовых башен". прямого ответа не нашел, зато набрел на статью http://lpgenerator.ru/blog/2014/12/10/zanimatelnaya-statistika-chast-vtoraya-gigantskaya/ в нем степенные башни с одинаковыми числами определяются как "тетрации". Дочитал до места: автор Операция пятого уровня — Пентация (^^^) Пентация — это повторяющаяся тетрация, объединяет последовательности с двумя стрелками в одну операцию. Гипероператор каждого последующего уровня сокращает последовательность предыдущего уровня, используя термин b для обозначения длины последовательности. Например: пентация Умножение сокращает последовательность сложения. Возведение сокращает последовательность умножения. Тетрация сокращает последовательность возведения в степень. В каждом случае a — число в основании, b — длина последовательности. Но что же сокращает пентация? Принцип работы этого гипероператора можно описать как «безумное поглощение степенных башен». Представьте последовательность степенных башен в определенном порядке. Все они имеют одинаковое число в основании, отличаются только количеством уровней. Вычисляем результат первой степенной башни и подставляем его вместо значения высоты (количества уровней) для следующей башни. Затем вычисляем и ее результат и подставляем его в количество уровней следующей степенной башни. И так далее. Каждая последующая башня «поглощает» результат предыдущей, используя её результат для собственного «безумного» роста... и голова начала болеть :) во всяком случае, оставляю это здесь, вдруг кому пригодится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2016, 18:56 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Выше я уже описал возможно единственный способ решения данной задачи. Но способ неинтересный. Ибо ключевой вопрос такой: Можно ли сравнить 2 башни наверняка(даже если разница между ними 1-2 значения) ? Если нельзя, а скорее всего нельзя, то можно ли отсортировать множество башен не сравнивая их друг с другом ? При этом в данном конкретном случае bucket sort не подойдёт Код ниже может быть решение, а может и нет (не разбирал). Сегодня совсем нет времени, да и задача мне пока не нравится. Код: pascal 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. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 01:54 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Интересно. Это задача на тему "Сортировки и последовательности" возможно я был не прав в части логарифмов и экспонент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 02:06 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonИнтересно. Это задача на тему "Сортировки и последовательности" возможно я был не прав в части логарифмов и экспонент. Одно не исключает другое. Задача звучит так: "есть набор последовательностей (башен) и надо их отсортировать". Осталась мелочь: придумать алгоритм сравнения двух башен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 07:11 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВыше я уже описал возможно единственный способ решения данной задачи. Но способ неинтересный. Не нашел. Тут 18775760 мельком какое-то нечеткое сравнение упомянул, а дальше про сложность алгоритма. SashaMercury Ибо ключевой вопрос такой: Можно ли сравнить 2 башни наверняка(даже если разница между ними 1-2 значения) ? Если нельзя, а скорее всего нельзя, то можно ли отсортировать множество башен не сравнивая их друг с другом ? Нельзя отсортировать если невозможно сравнить. Раз есть правильные решения - задача решаема. SashaMercuryКод ниже может быть решение, а может и нет (не разбирал). Сегодня совсем нет времени, да и задача мне пока не нравится. Много букав на непонятном паскале, магические числа (1e239, 1e100) и ни одного камента. Ты бы лучше словами описал свой алгоритм сравнения двух башен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 07:33 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Использование bucket sort позволит провести сортировку не сравнивая элементы исходного множества друг с другом. Однако, в данном конкретном случае, такая сортировка не подойдёт. Может быть существует другой вариант по сортировке без сравнения элементов непосредственно друг с другом ? Алгоритм такой: Использовать быстрое возведение в степень, и свой формат хранения больших чисел. Но данный алгоритм не позволит сравнить две башни, разница между которыми очень маленькая. Тут аналогичная ситуация как с диапазоном long double, и покрытием множества действительных чисел. Асимптотика алгоритма O(nlgn), коэффициент перед функцией будет порядка 10^3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 07:49 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИспользование bucket sort позволит провести сортировку не сравнивая элементы исходного множества друг с другом. Однако, в данном конкретном случае, такая сортировка не подойдёт. Может быть существует другой вариант по сортировке без сравнения элементов непосредственно друг с другом ? Не знаю почему ты решил что bucket sort не требует сравнения. Там элементы не сравниваются меж собой на первом шаге, но сравнивается элемент с границами корзины. На втором шаге каждая корзина сортируется обычной сортировкой, т.е. со сравнением элементов. ИМХУ это просто специфичный вид сортировки для очень больших последовательностей: сначала разбиваем на куски, которые гарантированно поместятся в памяти, затем сортируем каждый кусок. SashaMercuryАлгоритм такой: Использовать быстрое возведение в степень, и свой формат хранения больших чисел. Но данный алгоритм не позволит сравнить две башни, разница между которыми очень маленькая. Тут аналогичная ситуация как с диапазоном long double, и покрытием множества действительных чисел. Асимптотика алгоритма O(nlgn), коэффициент перед функцией будет порядка 10^3 Думаю тут достаточно порядок результата прикинуть с точностью до первых 10-15 десятичных разрядов. Но и порядок хранить проблематично: 99^99 = 3,7 * 10^197 99^(10^197) ~ 10^(2 * 10^197) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 09:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Если правильно вижу, то решение 18785435 отличается от 18783990 следующим: 1) хранит башню в виде: - количество уровней до шапки - шапка (а не только шапку) 2) вычисляет шапку, 2а) склеивая верхние уровни в один до тех пор, пока ее величина остается меньше 1000 (а не 2470) 2б) логарифмируя полученное значение и умножая его на значение предыдущего уровня, чтобы учесть в шапке на 1 уровень больше (а не на 3 уровня) 3) для всех неучтенных уровней хранит их количество 4) для сравнения башен сравниваются их шапки, однако, если уровни башен до шапок не совпадают, то перед сравнением шапка меньшей логарифмируется столько раз, какова разность уровней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 10:52 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
не совсем понимаю, как оно заметит разницу между 99 99 99 99 99 99 99 99 99 и 98 99 99 99 99 99 99 99 99 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:00 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Идея с логарифмированием на разность уровней очень хороша, можно своровать )) И для большей строгости использовать правильное основание, а не просто e. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:05 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, логарифм по правильному основанию всё равно расчитывается через натуральные. Строгость мы получаем только в суждениях но в численном методе остаётся тоже что и было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:12 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, я это типа знаю, но почему бы не учесть множитель, если он сам идет в руки )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:16 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
РЕСДЭновцы тоже не решили . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:22 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, а, понял о чем ты. Здесь ситуация другая. Если грубо, у него ошибка, которая слабо влияет на результат. Он логарифмирует только одну сторону сравнения. Надо логарифмировать по основанию, которое возводилось в степень с другой стороны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:22 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Бррр. Не понял. С одной стороны... с другой. А можно формулой как-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:26 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВРЕСДЭновцы тоже не решили . Почему тоже? У нас уже есть почти решение (сравнение). Но его можно еще улучшить, с учетом последних данных ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:26 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonБррр. Не понял. С одной стороны... с другой. А можно формулой как-то? Ну вот у него есть башни (Count1, Head1) и (Count2, Head2). Пусть, для определенности Count2=Count1+1. Он сравнивает башни как Ln(Head1) и Head2, потому что он не хранит информацию о предыдущих уровнях башен. Правильно было бы использовать логарифм по основанию, равному уровню перед шапкой в башне 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 11:36 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovmaytonБррр. Не понял. С одной стороны... с другой. А можно формулой как-то? Ну вот у него есть башни (Count1, Head1) и (Count2, Head2). Пусть, для определенности Count2=Count1+1. Он сравнивает башни как Ln(Head1) и Head2, потому что он не хранит информацию о предыдущих уровнях башен. Правильно было бы использовать логарифм по основанию, равному уровню перед шапкой в башне 2. На самом деле не совсем так. В качестве шапки у него уже хранится логарифм верхней башенки: Head1=Ln(Top1). И, значит, верхняя башенка равна Top1=Exp(Head1). После приведения башен к равной высоте получим новый Top1'=Log(a,Top1)=Log(a,Exp(Head1)). Для сравнения нужен новый Head1'=Ln(Top1')=Ln(Log(a,Exp(Head1)))=Ln(Head1/Ln(a)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 14:09 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
А разве можно вычислить например ln(ln(ln(ln(99)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 14:35 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВА разве можно вычислить например ln(ln(ln(ln(99)))) Вычисления логарифма нужны не сами по себе, а для сравнения башен. Когда башни маленькие, сравниваем их непосредственно. Когда башни большие, сравниваем их логарифмы. Если при этом окажется, что у одной из них логарифм не существует, то она меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 14:43 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВА разве можно вычислить например ln(ln(ln(ln(99)))) А где у нас была такая формула? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 14:45 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonЕвгенийВА разве можно вычислить например ln(ln(ln(ln(99)))) А где у нас была такая формула? 18777841 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 15:04 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВmaytonпропущено... А где у нас была такая формула? 18777841 Ну нет там такого. Смотри внимательнее. Под логарифмом - сумма. В последнем преобразовании. Дальше просто не было преобразований. Будь осторожнее с такими аналогиями. Конешно область определения уходит в минус. Но твоя формула не равна моей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 15:06 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Есть идея. Результат можно рассмотреть как Код: sql 1. Для расчета конкретного значения f() это pow(), но для сравнения можно поискать функцию с такими же характеристиками, т.е. чтобы при Код: sql 1. всегда выполнялось Код: sql 1. Дополнительно можно ограничить что основание (а и с) всегда в диапазоне 2...99 Правда тут проблема что из-за вложенности погрешность большая может накопиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 17:31 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Станислав С...кийА если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А? Зато тот, что за 20 минут - правильный :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 17:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovдумаю, стоит попробовать приводить к виду e^e^e^e^e^e^e^e^e^xдумаю, очень хорошая идея. сравнение чисел можно производить по количеству "e", если оно разное, и по "x", если количесто одинаковое. Aleksandr Sharahovсправа налево, каждый раз переходя к новому основанию e. а почему не напрямую? можно расписать это step-by-step. введем обозначение: пусть A 1.k = a 1 ^a 2 ^a 3 ...a k , A 2.k = a 2 ^a 3 ...a k , A k.k = a k . согласно A = e ln(A) , получается, что многократно логарифмуя, на каждом шагу получаем .. распишем пошагово: первый шаг: ln( A 1.k ) = A 2.k * ln( a 1 ) второй шаг: ln(ln( A 1.k )) = ln(A 2.k * ln( a 1 )) = ln(A 2.k ) + ln(ln( a 1 )) = A 3.k * ln( a 2 ) + ln(ln( a 1 )) Так, здесь у нас появляется сумма, и уже нельзя так удобно логарифмовать с переносом остатка башни вниз в виде множителя. Однако, если мы перепишем верхнее выражение как A 3.k * [ ln( a 2 ) + ln(ln( a 1 )) / A 3.k ] то есть вынесем за скобки башню (3.к), то вроде бы видно что членом с a 1 можно пренебречь, он будет практически нулем. и тогда третий шаг: ln(ln(ln( A 1.k ))) = A 4.k * ln( a 3 ) + ln(ln( a 2 )) и аналогично четвертый шаг ln(ln(ln(ln( A 1.k )))) = A 5.k * ln( a 4 ) + ln(ln( a 3 )) ну и вроде появляется алгоритм "факторизации" башни, то есть приведения ее в вид e^e^e^e^e^e^e^e^e^x то есть что-то такое: 1. Просматриваем башню, и если где-то какой-то a i = 1, отбрасываем его и всю часть правее. 2. Делаем 'к' шагов (столько, сколько членов башни задано с учетом п.1) 3. Вычисляем x на последнем шагу. 4. Если оно большое (x>e), логарифмируем, столько раз, сколько надо, чтобы получилось 0 < x < e, при этом добавляя к нашему 'k' дополнительные шаги. 5. Теперь у нас есть оценка величины башни - это два числа - количество шагов и x. ну пусть кто-нибудь проверит, не ошибся ли я:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 17:52 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
S.G.A 3.k * [ ln( a 2 ) + ln(ln( a 1 )) / A 3.k ] то есть вынесем за скобки башню (3.к), то вроде бы видно что членом с a 1 можно пренебречь Нельзя им пренебречь. В этом и засада. Заходили немного с другой стороны 18782181 (не сработало), и также споткнулись на "вроде можно пренебречь". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 18:28 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
В продолжение 18789098 если взять Код: sql 1. тогда все отлично работает на башнях одинаковой высоты. Тестю в экселе. Но на разных не работает, т.к. Log2(1^1) = 0. Логарифм по основанию 2 (минимально возможное) именно потому чтобы всегда было в результате >=1. В общем мне эта идея кажется заманчивой, но надо ее допилить для сравнения башен разной высоты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 18:48 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
S.G., я имел в виду следующее: Любая башня однозначно представима в виде: e^e^...n раз...e^x, где 0<=x<1 Поэтому достаточно хранить и сравнивать только эти два числа. Проблема в том, чтобы организовать циклический пересчет этих чисел сверху вниз. Возможно, удобнее будет использовать основание 2 вместо e. Я эту идею пока не бросаю, оставил на подумать при наличии времени. Есть мысль, как ее развить, но пока занят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 20:26 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovS.G., я имел в виду следующее: Любая башня однозначно представима в виде: e^e^...n раз...e^x, где 0<=x<1 Поэтому достаточно хранить и сравнивать только эти два числа. Проблема в том, чтобы организовать циклический пересчет этих чисел сверху вниз. да, я понял. (только условие для x должно быть 0 < x < e , как мне кажется) просто попытался сделать это снизу вверх. (или слева направо). На одном из шагов есть отбрасывание (как мне кажется незначительного) члена, но Dima T утверждает что его нельзя отбросить. Мне сейчас немного сложновато сделать рабочий код для проверки (увы, основная работа мешает :) ) но через несколько дней я попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 20:58 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Я не помню рассматривали такой подход или нет. Можно попробовать брать частное двух башен и строить компаратор на основании этого свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 10:29 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
mayton, все тоже самое в итоге получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 13:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Еще одна мысль появилась про "отбросить незначительное", т.е. тут выкинуть ln(ln(a 1 )) ln(ln(b 1 )) и получить т.е. обсчитать только верх башни. Наигравшись в экселе с 4-5 этажными башнями из малых чисел вроде как вижу что должно работать, но надо то что выкинули все равно учесть, т.к. {99,99,3,4,5} > {99,98,3,4,5} а формула это игнорирует. Поэтому сделал просто: при совпадении шапок опускаюсь ниже и сравниваю значения одного уровня, если не совпали, то больше там где значение больше, т.е. в данном примере 99 > 98 поэтому считаю что башня больше. Но похоже неправильное сравнение. Заслал на тест, останавливается на 5-й проверке. Дополнительно нормализовал башни. Сделал тип double и понижаю верхушку пока результат возведения в степень <10 50 Надо либо проверку нижних усовершенствовать при совпадении верхов, либо идея "отбросить незначительное" не подходит, т.е. отбрасывается что-то значительное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 18:16 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Есть сомнения что при любых A, B, C всегда выполняется условие {2, 2, 2, 2, 2, 2, 99, A, B, C} > {99, 99, 99, 99, 99, 99, 98, A, B, C} как проверить - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 19:26 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЕсть сомнения что при любых A, B, C всегда выполняется условие {2, 2, 2, 2, 2, 2, 99, A, B, C} > {99, 99, 99, 99, 99, 99, 98, A, B, C} как проверить - не знаю. проверить, что в самом тяжелом случае (A=B=C=2) 99^A^B^C / 98^A^B^C > 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 20:19 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima TЕсть сомнения что при любых A, B, C всегда выполняется условие {2, 2, 2, 2, 2, 2, 99, A, B, C} > {99, 99, 99, 99, 99, 99, 98, A, B, C} как проверить - не знаю. проверить, что в самом тяжелом случае (A=B=C=2) 99^A^B^C / 98^A^B^C > 7 Тут калькулятора достаточно: 99^16 / 98^16 = 8.514577711e31 / 7.237977206e31 = 1.176375314 Откуда магическое число 7? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 20:29 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, логарифм по основанию 2 наибольшего значения этажа к наименьшему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 20:33 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima T, логарифм по основанию 2 наибольшего значения этажа к наименьшему log 2 (10) = 1,008600172 Это меньше, но откуда родилось данное утверждение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 20:48 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Логарифм по основанию 2 отношения наибольшего значения этажа к наименьшему берется отсюда. Пусть b1=7 * b2 Тогда 2^b1 = 2^(7*b2) = (2^7)^b2 = 128^b2 > 99^b2, 2^2^b1 = 2^128^b2 > 99^99^b2, т.к. даже при b2=2 имеем 2^128^2 = 2^16k = (2^16)^1024 > 99^1000 ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 20:52 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
7 это log(2,99) с некоторым запасом. Можно доказать, что чем больше значения сравниваемых шапок, тем меньший запас нужен. Т.е. как отношение шапок за 7 перевалило, так уже точно башня с большей шапкой больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 21:00 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov2^2^b1 = 2^128^b2 > 99^99^b2, т.к. даже при b2=2 имеем 2^128^2 = 2^16k = (2^16)^1024 > 99^1000 тут неточность 2^2^b1 = 2^128^b2 > 99^99^b2, т.к. даже при b2=2^2^2 имеем 2^128^16 > 99^99^16 и снова (128/99)^16 > 7 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 01:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Берите натуральный. У него больше возможностей к преобразованиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 01:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВА как вычисляют, что например 2^2^65536~10^10^21840? Взято отсюда . lglg(2^2^65536) = lg(2^65536*lg2) = 65536*lg2+lglg2 ~ 19728 значит 2^2^65536 ~ 10^10^19728 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 12:42 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovзначит 2^2^65536 ~ 10^10^19728 Значит там ошибка? 19728, а не 21840? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 13:51 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonНу нет там такого. Смотри внимательнее. Под логарифмом - сумма. В последнем преобразовании. Дальше просто не было преобразований. Будь осторожнее с такими аналогиями. Конешно область определения уходит в минус. Но твоя формула не равна моей. В моём первом варианте преобразований надо уйти от неопределённостей. Например сдвинуть логарифму на 1 влево (или прибавить +1 к аргументу под логарифмом) http://yotx.ru/#!1/3_h/ubWwf7Wwf7Rgzhf23/aP9g/2DfT0qt7RPgG3vQrd39g30SDbuxc8p4PN1iPG5dXuzub@0DBg== ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 14:13 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Четыре преобразования и всё ОК. Без выхода в отрицательную область определения. y = ln(ln(ln(ln(x+1)+1)+1)+1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 14:16 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВAleksandr Sharahovзначит 2^2^65536 ~ 10^10^19728 Значит там ошибка? 19728, а не 21840? Человеку свойствинно ошебаться )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2016, 14:37 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Я решил Описание алгоритма 1. Нормализовать верхи башень, т.е. считать верхи пока считаются, например 2^(2^(2^(2^2))) привести к 2^65536 2. Сравнивать три верхних уровня: ln(ln(a 3 )) + ln(a 4 ) * a 5 и ln(ln(b 3 )) + ln(b 4 ) * b 5 3. Если верхи совпали - сравнивать нижние сверху вниз: a 2 и b 2 если равны a 1 и b 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 16:55 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, Сравни по своему алгоритму 99, 99, 78, 98, 99, 90, 99, 99 25, 34, 99, 75, 2, 99, 99, 92, 99 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:07 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЯ решил Описание алгоритма 1. Нормализовать верхи башень, т.е. считать верхи пока считаются, например 2^(2^(2^(2^2))) привести к 2^65536 2. Сравнивать три верхних уровня: ln(ln(a 3 )) + ln(a 4 ) * a 5 и ln(ln(b 3 )) + ln(b 4 ) * b 5 3. Если верхи совпали - сравнивать нижние сверху вниз: a 2 и b 2 если равны a 1 и b 1 B 18783990 тот же самый алгоритм сравнения ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:11 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
99, 99, 78, 98, 99, 90, 99, 99 < 25, 34, 99, 75, 2, 99, 99, 92, 99 Если кому сравнить - пишите, посчитаю, только запросы оформляйте в формате тестов Код: sql 1. 2. 3. Ответ Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:21 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovB 18783990 тот же самый алгоритм сравнения ) Алгоритм сравнения сразу правильный придумали 18772992 18773013 18777841 Но одного алгоритма сравнения мне не хватило. Думаю он не срабатывает из-за погрешностей логарифмирования на каких-то башнях с очень близкими значениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:38 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВDima T, 9 99 27 66 они равны, что противоречит условию задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovB 18783990 тот же самый алгоритм сравнения ) ты тут перемудрил Код: sql 1. затестил ради интереса - не проходит мой код с такой проверкой. у меня проще Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:50 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TAleksandr SharahovB 18783990 тот же самый алгоритм сравнения ) Алгоритм сравнения сразу правильный придумали 18772992 18773013 18777841 Но одного алгоритма сравнения мне не хватило. Думаю он не срабатывает из-за погрешностей логарифмирования на каких-то башнях с очень близкими значениями. Да, это понятно. Но вся суть алгоритма в том, чтобы различать почти одинаковые башни (k<7), при этом отбраковывая одинаковые. Дело в том, что таких башен конечное число, и, похоже, что после склейки верхних уровней не существует таких башен высотой более 4 (если считать склеенные уровни за 1). Т.е. главная фишка алгоритма - именно склейка верхних уровней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:52 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЕвгенийВDima T, 9 99 27 66 они равны, что противоречит условию задачи. нет равных разве не подразумевает например 2 3 2 и 2 3 2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 17:58 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВDima Tпропущено... они равны, что противоречит условию задачи. нет равных разве не подразумевает например 2 3 2 и 2 3 2? Думаю что нет. Мой код на Код: sql 1. 2. и на Код: sql 1. 2. дает ответ Код: sql 1. но ответ Код: sql 1. тоже правильный, что вызывает неопреденность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 18:04 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovДело в том, что таких башен конечное число, и, похоже, что после склейки верхних уровней не существует таких башен высотой более 4 (если считать склеенные уровни за 1). Т.е. главная фишка алгоритма - именно склейка верхних уровней. c 10 до 4 не склеить даже если там одни двойки. 2^2^2^2 = 65536 а дальше не склеить. Но т.к. по условию задачи исходные уровни не более 99, т.е. максимум склеиваются три верхних в один, например 2^2^2 = 16 Как следствие функция проверки должна работать без склеивания. А если она не работает, то значит должна существовать такая пара пятиуровневых башень A(a1^a2^a3^a4^a5) и B(b1^b2^b3^b4^b5) удовлетворяющих условию A<B при a3^a4^a5>b3^b4^b5 или (a3^a4^a5=b3^b4^b5 и a2>b2) или (a3^a4^a5=b3^b4^b5 и a2=b2 и a1>b1) Ломаю голову как найти такую комбинацию, т.е. доказать что без склейки никак не решить. Перебор тут на годы может растянуться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 18:43 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВDima TДля практики можешь задачки олимпиадные порешать. Оффтоп! чета я в условия этой не въеду. Редиска ты, Евгений. Ты отсортировал задачи по сложности в выдал нам самую топовую из всех 700 http://acmp.ru/index.asp?main=tasks&str= &page=13&id_type=0 Ну неужели не мог найти чё-нить поприятнее ну йо-майо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 18:58 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Нашел пару, нерешаемую без склеивания уровней: 64^2^2^2 > 2^3^2^2 , тут недостаточно проверить 2^2^2 < 3^2^2 ЗЫ mayton, загляни в обсуждение задачи, три месяца назад она вообще была нерешаема автор Беляев Сергей Николаевич, 02 ноября 2015 г. 7:18:37 В связи с тем, что ранее авторское решение и тесты были ошибочными, тесты изменены, все решения отправлены на перепроверку, а сложность задачи повышена с 71 до 95. В результате мы имеем 0 верных решений на текущий момент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 19:08 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Вот пускай этот Сергей Николаич нам расскажет как он тестировать это будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 19:36 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
maytonВот пускай этот Сергей Николаич нам расскажет как он тестировать это будет. и исходник проверялки пусть покажет, а то вдруг еще чего накосячено ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 19:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TAleksandr SharahovB 18783990 тот же самый алгоритм сравнения ) ты тут перемудрил Код: sql 1. затестил ради интереса - не проходит мой код с такой проверкой. у меня проще Код: sql 1. Да нет, вроде верно все. Просто epsilon он на то epsilon, чтоб его подбирать при настройке алгоритма. Задача тут отсечь равные с учетом накопившихся ошибок, не затронув при этом почти равные. Dima TAleksandr SharahovДело в том, что таких башен конечное число, и, похоже, что после склейки верхних уровней не существует таких башен высотой более 4 (если считать склеенные уровни за 1). Т.е. главная фишка алгоритма - именно склейка верхних уровней. c 10 до 4 не склеить даже если там одни двойки. 2^2^2^2 = 65536 а дальше не склеить. Но т.к. по условию задачи исходные уровни не более 99, т.е. максимум склеиваются три верхних в один, например 2^2^2 = 16 Как следствие функция проверки должна работать без склеивания. А если она не работает, то значит должна существовать такая пара пятиуровневых башень A(a1^a2^a3^a4^a5) и B(b1^b2^b3^b4^b5) удовлетворяющих условию A<B при a3^a4^a5>b3^b4^b5 или (a3^a4^a5=b3^b4^b5 и a2>b2) или (a3^a4^a5=b3^b4^b5 и a2=b2 и a1>b1) Ломаю голову как найти такую комбинацию, т.е. доказать что без склейки никак не решить. Перебор тут на годы может растянуться. Ты не понял. У меня речь идет о 4х ВЕРХНИХ уровнях, причем после того, как самый верхний их них был получен склейкой (см. мой алгоритм сравнения 18783990 ) P.S. Задачей этой почти не занимался, только в метро иногда размышляю, да слежу, что тут пишут ) Все на выходные откладываю удовольствие. По-хорошему, про 5й уровень доказать надо, что там нету наших башенок, а то все решение коту под хвост. Да и не особо теперь доверяю проверке от авторов задачи ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 19:42 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonВот пускай этот Сергей Николаич нам расскажет как он тестировать это будет. и исходник проверялки пусть покажет, а то вдруг еще чего накосячено Я не думаю что создатели контестеров утруждают себя написанием исходника. Скорее всего исходник это плод крауд-сорсинга. Или просто отбирается на конкурсной основе самый компактный (или бысстрый) в своём классе ЯП. И опять-же его никому не показывают. Ну.. если-бы я организовывал подобные соревнования то ябы точно не осилил 700 олимпиадных задач решить да еще и без ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2016, 19:47 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Вирт в этом плане лучший. Все до мельчайших подробностей у него! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 00:00 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Что у него? 700 олимпиадных задач? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 02:30 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovТы не понял. У меня речь идет о 4х ВЕРХНИХ уровнях, причем после того, как самый верхний их них был получен склейкой (см. мой алгоритм сравнения 18783990 ) Не сработает на такой Код: sql 1. 2. 3. 99^99 это 197 десятичных знаков, а в double мантисса всего 15, т.е. хвост теряется из-за погрешностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 07:53 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Если кому надо для отладки - можете взять мой тест с ответом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ответ Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 08:12 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TAleksandr SharahovТы не понял. У меня речь идет о 4х ВЕРХНИХ уровнях, причем после того, как самый верхний их них был получен склейкой (см. мой алгоритм сравнения 18783990 ) Не сработает на такой Код: sql 1. 2. 3. 99^99 это 197 десятичных знаков, а в double мантисса всего 15, т.е. хвост теряется из-за погрешностей. Да посмотри уж, наконец, мое решение 18783990 ) Все сработает. Повторяю еще раз, твое решение полностью совпадает с моим. Разница только в работе с epsilon, которую я не настраивал, т.к. пока не занимался этой задачей плотно. Просто у меня есть несколько направлений, куда двигаться, чтобы решение задачи не было похоже на чит. К тому же я, похоже, знаю где искать почти одинаковые башенки. Вопрос только во времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 09:17 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima TНе сработает на такой Код: sql 1. 2. 3. Да посмотри уж, наконец, мое решение 18783990 ) Все сработает. Сработает и ладно. Поверю на слово. Смотрел неоднократно и уже несколько раз писал что китайской грамоте не обучен. Ну не знаю я паскаля с его нездоровым синтаксисом. И ни одного камента у тебя нет. ХЗ что такое High(MaxBaseForPower) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 09:49 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Кажется понял, на что ты надеешься. Думаешь раз совпало, то досравнится тут: Код: sql 1. 2. 3. 4. Тот пример пройдет, этот не должен. Код: sql 1. 2. 3. 4. Правильный ответ 3 2 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 10:19 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, да, думаю ) Твой пример показывает, что от схлопывания может быть не только польза, но и вред. Чтобы все сработало правильно, надо подстроить жадность алгоритма схлопывания. У меня она задается константой 2470, исходя из которой рассчитаны значения элементов MaxBaseForPower. Значит, нужно изменить порог схлопывания так, чтобы оно не выполнялось в данном случае - и все сработает. Я пробую обсуждать алгоритм, а не значения констант ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 11:19 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, Кстати, там же в исходнике строчкой выше объявления массива MaxBaseForPower для константы 2470 закомментирован другой вариант объявления для константы 300. Если его раскомментировать, то твой пример проходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 11:43 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Можно попробовать зайти с другой стороны. Если добить все короткие башни справа до 9 членов единицами, то получим всего 99^9 = 913517247483640899 вариантов, что сущий пустяк по сравнению с например с 2^65536! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 11:46 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВМожно попробовать зайти с другой стороны. Если добить все короткие башни справа до 9 членов единицами, то получим всего 99^9 = 913517247483640899 вариантов, что сущий пустяк по сравнению с например с 2^65536! правильно 98^9 т.к. нули не используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 11:56 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima Tправильно 98^9 т.к. нули не используются. 833747762130149888 - еще лучше :) Можно ввести последовательность 1 1 1 1 1 1 1 1 1 ->1 1 1 1 1 1 1 1 1 2 ->2 ...................... 1 1 1 1 1 3 1 1 3 ->2910900 ...................... 99 99 99 99 99 99 99 99 99 -> 833747762130149888 которая задается формулой k 9 *99^9+...k 1 где k i 0..9 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:45 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВDima Tправильно 98^9 т.к. нули не используются. 833747762130149888 - еще лучше :) Можно ввести последовательность 1 1 1 1 1 1 1 1 1 ->1 1 1 1 1 1 1 1 1 2 ->2 ...................... 1 1 1 1 1 3 1 1 3 ->2910900 ...................... 99 99 99 99 99 99 99 99 99 -> 833747762130149888 которая задается формулой k 9 *99^9+...k 1 где k i 0..9 И чем она будет отличаться от того как мы это сейчас пишем? Единичкой вместо пробела и записью слева направо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:56 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TИ чем она будет отличаться от того как мы это сейчас пишем? Единичкой вместо пробела и записью слева направо? Пусть то было множество M1. Вычислим все возможные пирамиды и отсортируем, получим множество M2, точно такой же мощности как и первое. Теперь осталось найти функцию, которая по каждому номеру элемента из M1 сопоставляет номер элемента из M2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 14:03 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВ, для начала прикинь сколько времени это будет считаться. Потом сколько места надо будет для хранения результата, потом обсудим "отсортируем" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 14:10 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЕвгенийВ, для начала прикинь сколько времени это будет считаться. Потом сколько места надо будет для хранения результата, потом обсудим "отсортируем" Если найти нужную функцию, то всего этого не потребуется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 14:14 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Если выполнить первый пункт "Вычислим все возможные пирамиды", т.е. найти способ вычисления, то функция не потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 14:18 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima T, да, думаю ) Твой пример показывает, что от схлопывания может быть не только польза, но и вред. Чтобы все сработало правильно, надо подстроить жадность алгоритма схлопывания. У меня она задается константой 2470, исходя из которой рассчитаны значения элементов MaxBaseForPower. Значит, нужно изменить порог схлопывания так, чтобы оно не выполнялось в данном случае - и все сработает. Я пробую обсуждать алгоритм, а не значения констант ) Я так и не понял это ноу-хау с MaxBaseForPower. Понимаю что это какой-то результат твоих многоуровневых размышлений, но я не телепат. Будь проще - заработаешь больше. Если честно - уже устал придумывать тесты (хотя в связи с этим появилось кое-какое понимание как делать тесты) и запости свое "итого" на проверку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 20:19 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima TЯ так и не понял это ноу-хау с MaxBaseForPower. Да там примитивно все. Пусть два самых уровня башни представляют собой башенку a^b. Тогда мы заменяем их одним эквивалентным уровнем ("склеиваем"), если в результате склеивания будет получено значение не больше некоторой константы (например, 300), в противном случае не склеиваем. Такое шаманство позволяет "улучшить" плохие башни с маленьким числом сверху. Это улучшение позволяет сосредоточить основные вычисления на верхних 4х уровнях. Как мы видели выше, слишком увеличивать эту константу опасно, т.к. ошибки вычислений приводят к невозможности различить разные башни. В общем, как раз этим мне и не нравится это решение. Какие-то полуинтуитивные действия приводят к успеху. Хочется не то чтобы строгого доказательства, но хотя бы четкого обоснования, почему все работает. Почти уверен, что если в условии 99 поменять на 255, алгоритм не сработает. Ну, и хотелось бы иметь возможность проверить работу алгоритма автора задачи ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 20:59 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, пропущено слово ВЫСОКИХ: Пусть два самых ВЫСОКИХ уровня башни представляют собой башенку a^b... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 21:01 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima TЯ так и не понял это ноу-хау с MaxBaseForPower. Да там примитивно все. Пусть два самых уровня башни представляют собой башенку a^b. Тогда мы заменяем их одним эквивалентным уровнем ("склеиваем"), Понятно. Некоторые 3хуровневые тоже клеятся, Например 49^(2^2) = 7^(2^3) я такую тебе подсунул :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 07:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Люди добрые, помогите. Настрочил корявенький код на 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". Может кто знает входные данные для этого теста? Не могу понять, где ошибся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2017, 16:45 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКнут, Скиена, Кормен. Приведите пожалуйста пример неоптимального кода, о котором вы пишите выше крута в жопу, бесполезная книга. Кнут мужик потрясающий, но книги пишет просто почти абсолютно бесполезные. Корме, Лейзерсон Риверст, Штайн (если не переврал) - книга, которой хватит на всё. разбита по главам, можно и нужно читать не все, а только общие темы и то, что конкретно сейчас нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2017, 19:20 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
zitz1989, в этих случаях "помогите" не работает. Ты взялся за одну из самых сложных задач того ресурса, решать ее тебя никто не заставляет. Напрягай мозг, ищи что не учел в коде, топик почитай, может мысли какие появятся. Сам, сам, сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2017, 19:40 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, Да, задача непростая. Но тем она и интересна. Пришлось вспомнить курс школьной алгебры. :) Мыслей по поводу задачи куча, но как лучше впихнуть невпихуемое- хз. Были бы входные данные теста- было бы проще, сразу стало бы ясно, где недоглядел. Но ничего, буду дальше думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2017, 00:12 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
ТриггерманEatsFullLemonsтехнический директор сказал, что мне нужно подтянуть основы алгоритмов, т.к. мой код не всегда самый оптимальныйНу да, да, конечно. А что вы такое супер-важное разрабатывать будете, что позарез нужен оптимальный код? Пишете софт для атомных реакторов? Или для управления самолётами? Ну будет ваша программа считать 0.2 сек вместо 0.1 сек, и бухгалтерша получит отчёт на 0.1 сек позже? И что? Там где говорят про алгоритмы и оптимизацию, там налицо явное непонимание вектора развития разработки прикладного ПО. как бы любой неоптимальный алгоритм на 0.2 вместо 0.1 на 10 миллионах будет работать два дня вместо одного, и чего ты нам тут будешь говорить про вектора развития? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2017, 00:41 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Час от часу не легче. Алгоритм сравнения написал, второй тест прошло. Теперь не хватает времени на тест(2,15-2,20 вместо положенных 2 секунд). Бьюсь над сокращением времени. Пузырьковую сортировку заменил на быструю- результат не изменился. На Java никто эту задачу не решил. Тешу себя надеждой, что дело не во мне, а в Джаве ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2017, 21:48 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Время в третьем тесте победил, но теперь выдает "Wrong answer" в тесте №3. Может кто подкинет еще данных для теста? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 10:13 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Или может подскажет, где поступаю неверно: 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, то сравниваем нижестоящие элементы башни. Где первым попадется больший элемент, та башня и больше. Вот такой алгоритм. Полностью код не публикую, т.к. во-первых он сильно корявенький и в нем черт ногу сломит, а во-вторых он уже наверное близок к прохождению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 11:38 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Дополню. Сразу после публикации предыдущего поста решил поиграться со значениями z из пункта 2. При установке 10<=z<=160 третий тест проходит, но выдает "Wrong answer" в пятом тесте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 11:50 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
zitz1989 б)равна 1(1 x y)- сравниваем по логарифму. ln(x^y)=y*ln(x) Ты в курсе что double надо совсем по другому сравнивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 12:54 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, нет, не в курсе. Просветите пожалуйста, если не сложно. Плюс понял, почему z должен быть значительно меньше меньше 500. double хранит до 1,7е+308. Число 10^1023 взял с конспекта переписанного с JavaRush.ru. Либо JR обманул, или я переписал не то. Грубо говоря, должно быть так z<150 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:02 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, у меня в коде это выглядит так: Код: java 1. 2. max- длина массивов дополненных единицами. Первых две позиции в массивах я выделил под грубый хэшкод(сейчас он в реализации не участвует, но лень код переписывать) и номер башни. На позициях>=3(с индексом >=2) находятся сами элементы башен. По-этому пусть Вас не смущает то, что длина массивов на 2 больше количества элементов башни. Такой подход ошибочен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:09 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
zitz1989Dima T, нет, не в курсе. Просветите пожалуйста, если не сложно. Плюс понял, почему z должен быть значительно меньше меньше 500. double хранит до 1,7е+308. Число 10^1023 взял с конспекта переписанного с JavaRush.ru. Либо JR обманул, или я переписал не то. Грубо говоря, должно быть так z<150 Да, double хранит до 1,7е+308, но не хранит все 308 десятичных разрядов, там только первые 15-16. Гугли про погрешности. Тут можешь почитать . Про погрешности раздел 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:24 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, Да, про мантиссу слыхал. Спасибо за подсказку. Погуглил, числа с плавающей точкой через > < = сравнивать нельзя. Проверка должна быть вида (X-Y>эпсилон). Осталось определиться с вычислением "эпсилон" на основе X и Y. Еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:33 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Бьюсь головой об стену. Код: java 1. 2. 3. 4. 5. 6. 7. При эпсилон =aT*1.0e-16 не проходит 5 тест. При =aT*1.0e-11 не проходит 10 тест. При промежуточных значениях =aT*1.0e-15..=aT*1.0e-12 не проходит 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 16:44 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Всё. 4 дня, 182 попытки(большая часть из них при подборе эпсилон). Теперь можно и выпить. Переписал код, массив вместо short сделал int, нормализацию вел до 2e+9. Немного изменил метод нахождения большей из двух башен. Dima T, боооольшущее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 18:49 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
zitz1989Бьюсь головой об стену. И дальше будешь биться. Ищи обход стены. zitz1989Всё. 4 дня, 182 попытки(большая часть из них при подборе эпсилон). Теперь можно и выпить. Я решил и мое время до сих пор лучшее. По количеству букав не на первом месте. Из-за их глупых рейтингов по количеству букав смотрю на свой код год спустя как на китайскую грамоту, я смутно вспоминаю как я это решил, 100500 оптимизаций, в итоге говнокод прошедший проверку. Да и не уверен я что на последний исходник смотрю, т.к. не было цели сохранить решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:31 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
zitz1989, я так понимаю ты не школьник и не студент, решаешь просто для себя. Если так, то или можешь или не можешь, третьего не дано, а вариант "могу, но с чужой помощью" - это вообще не вариант в реальной жизни, это означает "не могу" даже при положительном результате. Мой совет: отложи эту задачку и порешай что-нибудь попроще. Со временем и на нее ответ найдешь. А под спойлер не заглядывай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:45 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, наверное не так меня поняли. Я решил ее. Трудности вызвало: -превышение времени выполнения программы. Перепробовал различные сортировки массива, ничего не помогло. В итоге, как говорится, дело было не в бобине, дол**еб сидел в кабине. Сортировка работала быстро. Медленно работал метод, выводящий порядок башни. Он в цикле для каждой башни из отсортированного массива искал ее индекс в неотсортированном. -сравнение башен. Знал, что double обрезает дробное число, знал про мантиссу. Да почему-то как-то и не подумал. Сравнивал как целочисленные. -погрешности. Сначала считал по одной формуле, где double умножается на double. Одно урезанное число умножаем на другое. Из-за этого и не проходил 12 тест. Время у меня не лучшее(хотя мог бы немного улучшить, если бы вернул идею с хэшкодом для башен одной высоты), памяти сожрал почти больше всех(можно решить изменив массив на byte, добавить в код массив с шапками башен и позицией этой шапки). Но теплит душу мысль о том, что я единственный решил задачу на Java. Мелочь, а приятно. И да, я не школьник, не студент. Просто решил в свои 27 лет вникнуть в программирование. Еще раз спасибо за подсказку про сравнение чисел с плавающей точкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:27 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, а по поводу рейтинга... Дурное это дело. Код должен быть в меру короток. Лучше будет на 20 символов больше, но переменные будут называться своими именами, а не "a", "b", "c", "x", "y", "z". Время выполнения и занимаемый объем памяти должен быть в приоритете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:32 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
zitz1989Я решил ее. Молодец! Поздравляю! Честно. Важно что решил, неважно как. Java не С, есть свои накладные расходы, как по времени, так и по памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:38 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Может пускай тест остается, вроде и не выдает решение задачи, но способствует пониманию некоторых нюансов. В ближайшее время попробую немного оптимизировать код, верну массив ключей для быстрого сравнения. Думаю и время, и память немного снизятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:48 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Интересная задача. Я тоже попробовал. Все упомянутые здесь тесты прошёл но пока 3й официалный не смог. неверный ответ. Только для удовлетворения любопытства, поделитесь тайным знанием. Тестовыми файлами или просто в ответами на пару вопросов в приватном канале littlesuspense эт live и в самом com. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2017, 13:56 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
[quot Aleksandr SharahovПо-хорошему, про 5й уровень доказать надо, что там нету наших башенок, а то все решение коту под хвост. Да и не особо теперь доверяю проверке от авторов задачи )[/quot] A^x vs B^y, 1 < A,B,x,y < 100 Лемма: Если 10 * x < y то всегда 10*A^x < B^y Доказательство не сложно. 5 башен как следсвие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2017, 14:11 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, Я так не понял где ошибка в вашем коде. в строках сделал long double val[11]; // содержимое long double cache[11]; // кэш для ускорения расчета Тут тоже long double head(int level) { попробывал взять вот такой логарифм (log2(log2(val[level])) + log2(val[level + 1]) * val[level + 2]); while(height > 1 && (log2(val[height - 2]) * val[height - 1]) < 50) { val[height - 2] = pow(val[height - 2], val[height - 1]); всё ровно пятый тест)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2018, 23:30 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
тест проходит когда поменял log10 на log2 ... Модератор: Удалил исходник. Просьба не выкладывать готовые решения целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2018, 03:23 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T,можно вам в лс где нибудь написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2018, 08:55 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
aleksandr421Dima T,можно вам в лс где нибудь написать? В этом форуме нет ЛС, да и не люблю я индивидуальные консультации устраивать. Пиши сюда, а лучше топик отдельный создай со своим вопросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2018, 09:15 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, не будет никакой консультации,просто есть предложение всего одно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2018, 21:22 |
|
||
|
Алгоритмы
|
|||
|---|---|---|---|
|
#18+
Dima T, просто мне её задали в вузе,не могли бы вы мне немного помочь естественно не безвозмездно.Можете мне на эмеил сами написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2018, 11:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1340102]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
231ms |
get tp. blocked users: |
2ms |
| others: | 270ms |
| total: | 708ms |

| 0 / 0 |
