Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Было бы интересно получить справочник по комбинаторным алгоритмам для всех комбинаторных объектов, включая, перестановки, сочетания, размещения, разбиения на подмножества, сочетания с повторениями, размещения с повторениями.Для различных комбинаторных объектов немножко отличается только первая задача (сгенерировать все объекты по порядку), вторая задача сводится к комбинации третьей и четвертой, а они в свою очередь абсолютно идентично делаются для всех типов комбинаторных объектов, изменяется только формулы количества объектов с заданным префиксом.
Также должен обратить внимание на временнУю сложность наших алгоритмов: они имеют линейную сложность при условии, что C вы считаете за константное время.
Но на самом деле для фиксированной размерности базового множества (в нашем случае 52) ничего не мешает свести алгоритм к константной сложности.Факт в том, что если алгоритм работает за O(n), а n равно константе, то этот алгоритм будет работать за константное время (очевидным образом, это верно для любой сложности, зависящей только от n, хоть O(nn)).
function getIndex(arr, subarr){
arr.sort()
index = 0
for(i=0,p=1;i<arr.length;i++,p*=2){
isElemInSubarr = subarr.indexOf(arr[i])>=0
if(isElemInSubarr) index += p
}
return index
}
//must: index<2^arr.length
function selectByIndex(arr, index){
arr.sort()
subarr = []
for(i=0;i<arr.length;i++){
isSelected = (index>>i)%2 == 1
if(isSelected) subarr.push(arr[i])
}
return subarr
}
selectByIndex([1,2,3],6).toString() == [2,3].toString()
getIndex([1,2,3], [2,3]) == 6
isElemInSubarr = subarr.indexOf(arr[i])>=0 можно использовать, например, сравнение:isElemInSubarr = arr[i] == subarr[i]Лучше перейти на 3-х дневку. Или 2.5 дневку. Можно трудоустроить 2 людей на одно место. Смена. То есть трудоустроить больше людей. Сократить ЗП. Но и сократить плату за ЖКУ и налоги. Вырастет спрос. У людей будет больше времени, они будут ходить в театры, кино, музеи, библиотеки, курсы и тратить там деньги.
Комбинаторные алгоритмы: индекс сочетания, индекс разбиения на подмножества