Попробуйте скриптовую ссылку
.modal {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1050;
display: none;
overflow: hidden;
-webkit-overflow-scrolling: touch;
outline: 0;
}
.modal.fade .modal-dialog {
-webkit-transition: -webkit-transform .3s ease-out;
-o-transition: -o-transform .3s ease-out;
transition: transform .3s ease-out;
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
-o-transform: translate(0, -25%);
transform: translate(0, -25%)
}
.modal.in .modal-dialog {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
-o-transform: translate(0, 0);
transform: translate(0, 0)
}
.modal-open .modal {
overflow-x: hidden;
overflow-y: hidden;
}
.modal-dialog {
position: relative;
width: auto;
margin: 10px
}
.modal-content {
position: relative;
background-color: #fff;
-webkit-background-clip: padding-box;
background-clip: padding-box;
border: 1px solid #999;
border: 1px solid rgba(0, 0, 0, .2);
border-radius: 6px;
outline: 0;
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
}
.modal-header {
padding: 15px;
border-bottom: 1px solid #e5e5e5;
background-color: #F7F8FA;
}
.modal-header .close {
margin-top: 5px
}
.modal-header .back {
margin-top: 5px
}
.modal-title {
margin: 0;
line-height: 1.42857143
}
.modal-body {
position: relative;
padding: 15px;
height:350px!important;
overflow-y:auto;
overflow-x:hidden;
}
.modal-footer1 {
padding:15px;
border-top: 1px solid #e5e5e5;
background-color: #F7F8FA;
}
@media(max-width:767px){
#step-modal{
padding:0px !important;
}
.modal-dialog{
margin: 0px;
}
}
.
Проблемой является точно вычисление связанных компонентов гиперграфа: целые числа являются вершинами, и наборы являются гиперкраями. Обычный способ вычислить связанные компоненты путем лавинной рассылки их один за другим:
где flood_from (я, j) был бы определен как
Теги наборов затем дают Вам связанные компоненты, которые Вы ищете.
С точки зрения баз данных алгоритм может быть выражен следующим образом: Вы добавляете столбец TAG к своей базе данных, и Вы вычисляете связанный компонент набора i путем выполнения
Другой (теоретический) способ представить этот алгоритм состоял бы в том, чтобы сказать поиск фиксированных точек отображения:
Затем, если S является набором, связанный компонент S получен путем итерации (падения) o (объединение) на S, пока фиксированная точка не достигнута:
Вы могли думать о нем как о проблеме графика, где набор (1,2,3) подключен к набору (5,2,6) через 2. И затем используйте стандартный алгоритм для штрафа связанные подграфы.
Вот быстрая реализация Python:
nodes = [ [1,2,3], [2,4,5], [6,7,8], [10,11,12], [7,10,13], [12], [] ]
links = [ set() for x in nodes ]
#first find the links
for n in range(len(nodes)):
for item in nodes[n]:
for m in range(n+1, len(nodes)):
if (item in nodes[m]):
links[n].add(m)
links[m].add(n)
sets = []
nodes_not_in_a_set = range(len(nodes))
while len(nodes_not_in_a_set) > 0:
nodes_to_explore = [nodes_not_in_a_set.pop()]
current_set = set()
while len(nodes_to_explore) > 0:
current_node = nodes_to_explore.pop()
current_set.add(current_node)
if current_node in nodes_not_in_a_set:
nodes_not_in_a_set.remove(current_node)
for l in links[current_node]:
if l not in current_set and l not in nodes_to_explore:
nodes_to_explore.append(l)
if len(current_set) > 0:
sets.append(current_set)
for s in sets:
print [nodes[n] for n in s]
вывод:
[[]]
[[6, 7, 8], [10, 11, 12], [7, 10, 13], [12]]
[[1, 2, 3], [2, 4, 5]]
Это, вероятно, довольно неэффективно, но это должно работать, по крайней мере: Запустите с ключа, выберите все группы, содержащие тот ключ, выберите все ключи тех групп, выберите все группы, содержащие те ключи, и т.д., и как только шаг не добавляет новых ключей или групп, у Вас есть список всех групп одного подграфа. Исключите их и повторитесь с начала, пока Вы не будете иметь данных в запасе.
С точки зрения SQL этому была бы нужна хранимая процедура, я думаю. С РЕКУРСИВНЫМ мог бы помочь Вам так или иначе, но у меня еще нет опыта с ним, и я не уверен, что это доступно на Вашем бэкенде DB.
После размышления об этом еще немного я придумал это:
groups
со столбцами (group_id, set_id)
sets
таблица element
. Теперь должно быть легко найти дублирующиеся элементы.set_id
поля существуют в groups
таблица, добавляет другая с тем же group_id
.set_id
существует в groups
таблица, генерируйте новый идентификатор группы и добавьте обоих set_id
s к groups
таблица.В конце у меня должен быть a groups
таблица, содержащая все наборы.
Это не чистый SQL, но походит на O (nlogn), таким образом, я предполагаю, что могу жить с этим.
Ответ Matt кажется более корректным, но я не уверен, как реализовать его в моем случае.