реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> Битовая маска сочетания, Требуется алгоритм вычисления битовой маски сочетания
Corner
сообщение Aug 24 2016, 08:16
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Задача из комбинаторики.
Есть сочетание из N по M. Число возможных состояний считается по известной всем формуле с факториалами. Как компактно и быстро решить обратную задачу: зная номер сочетания, получить битовую маску размером M с N битами равными лог. 1. Номер сочетания, естественно, внутри множества сочетаний.
Итерационные алгоритмы очень медленные. Табличные требуют нехилых таблиц. А хочется уложить в 1 к плиток или меньше.

Сообщение отредактировал Corner - Aug 24 2016, 08:21
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 24 2016, 11:55
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Небольшое уточнение. Принцип нумерации масок сочетаний - любой. Главное, чтобы разные номера гарантированно давали разные маски.
ПС: прямая задача 63 из 1024 с требуемой скоростью влезает в самую толстую ПЛИС, что есть под рукой. Задача решена "в лоб".

Сообщение отредактировал Corner - Aug 24 2016, 12:01
Go to the top of the page
 
+Quote Post
andyp
сообщение Aug 25 2016, 06:21
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Можно у гугла спросить про

unrank permutation

Сам пользовался только последовательным лексикографическим перечислением перестановок. На эту тему можно посмотреть std::next_permutation из стандаратной библиотеки с++

Ну и еще поискать на тему Gosper's hack - это быстрый способ получения следующей в лексикографическом смысле перестановки.
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 25 2016, 10:43
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(andyp @ Aug 25 2016, 10:21) *
Можно у гугла спросить про
unrank permutation

Гугл знает только rank permutation.
Цитата
Сам пользовался только последовательным лексикографическим перечислением перестановок. На эту тему можно посмотреть std::next_permutation из стандаратной библиотеки с++
Ну и еще поискать на тему Gosper's hack - это быстрый способ получения следующей в лексикографическом смысле перестановки.

Это итерационные методы. Уже все попробовал. На Сях замечательно выходит. А в ПЛИС места мало для такого подхода. И, еще хочется, пока используется предыдущая маска, уже посчитать следующую. Вернее, не следующую, а новую с любым положением. И на это всего несколько мс есть.
ПС: сейчас пробую скрестить итерации, конвейер и таблицу. Метод нашел, но мозги в пятой позиции от попыток написать на Сях алгоритм генерации сценария.

Сообщение отредактировал Corner - Aug 25 2016, 10:56
Go to the top of the page
 
+Quote Post
andyp
сообщение Aug 25 2016, 15:53
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(Corner @ Aug 25 2016, 13:43) *
Гугл знает только rank permutation.


Unrank тоже знает. Это как раз то, что требуется - по номеру получить собственно k-перестановку.

Вот например, ссылка на с код для k-перестановок с первой страницы поискового запроса "unrank k-permutation"
https://github.com/samwgoldman/rank_permutations
Там же еще ссылки на алгоритмы вылетают. Практическую ценность оценить не могу - только бегло посмотрел.


Цитата
Это итерационные методы. Уже все попробовал. На Сях замечательно выходит. А в ПЛИС места мало для такого подхода. И, еще хочется, пока используется предыдущая маска, уже посчитать следующую. Вернее, не следующую, а новую с любым положением. И на это всего несколько мс есть.
ПС: сейчас пробую скрестить итерации, конвейер и таблицу. Метод нашел, но мозги в пятой позиции от попыток написать на Сях алгоритм генерации сценария.


Извините, тут уж ничем особо помочь не могу - как и говорил, сам только последовательный перебор перестановок делал.
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 25 2016, 18:34
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



На той же странице автор сознается, что его к - перестановка работает некорректно))) сам алгоритм "обратный в лоб", но с ошибками.
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 30 2016, 18:51
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Как обычно, сам все решил... мда...
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd April 2024 - 21:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016