Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Метод полного перебора элементов массива / 22 сообщений из 22, страница 1 из 1
23.11.2009, 14:01
    #36325835
sheeona
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Здравствуйте. Подскажите, плиз, алгоритм или метод полного перебора элементов массива int.
Нужно для задачи. Подробнее: массив "0,1,2,3,4,5,6,7,8,9". Задача, конечно, решается более эффективным способом, но нужен именно этот. Заранее спасибо.
...
Рейтинг: 0 / 0
23.11.2009, 14:09
    #36325869
Lion HC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Код: plaintext
for_each(first,last,function)
...
Рейтинг: 0 / 0
23.11.2009, 14:52
    #36325998
sheeona
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Lion HC,
не так понял вопрос. Надо не ходить по массиву от первого до последнего элемента, а менять элементы в массиве. Например: 0123456789, 0123456798, 0123456879, .... , 9876543210. Как можно это реализовать?
...
Рейтинг: 0 / 0
23.11.2009, 14:53
    #36326003
Микросекунда
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
здесь

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.11.2009, 15:22
    #36326094
Гусар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
половина тем от студентов троишников (двоишники просто тупо все покупают)
...
Рейтинг: 0 / 0
23.11.2009, 16:32
    #36326386
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Куда мир катится?
...
Рейтинг: 0 / 0
15.12.2009, 02:14
    #36366150
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
2 sheeona:
Хотите перебрать все перестановки (permutations) массива?
std::prev_permutation
std::next_permutation
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.10.2015, 02:37
    #39087501
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
next_permutation и prev_permutation удобны, и хорошо что они есть(сам их использовал не так давно). Но опять возникает такой вопрос: как много времени могут выполняться данные функции ? Стандарт ничего не говорит (и судя по всему не должен), это не очень хорошо
...
Рейтинг: 0 / 0
27.10.2015, 02:42
    #39087502
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
SSудобны
Когда число элементов не более 12 (Кнут в первом издании говорит о 10, но это было больше 30 лет назад)
...
Рейтинг: 0 / 0
27.10.2015, 08:46
    #39087555
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
SashaMercurynext_permutation и prev_permutation удобны, и хорошо что они есть(сам их использовал не так давно). Но опять возникает такой вопрос: как много времени могут выполняться данные функции ? Стандарт ничего не говорит (и судя по всему не должен), это не очень хорошо

авторComplexity
Up to linear in half the distance between first and last (in terms of actual swaps).

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

подумал вы это из стандарта взяли, ещё раз посмотрел, и оказывается я вас обманул. В стандарте указано следующее:
ISO/IEC N3242=11-0012Complexity: At most (last-most)/2 swaps.
Хотя бы что-то есть.
...
Рейтинг: 0 / 0
27.10.2015, 09:17
    #39087590
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
mcureenab Я смотрю, в примере несколько циклических сдвигов произошло. Вероятно, алгоритм на циклических сдвигах построен. Поэтому в каждой итерации перестановок может быть столько, сколько элементов в массиве или меньше.

Видные информатики, Кнут, Скиена говорят о том, что достаточно часто программисты неверно понимают и, самое главное, используют, асимптотические обозначения, и . В стандарте написано "at most". Что это значит ? Не больше ? То есть это оценка сверху ? Либо это значит в большинстве случаев ? Мне кажется что понимать следует так. Хочется чтобы стандарт был более строг в этом отношении.

Думаю что скорее всего использовали перебор с возвратом
...
Рейтинг: 0 / 0
27.10.2015, 09:40
    #39087624
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Думаю там алгоритм перестановки такой: берем последний элемент, последовательно сравниваем с предыдущими пока не найдем меньший. Нашли - меняем их местами, сортируем по возрастанию все что после места замены. Не нашли - берем предпоследний и т.д.
...
Рейтинг: 0 / 0
27.10.2015, 09:45
    #39087634
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
SashaMercuryв большинстве случаев чьих случаев? моих или твоих или автора? тут распределение не задано, поэтому о статистике случаев нет смысла говорить. если иное не указано, нужно понимать "худший" случай.

для перебора с возвратом наверное стек нужен, а тут стека вроде как нет.
...
Рейтинг: 0 / 0
27.10.2015, 10:24
    #39087683
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
mcureenabSashaMercuryв большинстве случаев чьих случаев? моих или твоих или автора? тут распределение не задано, поэтому о статистике случаев нет смысла говорить. если иное не указано, нужно понимать "худший" случай.

для перебора с возвратом наверное стек нужен, а тут стека вроде как нет.

есть тут стек или нет вы не знаете, как и я. На то она и инкапсуляция. Но я уверен что циклический сдвиг в данном алгоритме совершенно ни причём :)

А под 'случаем' тут понимается исходная перестановка. Если вы не согласны с моей трактовкой того что написано в стандарте, предложите свою версию ;)
...
Рейтинг: 0 / 0
27.10.2015, 10:41
    #39087715
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Можно просто взять и померить время на массивах разного размера. Посчитать в теле цикла кол-во итераций и вывести время одного вызова. Затем сложность оценить.
...
Рейтинг: 0 / 0
27.10.2015, 13:46
    #39087984
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Dima TМожно просто взять и померить время на массивах разного размера. Посчитать в теле цикла кол-во итераций и вывести время одного вызова. Затем сложность оценить. Это совсем не просто. Время зависит от порядка.
...
Рейтинг: 0 / 0
27.10.2015, 13:53
    #39087993
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
SashaMercuryА под 'случаем' тут понимается исходная перестановка. Если вы не согласны с моей трактовкой того что написано в стандарте, предложите свою версию ;) "At most bla-bla-bla", означает не хуже чем bla-bla-bla для всякого исходного порядка, а не для какого то усредненного. Оно и понятно, в одних задачах могут встречаться только "хорошие" порядки для которых и делать ничего не надо, один swap и готово, в других только "плохие" порядки, где надо двигать весь массив.
...
Рейтинг: 0 / 0
27.10.2015, 20:05
    #39088415
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Саш, просвяти зачем тебе сложность данного алгоритма? массив из N элементов может быть переставлен N! раз. Т.е. больше 12-13 элементов это много комбинаций, но при этом сама перестановка будет быстра. Какая может быть задача чтобы потребовалось частично переставлять элементы в массиве например из 100-1000 элементов? Все 1000! вариантов точно не перебрать за разумное время.
...
Рейтинг: 0 / 0
27.10.2015, 20:43
    #39088429
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Мне кажется что ее (std::next_permutation) можно как-то улучшить введя состояние.
...
Рейтинг: 0 / 0
28.10.2015, 01:29
    #39088543
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
mcureenabSashaMercuryА под 'случаем' тут понимается исходная перестановка. Если вы не согласны с моей трактовкой того что написано в стандарте, предложите свою версию ;) "At most bla-bla-bla", означает не хуже чем bla-bla-bla для всякого исходного порядка, а не для какого то усредненного.

Тут вы сами себе противоречите

mcureenab Оно и понятно, в одних задачах могут встречаться только "хорошие" порядки для которых и делать ничего не надо, один swap и готово, в других только "плохие" порядки, где надо двигать весь массив.
...
Рейтинг: 0 / 0
28.10.2015, 01:31
    #39088544
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод полного перебора элементов массива
Dima TСаш, просвяти зачем тебе сложность данного алгоритма? массив из N элементов может быть переставлен N! раз. Т.е. больше 12-13 элементов это много комбинаций, но при этом сама перестановка будет быстра. Какая может быть задача чтобы потребовалось частично переставлять элементы в массиве например из 100-1000 элементов? Все 1000! вариантов точно не перебрать за разумное время.

Было интересно, потому спросил
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Метод полного перебора элементов массива / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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