powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обход прямоугольника по спирали. Поиск более подходящего алгоритма
25 сообщений из 88, страница 2 из 4
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767080
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без этой хрени получаются хреновые алгоритмы)
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767120
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такой вопрос. Я дал вам площадку 10^6 на 10^6.
Общая площадь 10^12, это примерно 3.2*12 бит > 4 Байт. Как в паскале в тип Integer влезло такое число бит, или же происходит что-то аналогичное Integer Promotion в Си ? Или тип для Integer выделяется больше 4 Байт ?
Первые алгоритмы в целом понятны, вы модифицировали предложенною мной сумму как разность площадей, так действительно лучше.

Сегодня вновь ничего не смогу проверить. Только завтра
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767131
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера решил попробовать решить этого "Вини-пуха" и сделать это наиболее эффективно, и начал с того что самой лучшей попыткой решения является реализация на BASIC (VB6)

IDДатаАвторЯзыкВремяПамятьРазмер104.07.2009 19:35:38Антон ЛунёвBasic0.207218 Кб123
Во-первых, код который просто читает в переменные из файла и записывает решение заняло у меня около ~101 байт (без учетов пробелов, переносов)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Sub Main()
    Open "INPUT.TXT" For Input As #1
    Open "OUTPUT.TXT" For Output As #2
        Input #1, m, n, x, y
        Print #2, A;
    Close
End Sub


Остаётся 123 - 101 = 22 байта на формулу (тут циклом боюсь не запишешь) которая даст решение.

Но во-вторых, самое странное, что даже программа которая ничего не делает и не считывает требует около 1,5 Мб памяти, но у решившего получается всего использовано 218 Кб. Я так чую или подвох какой-то (возможно раньше был компилятор у системы), либо фейковый результат...

Может есть какое-то объяснение этому?
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767136
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryУ меня такой вопрос. Я дал вам площадку 10^6 на 10^6.
Общая площадь 10^12, это примерно 3.2*12 бит > 4 Байт. Как в паскале в тип Integer влезло такое число бит, или же происходит что-то аналогичное Integer Promotion в Си ? Или тип для Integer выделяется больше 4 Байт ?


Оно и не влезло. Все вычисления выполнены по модулю 2^32. Можно вообще получить отрицательный результат, т.к. старший бит - знаковый. Есть int64, если надо больше бит.

SashaMercuryПервые алгоритмы в целом понятны, вы модифицировали предложенною мной сумму как разность площадей, так действительно лучше.


Последний самый интересный.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767447
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно подробнее про операцию "произведения по модулю". Я не понял как вы перемножили большие числа без длинной арифметики и Integer Promotion, в вашем коде я также не заметил специфических операций.

Может быть вы предложите одну формулу для получения нужного результата ?)
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767448
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD , скорее всего товарищ использовал препроцессорную обработку для сокращения объёма кода
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767483
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryА можно подробнее про операцию "произведения по модулю". Я не понял как вы перемножили большие числа без длинной арифметики и Integer Promotion, в вашем коде я также не заметил специфических операций.


Вот такие объявления
Код: pascal
1.
  тра-та-та: integer;


как раз и являются специфическими операторами. Они определяют сколько бит будет выделено для хранения и работы с переменной, т.е. количество ее возможных значений. Процессору ничего другого не остается, кроме как "крутиться" (здесь это очень точное слово) внутри этого множества значений. Это довольно большая тема, читайте книги или заводите отдельную ветку - поговорим.


SashaMercuryМожет быть вы предложите одну формулу для получения нужного результата ?)


Запросто )
Однако думаю вам это гораздо интереснее будет сделать самостоятельно. В данной задаче это не особенно актуально, но иногда бывает нужно.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767488
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 - , потому вполне возможно что переполнения не будет, но тогда почему вы стали говорить про выполнение операций по модулю ?
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767489
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если можно получить результат прямой формулой, то это всегда актуально )
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767507
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЕсли можно получить результат прямой формулой, то это всегда актуально )
Гаусс решал задачу о восьми ферзях. Он искал аналитическое решение вида формулы.
И не нашёл. Для шахматных задач (комбинаторный класс задач) иногда и нет
аналитического решения.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38767573
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа в тра-та-та: ничего специфического я не вижу ;)

А суслик есть, и от него зависит сгенерированный компилятором код.



SashaMercuryХотя в коде я не встретил у вас m*n - , потому вполне возможно что переполнения не будет, но тогда почему вы стали говорить про выполнение операций по модулю ?

Совершенно неважно есть там это умножение или нет. Код, используя целочисленную 32-битную арифметику, каким-то образом считает площадь, превышающую 2^31. Переполнения обязаны быть.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768017
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD, а откуда взялась цифра 218 кб? Это что размер исходника? Бинарника? Или выделяемая
память при работе приложения?
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768036
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это затрачиваемая программой память, размер кода 123 )

Объясните мне кто-нибудь пожалуйста, каким образом его программа работает с длинной арифметикой, и будет ли она у него на моих примерах ?)

Кстати, Aleksandr Sharahov , зачем вы так усложнили поиск минимального отступа ? Простите, этот код весь ваш, я правильно понимаю ?
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768039
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, вы полностью правы в вашем предыдущем рассуждении
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768233
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAleksandr Sharahov, зачем вы так усложнили поиск минимального отступа?
Специально ничего не усложнял, а проще не сумел )


SashaMercuryПростите, этот код весь ваш, я правильно понимаю ?
Разумеется, весь код, который я здесь привел, написан мной.
В противном случае я сослался бы на автора кода.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768236
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, про Гаусса? Или про прямоугольники?
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768582
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути, и там и там, но я больше комментировал эту фразу )

mayton Для шахматных задач (комбинаторный класс задач) иногда и нет
аналитического решения.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768583
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov , тогда почему вы мне про переполнение не объясните ?) Раскройте тайну для особо одарённых :D (nolocky, надеюсь вам понятно что это самоирония)

Aleksandr SharahovCellCount1, CellCount2 в вычисляют количество клеток в полных обходах как разность площадей двух прямоугольников M*N и (M-2*LoopCount)*(N-2*LoopCount), а затем делают неполный проход по сторонам внутреннего прямоугольника.

где эта формула в вашем коде ? Я вижу несколько другую
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768618
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выделил немного времени на изменение предложенного алгоритма.

итак, ваш код.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  if LoopCount>0 then Result:=2*(M+N-2*LoopCount)*LoopCount;
  case Direction of
    0: Result:=Result+X-LoopCount;
    1: Result:=Result+Y-3*LoopCount+M-1;
    2: Result:=Result-X-5*LoopCount+2*M+N-1;
    3: Result:=Result-Y-7*LoopCount+2*M+2*N-2;
    end;
  end;



по строчке 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)
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768620
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSВ первую очередь мне не нравится тот факт что я использую эту нотацию

Нотация то мне нравится, даже очень :) Мне не нравится, что по факту в программе это ещё один if
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не нравится что ты синус используешь для углов кратных четверти.
В этой задаче - он вырожденный и заменяется на более примитивную функцию.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38768756
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAleksandr Sharahov , тогда почему вы мне про переполнение не объясните ?)
Боюсь, у меня получится хуже, чем пишут в книжках. Возьмите любую хорошую книжку (если не найдете, можно взять почти любую по ассемблеру) и прочитайте про представление чисел в памяти и операции с ними. Сразу все встанет на место.

SashaMercuryAleksandr SharahovCellCount1, CellCount2 в вычисляют количество клеток в полных обходах как разность площадей двух прямоугольников M*N и (M-2*LoopCount)*(N-2*LoopCount), а затем делают неполный проход по сторонам внутреннего прямоугольника.
где эта формула в вашем коде ? Я вижу несколько другую

Попробуйте выполнить вычитание и разложить на множители.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38769142
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovSashaMercuryAleksandr Sharahov , тогда почему вы мне про переполнение не объясните ?)
Боюсь, у меня получится хуже, чем пишут в книжках. Возьмите любую хорошую книжку (если не найдете, можно взять почти любую по ассемблеру) и прочитайте про представление чисел в памяти и операции с ними. Сразу все встанет на место.

SashaMercuryпропущено...

где эта формула в вашем коде ? Я вижу несколько другую

Попробуйте выполнить вычитание и разложить на множители.

1. Не морочьте голову. Ответ на вопрос вы мне так и не дали, на вполне конкретный и обоснованный вопрос. Если я не прав, то пусть меня поправит кто-нибудь другой. Вопрос по переполнению не был раскрыт.

2. Уже давно сделал, и прекрасно вижу различия, только вы говорите одно, в коде пишите совершенно другое. Я вам про это говорю.
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38769145
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМне не нравится что ты синус используешь для углов кратных четверти.
В этой задаче - он вырожденный и заменяется на более примитивную функцию.

крайне рад критике, может быть кто-нибудь ещё подскажет альтернативу лучше ?) А также подскажет как уйти от нотации Айверсона и чисел Фибоначчи ?
...
Рейтинг: 0 / 0
Обход прямоугольника по спирали. Поиск более подходящего алгоритма
    #38769152
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSУже давно сделал, и прекрасно вижу различия, только вы говорите одно, в коде пишите совершенно другое. Я вам про это говорю.

Это к тому, что в коде не видно того что вы отнимаете, и потому не видно алгоритма. Если было бы чётко M*N-() , то ничего бы не спросил
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 2 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обход прямоугольника по спирали. Поиск более подходящего алгоритма
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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