|
|
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
без этой хрени получаются хреновые алгоритмы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2014, 23:19 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
У меня такой вопрос. Я дал вам площадку 10^6 на 10^6. Общая площадь 10^12, это примерно 3.2*12 бит > 4 Байт. Как в паскале в тип Integer влезло такое число бит, или же происходит что-то аналогичное Integer Promotion в Си ? Или тип для Integer выделяется больше 4 Байт ? Первые алгоритмы в целом понятны, вы модифицировали предложенною мной сумму как разность площадей, так действительно лучше. Сегодня вновь ничего не смогу проверить. Только завтра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 05:35 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Вчера решил попробовать решить этого "Вини-пуха" и сделать это наиболее эффективно, и начал с того что самой лучшей попыткой решения является реализация на BASIC (VB6) IDДатаАвторЯзыкВремяПамятьРазмер104.07.2009 19:35:38Антон ЛунёвBasic0.207218 Кб123 Во-первых, код который просто читает в переменные из файла и записывает решение заняло у меня около ~101 байт (без учетов пробелов, переносов) Код: vbnet 1. 2. 3. 4. 5. 6. 7. Остаётся 123 - 101 = 22 байта на формулу (тут циклом боюсь не запишешь) которая даст решение. Но во-вторых, самое странное, что даже программа которая ничего не делает и не считывает требует около 1,5 Мб памяти, но у решившего получается всего использовано 218 Кб. Я так чую или подвох какой-то (возможно раньше был компилятор у системы), либо фейковый результат... Может есть какое-то объяснение этому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 09:53 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercuryУ меня такой вопрос. Я дал вам площадку 10^6 на 10^6. Общая площадь 10^12, это примерно 3.2*12 бит > 4 Байт. Как в паскале в тип Integer влезло такое число бит, или же происходит что-то аналогичное Integer Promotion в Си ? Или тип для Integer выделяется больше 4 Байт ? Оно и не влезло. Все вычисления выполнены по модулю 2^32. Можно вообще получить отрицательный результат, т.к. старший бит - знаковый. Есть int64, если надо больше бит. SashaMercuryПервые алгоритмы в целом понятны, вы модифицировали предложенною мной сумму как разность площадей, так действительно лучше. Последний самый интересный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2014, 10:15 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
А можно подробнее про операцию "произведения по модулю". Я не понял как вы перемножили большие числа без длинной арифметики и Integer Promotion, в вашем коде я также не заметил специфических операций. Может быть вы предложите одну формулу для получения нужного результата ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 02:37 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
VSVLAD , скорее всего товарищ использовал препроцессорную обработку для сокращения объёма кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 02:39 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА можно подробнее про операцию "произведения по модулю". Я не понял как вы перемножили большие числа без длинной арифметики и Integer Promotion, в вашем коде я также не заметил специфических операций. Вот такие объявления Код: pascal 1. как раз и являются специфическими операторами. Они определяют сколько бит будет выделено для хранения и работы с переменной, т.е. количество ее возможных значений. Процессору ничего другого не остается, кроме как "крутиться" (здесь это очень точное слово) внутри этого множества значений. Это довольно большая тема, читайте книги или заводите отдельную ветку - поговорим. SashaMercuryМожет быть вы предложите одну формулу для получения нужного результата ?) Запросто ) Однако думаю вам это гораздо интереснее будет сделать самостоятельно. В данной задаче это не особенно актуально, но иногда бывает нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 08:17 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, мне показалось что вы не ответили на мой вопрос SSУ меня такой вопрос. Я дал вам площадку 10^6 на 10^6. Общая площадь 10^12, это примерно 3.2*12 бит > 4 Байт. Как в паскале в тип Integer влезло такое число бит, или же происходит что-то аналогичное Integer Promotion в Си ? Или тип для Integer выделяется больше 4 Байт ? Aleksandr Sharahov,Оно и не влезло. Все вычисления выполнены по модулю 2^32. Можно вообще получить отрицательный результат, т.к. старший бит - знаковый. Есть int64, если надо больше бит. а в тра-та-та:T ничего специфического я не вижу ;) Хотя в коде я не встретил у вас m*n - , потому вполне возможно что переполнения не будет, но тогда почему вы стали говорить про выполнение операций по модулю ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 08:32 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Если можно получить результат прямой формулой, то это всегда актуально ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 08:33 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли можно получить результат прямой формулой, то это всегда актуально ) Гаусс решал задачу о восьми ферзях. Он искал аналитическое решение вида формулы. И не нашёл. Для шахматных задач (комбинаторный класс задач) иногда и нет аналитического решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 09:27 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа в тра-та-та: ничего специфического я не вижу ;) А суслик есть, и от него зависит сгенерированный компилятором код. SashaMercuryХотя в коде я не встретил у вас m*n - , потому вполне возможно что переполнения не будет, но тогда почему вы стали говорить про выполнение операций по модулю ? Совершенно неважно есть там это умножение или нет. Код, используя целочисленную 32-битную арифметику, каким-то образом считает площадь, превышающую 2^31. Переполнения обязаны быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 10:40 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
VSVLAD, а откуда взялась цифра 218 кб? Это что размер исходника? Бинарника? Или выделяемая память при работе приложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 15:35 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Это затрачиваемая программой память, размер кода 123 ) Объясните мне кто-нибудь пожалуйста, каким образом его программа работает с длинной арифметикой, и будет ли она у него на моих примерах ?) Кстати, Aleksandr Sharahov , зачем вы так усложнили поиск минимального отступа ? Простите, этот код весь ваш, я правильно понимаю ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 15:44 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
mayton, вы полностью правы в вашем предыдущем рассуждении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 15:46 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAleksandr Sharahov, зачем вы так усложнили поиск минимального отступа? Специально ничего не усложнял, а проще не сумел ) SashaMercuryПростите, этот код весь ваш, я правильно понимаю ? Разумеется, весь код, который я здесь привел, написан мной. В противном случае я сослался бы на автора кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 17:16 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercury, про Гаусса? Или про прямоугольники? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2014, 17:16 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
По сути, и там и там, но я больше комментировал эту фразу ) mayton Для шахматных задач (комбинаторный класс задач) иногда и нет аналитического решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 02:00 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov , тогда почему вы мне про переполнение не объясните ?) Раскройте тайну для особо одарённых :D (nolocky, надеюсь вам понятно что это самоирония) Aleksandr SharahovCellCount1, CellCount2 в вычисляют количество клеток в полных обходах как разность площадей двух прямоугольников M*N и (M-2*LoopCount)*(N-2*LoopCount), а затем делают неполный проход по сторонам внутреннего прямоугольника. где эта формула в вашем коде ? Я вижу несколько другую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 02:05 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Выделил немного времени на изменение предложенного алгоритма. итак, ваш код. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. по строчке Result:=2*(M+N-2*LoopCount)*LoopCount пока не буду говорить. Дальше, мы имеем матрицу со столбцами Result x y LC M N a Если записать ваш switch одной формулой, мы получим следующее F(k) числа Фибоначчи 1 1 2 3 ...(нас только первые 4 числа интересуют на самом деле) [k=4] используется классическая нотация Айверсона (программисты Си знают, а другие могут встретить хорошие разъяснений у Кнута) В первую очередь мне не нравится тот факт что я использую эту нотацию, так сразу формулу не получил, и сейчас не смогу сидеть и рассуждать, если у вас есть идеи, то пишите. И конечно хочется уйти от F(k) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 07:02 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SSВ первую очередь мне не нравится тот факт что я использую эту нотацию Нотация то мне нравится, даже очень :) Мне не нравится, что по факту в программе это ещё один if ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 07:05 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Мне не нравится что ты синус используешь для углов кратных четверти. В этой задаче - он вырожденный и заменяется на более примитивную функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 09:46 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAleksandr Sharahov , тогда почему вы мне про переполнение не объясните ?) Боюсь, у меня получится хуже, чем пишут в книжках. Возьмите любую хорошую книжку (если не найдете, можно взять почти любую по ассемблеру) и прочитайте про представление чисел в памяти и операции с ними. Сразу все встанет на место. SashaMercuryAleksandr SharahovCellCount1, CellCount2 в вычисляют количество клеток в полных обходах как разность площадей двух прямоугольников M*N и (M-2*LoopCount)*(N-2*LoopCount), а затем делают неполный проход по сторонам внутреннего прямоугольника. где эта формула в вашем коде ? Я вижу несколько другую Попробуйте выполнить вычитание и разложить на множители. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 10:37 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovSashaMercuryAleksandr Sharahov , тогда почему вы мне про переполнение не объясните ?) Боюсь, у меня получится хуже, чем пишут в книжках. Возьмите любую хорошую книжку (если не найдете, можно взять почти любую по ассемблеру) и прочитайте про представление чисел в памяти и операции с ними. Сразу все встанет на место. SashaMercuryпропущено... где эта формула в вашем коде ? Я вижу несколько другую Попробуйте выполнить вычитание и разложить на множители. 1. Не морочьте голову. Ответ на вопрос вы мне так и не дали, на вполне конкретный и обоснованный вопрос. Если я не прав, то пусть меня поправит кто-нибудь другой. Вопрос по переполнению не был раскрыт. 2. Уже давно сделал, и прекрасно вижу различия, только вы говорите одно, в коде пишите совершенно другое. Я вам про это говорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 14:40 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
maytonМне не нравится что ты синус используешь для углов кратных четверти. В этой задаче - он вырожденный и заменяется на более примитивную функцию. крайне рад критике, может быть кто-нибудь ещё подскажет альтернативу лучше ?) А также подскажет как уйти от нотации Айверсона и чисел Фибоначчи ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 14:43 |
|
||
|
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
|
|||
|---|---|---|---|
|
#18+
SSУже давно сделал, и прекрасно вижу различия, только вы говорите одно, в коде пишите совершенно другое. Я вам про это говорю. Это к тому, что в коде не видно того что вы отнимаете, и потому не видно алгоритма. Если было бы чётко M*N-() , то ничего бы не спросил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 14:46 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38768582&tid=1341199]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 513ms |

| 0 / 0 |
