|
Заблокирован
|
||||||
Функция циклического сдвига массива26.06.2013, 21:13. Показов 51630. Ответов 50
Метки нет (Все метки)
Доброго времени суток,
есть задача - нужно написать функцию, которая сдвигает массив array[] размером size на shift элементов. соответственно, чтобы двигать вправо shift больше нуля, а влево наоборот. под буфер в цикле нельзя выделять целый массив, можно только одну переменную, тоесть нужно максимально оптимизировать использование памяти. сложность алгоритма не должна превышать O(N). не пишите пожалуйста код, помогите с логикой задачи. Раньше я делал вот так -
ткните носом в ошибки меня говнокодера. спасибо (-:
0
|
||||||
| 26.06.2013, 21:13 | |
|
Ответы с готовыми решениями:
50
Функция Циклического сдвига Функция циклического сдвига строк и колонок в матрице Ошибка в коде сдвига элементов массива |
|
6 / 6 / 0
Регистрация: 28.06.2013
Сообщений: 15
|
|
| 28.06.2013, 12:56 | |
|
97 перестановок на 100 элементов при смещении 3. При условии
"под буфер в цикле нельзя выделять целый массив, можно только одну переменную, тоесть нужно максимально оптимизировать использование памяти. сложность алгоритма не должна превышать O(N)." И в чём проблема?
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||
| 28.06.2013, 13:10 | |||
|
а у меня количество перестановок равно размеру массива не зависимо на сколько сдвинуть нужно
0
|
|||
|
6 / 6 / 0
Регистрация: 28.06.2013
Сообщений: 15
|
||||||
| 28.06.2013, 13:26 | ||||||
|
Процитирую код ValeryS:
каждая функция Reverse производит количество перестановок равное параметру sz. В данном случае это ofset, sizeArray-ofset, sizeArray Добавлено через 6 минут на 100 элементов смещение 5 даст 95 перестановок это очевидно
2
|
||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
||||||||||||
| 28.06.2013, 13:50 | ||||||||||||
|
теперь по теме каждый реверс работает с половиной массива Не по теме:
не заметил, спасибо что обратил внимание("Спасибу" поставить пока не могу) здесь массив не развернется, точнее развернется два раза нужно читать так
ofset/2+(sizeArray-ofset)/2+sizeArray/2= (ofset+sizeArray-ofset+sizeArray)/2= 2*sizeArray/2=sizeArray;
0
|
||||||||||||
|
6 / 6 / 0
Регистрация: 28.06.2013
Сообщений: 15
|
|
| 28.06.2013, 14:13 | |
|
Тот алгоритм, что я приводил компактней и быстрей, так как:
1. количество перестановок всегда меньше чем количество в массиве и равно max(Count-Shift, Shift) 2. нет лишних дёрганий дополнительных функций (Reverse), так как всё в одном цикле Добавлено через 14 минут кстати что это за вызов Reverse c параметрами ofset/2, (sizeArray-ofset)/2, sizeArray/2 ? если принять, что ofset=1 то... не будет работать не так ли?
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
||
| 28.06.2013, 14:17 | ||
|
0)123456789 1)123456789 2)198765432 3)234567891 как видишь сработало за сим раскланиваюсь ![]() Работы много, на остальное отвечу позже
0
|
||
|
6 / 6 / 0
Регистрация: 28.06.2013
Сообщений: 15
|
|
| 28.06.2013, 14:20 | |
|
ФАНТАСТИКА!!!
int ofset=1; ofset/2==1 ?! короче параметры должны быть ofset, (sizeArray-ofset), sizeArray а это в сумме 2*sizeArray... Как то так
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
||||||||
| 28.06.2013, 14:28 | ||||||||
![]()
for(int i=0;i<1/2;i++) for(int i=0;i<0;i++) цикл не сработает перестановки не будет а цикл работает в два раза меньше перестановка подразумевает все таки 2 числа
0
|
||||||||
|
6 / 6 / 0
Регистрация: 28.06.2013
Сообщений: 15
|
|
| 28.06.2013, 14:58 | |
|
да точно ты же поменял в цикле sz на sz/2.
Но тем не менее я выше писал чем лучше мой алгоритм
0
|
|
|
95 / 95 / 58
Регистрация: 04.10.2012
Сообщений: 189
|
||||||
| 29.06.2013, 20:11 | ||||||
|
Раскопал ящик с исходниками за первый семестр, здесь активно используется теория чисел:
@_Faeton_, предявите рабочую программу для тестирования, тогда и проверим какой алгоритм быстрее.
1
|
||||||
|
3 / 3 / 0
Регистрация: 23.06.2013
Сообщений: 13
|
|
| 29.06.2013, 20:15 | |
|
Вот мне интересно как люди на этом сайте расставляют приоритеты?
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||||||
| 29.06.2013, 22:12 | |||||||
|
@_Faeton_,
пересмотри свой алгоритм не правильно работает когда объем не кратен сдвигу вот пример массив 12345 сдвиг на 2 должно получится 45123 0)12345 1)12543 2)14523 3)54123 !!!!!!! и когда сдвиг больше половины объема 123456 сдвиг на 5 должно быть 234561 0)123456 1)623451 !!!!!! 123456 сдвиг на 4 345612 0)123456 1)163452 2)563412 !!!! для общего случая "доработать напильником" Добавлено через 1 минуту да вот код на котором я проверял
0
|
|||||||
|
95 / 95 / 58
Регистрация: 04.10.2012
Сообщений: 189
|
||
| 29.06.2013, 22:15 | ||
|
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||
| 29.06.2013, 22:24 | |||
|
@uburuntu, а ты каким боком к этому алгоритму ?
но если сдвиг не кратен размеру то получаются артефакты Добавлено через 1 минуту
0
|
|||
|
|
|||||||
| 29.06.2013, 22:38 | |||||||
здесь каждый элемент обрабатывается ровно 2 раза. Вариант, когда каждый элемент обрабатывается ровно 1 раз:
1
|
|||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
||||
| 29.06.2013, 23:05 | ||||
|
и потом возьмем 3 и 2 вернется 3 a=1 b =2 a|b=3 Добавлено через 12 минут мы поменяли местами 3 и 5 за один проход(темповую переменную не берем в расчет) как сказать? мы обработали и 3 и 5, два элемента но проход то один ![]() Добавлено через 2 минуты Я бы так сказал количество перестановок равно количеству элементов массива
0
|
||||
|
6 / 6 / 0
Регистрация: 28.06.2013
Сообщений: 15
|
||||||
| 30.06.2013, 10:41 | ||||||
|
1. Я не писал, что это готовая программа. Я привёл ключевой алгоритм ядра задачи. Поэтому и писал , "полагаю что идея ясна" на примере сдвига вправо.
2. Пожалуйста не путайте цель задачи (алгоритм) с оптимизацией производительности кода. К тому же оптимизация кода у uburuntu просто отвратительная, так как направо и налево происходит умножение и деление в циклах (в трёх циклах). НО там заложена таже идея что и в моём алгоритме. Только выполнена коряво(со значительным ущербом для производительности). Код ValeryS как я писал всегда производит количество перестановок равное количеству элементов (так же в трёх циклах) 3. Кстати я писал, что количество перестановок равно max(Count-Shift, Shift)... неспроста наверно? Разумеется в полном коде это необходимо учесть.
3
|
||||||
|
|
|||||
| 30.06.2013, 11:21 | |||||
|
Добавлено через 3 минуты Самый быстрый алгоритм Евклида вычисления НОД Добавлено через 4 минуты
0
|
|||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
||||||
| 30.06.2013, 11:34 | ||||||
|
а про то что элементы обрабатываются парой и что получается ??? элемент обрабатывается 2 раза (*2) но парой (/2 ) вот как сказать опять же меняем местами 3 и 5 каждый элемент обрабатывается один раз да? Да но ведь за один проход Ну и слава богу я ведь в алгоритм не вникал так взгляд кинул извини времени нет совсем вникать, посему вопросы могут быть глупыми вечером, если время будет, посижу покумекаю но было бы лучше если прокомментируешь любишь ты шифроватся Добавлено через 1 минуту , когда отправил![]() у тебя while а я читал if ![]() тупой наверное Добавлено через 1 минуту но проход то в половину массива (ну из за того что пары чисел)
0
|
||||||
|
|
|||||||||
| 30.06.2013, 11:40 | |||||||||
![]()
0
|
|||||||||
| 30.06.2013, 11:40 | |
|
Помогаю со студенческими работами здесь
40
Функция циклического сдвига элементов массива на заданное количество позиций Функция циклического сдвига побитово вправо Программа циклического сдвига элементов массива Описать процедуру циклического сдвига массива Ошиба циклического сдвига Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации:
В классе Работник добавить:
накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни
коэффициентПрезентеизма — снижает продуктивность. . .
|
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день.
Для работы необходим браузер,. . .
|
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности
Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано.
. . .
|
|
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
|
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива
Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
|
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так?
Да, всё верно. Я — искусственный интеллект.
Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
|
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает.
В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше.
Перед запуском проверяем. . .
|