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

а, понял о чем ты.

Здесь ситуация другая.
Если грубо, у него ошибка, которая слабо влияет на результат.
Он логарифмирует только одну сторону сравнения.
Надо логарифмировать по основанию, которое возводилось в степень с другой стороны
...
Рейтинг: 0 / 0
Алгоритмы
    #39165356
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бррр. Не понял. С одной стороны... с другой. А можно формулой как-то?
...
Рейтинг: 0 / 0
Алгоритмы
    #39165357
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВРЕСДЭновцы тоже не решили .

Почему тоже?
У нас уже есть почти решение (сравнение).
Но его можно еще улучшить, с учетом последних данных )
...
Рейтинг: 0 / 0
Алгоритмы
    #39165375
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБррр. Не понял. С одной стороны... с другой. А можно формулой как-то?

Ну вот у него есть башни (Count1, Head1) и (Count2, Head2).
Пусть, для определенности Count2=Count1+1.
Он сравнивает башни как Ln(Head1) и Head2,
потому что он не хранит информацию о предыдущих уровнях башен.
Правильно было бы использовать логарифм по основанию,
равному уровню перед шапкой в башне 2.
...
Рейтинг: 0 / 0
Алгоритмы
    #39165548
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)).
...
Рейтинг: 0 / 0
Алгоритмы
    #39165577
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве можно вычислить например
ln(ln(ln(ln(99))))
...
Рейтинг: 0 / 0
Алгоритмы
    #39165598
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВА разве можно вычислить например
ln(ln(ln(ln(99))))

Вычисления логарифма нужны не сами по себе, а для сравнения башен.
Когда башни маленькие, сравниваем их непосредственно.
Когда башни большие, сравниваем их логарифмы.
Если при этом окажется, что у одной из них логарифм не существует, то она меньше.
...
Рейтинг: 0 / 0
Алгоритмы
    #39165603
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВА разве можно вычислить например
ln(ln(ln(ln(99))))
А где у нас была такая формула?
...
Рейтинг: 0 / 0
Алгоритмы
    #39165636
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕвгенийВА разве можно вычислить например
ln(ln(ln(ln(99))))
А где у нас была такая формула?
18777841
...
Рейтинг: 0 / 0
Алгоритмы
    #39165640
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВmaytonпропущено...

А где у нас была такая формула?
18777841
Ну нет там такого. Смотри внимательнее. Под логарифмом - сумма. В последнем преобразовании.
Дальше просто не было преобразований.

Будь осторожнее с такими аналогиями. Конешно область определения уходит в минус.
Но твоя формула не равна моей.
...
Рейтинг: 0 / 0
Алгоритмы
    #39165791
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть идея.

Результат можно рассмотреть как
Код: sql
1.
f(a1, f(a2, f(a3, f(a4, f5))))


Для расчета конкретного значения f() это pow(), но для сравнения можно поискать функцию с такими же характеристиками, т.е. чтобы при
Код: sql
1.
pow(a, b) > pow(c, d)

всегда выполнялось
Код: sql
1.
f(a, b) > f(c, d)


Дополнительно можно ограничить что основание (а и с) всегда в диапазоне 2...99

Правда тут проблема что из-за вложенности погрешность большая может накопиться.
...
Рейтинг: 0 / 0
Алгоритмы
    #39165798
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийА если отчет за месяц будет строиться за 20 секунд вместо 20 минут? А?

Зато тот, что за 20 минут - правильный :)
...
Рейтинг: 0 / 0
Алгоритмы
    #39165809
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.

ну пусть кто-нибудь проверит, не ошибся ли я:)
...
Рейтинг: 0 / 0
Алгоритмы
    #39165854
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.A 3.k * [ ln( a 2 ) + ln(ln( a 1 )) / A 3.k ] то есть вынесем за скобки башню (3.к), то вроде бы видно что членом с a 1 можно пренебречь
Нельзя им пренебречь. В этом и засада. Заходили немного с другой стороны 18782181 (не сработало), и также споткнулись на "вроде можно пренебречь".
...
Рейтинг: 0 / 0
Алгоритмы
    #39165870
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение 18789098
если взять
Код: sql
1.
f(a,b) = Log2(a^b)


тогда все отлично работает на башнях одинаковой высоты. Тестю в экселе. Но на разных не работает, т.к. Log2(1^1) = 0.
Логарифм по основанию 2 (минимально возможное) именно потому чтобы всегда было в результате >=1.
В общем мне эта идея кажется заманчивой, но надо ее допилить для сравнения башен разной высоты.
...
Рейтинг: 0 / 0
Алгоритмы
    #39165969
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G., я имел в виду следующее:

Любая башня однозначно представима в виде:
e^e^...n раз...e^x, где 0<=x<1
Поэтому достаточно хранить и сравнивать только эти два числа.
Проблема в том, чтобы организовать циклический пересчет этих чисел сверху вниз.
Возможно, удобнее будет использовать основание 2 вместо e.

Я эту идею пока не бросаю, оставил на подумать при наличии времени.
Есть мысль, как ее развить, но пока занят.
...
Рейтинг: 0 / 0
Алгоритмы
    #39165992
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovS.G., я имел в виду следующее:

Любая башня однозначно представима в виде:
e^e^...n раз...e^x, где 0<=x<1
Поэтому достаточно хранить и сравнивать только эти два числа.
Проблема в том, чтобы организовать циклический пересчет этих чисел сверху вниз.
да, я понял.
(только условие для x должно быть 0 < x < e , как мне кажется)
просто попытался сделать это снизу вверх. (или слева направо).
На одном из шагов есть отбрасывание (как мне кажется незначительного) члена, но Dima T утверждает что его нельзя отбросить.
Мне сейчас немного сложновато сделать рабочий код для проверки (увы, основная работа мешает :) ) но через несколько дней я попробую.
...
Рейтинг: 0 / 0
Алгоритмы
    #39166280
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не помню рассматривали такой подход или нет. Можно попробовать брать частное
двух башен и строить компаратор на основании этого свойства.
...
Рейтинг: 0 / 0
Алгоритмы
    #39166558
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

все тоже самое в итоге получается.
...
Рейтинг: 0 / 0
Алгоритмы
    #39167000
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна мысль появилась про "отбросить незначительное", т.е. тут



выкинуть 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

Надо либо проверку нижних усовершенствовать при совпадении верхов, либо идея "отбросить незначительное" не подходит, т.е. отбрасывается что-то значительное.
...
Рейтинг: 0 / 0
Алгоритмы
    #39167065
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}

как проверить - не знаю.
...
Рейтинг: 0 / 0
Алгоритмы
    #39167096
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Алгоритмы
    #39167102
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
...
Рейтинг: 0 / 0
Алгоритмы
    #39167106
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

логарифм по основанию 2 наибольшего значения этажа к наименьшему
...
Рейтинг: 0 / 0
25 сообщений из 208, страница 5 из 9
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Алгоритмы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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