Ajuda no seguinte problema combinatório?


8

Eu tenho m vetores de bits, cada um dos quais é composto por m bits. Vamos denotar com vi[j] o j ésimo bit do i ésimo vetor, i,j[1,m] . Cada vetor de bit vi está sujeito às 2 restrições a seguir:

  1. vi[j]=0 ji .
  2. .vi[j]=1 j<imlog(m)
  3. Os bits que não se enquadram nas restrições acima podem ser ou 1 , mas, nesse caso, o número de 0010 pode ser no máximo . 12

Agora eu tenho outro vetor de bits , de m bits: inicialmente todos os m bits de s são definidos como 1 . Por "aplicação v i a s " Quero dizer executar uma operação AND entre s e v i , e, em seguida, armazenando o resultado em s . Estou interessado na evolução da s após aplicações repetidas dos vetores v 1 , . . . , v m dado na entrada. smms1vissvissv1,...,vm

Vamos chamar esses "pedidos repetidos" uma trajetória , e vamos definir tal trajetória mais formalmente. Uma trajectória é uma sequência composta por, no máximo, vectores (seleccionados de entre aqueles v 1 , . . . , V m dada na entrada) de tal modo que se v i está na sequência, então toda a v j depois de ele deve ter j < i . Então, por exemplo, < v 8 , v 3 > é uma trajetória, enquanto < 8 , v 7mv1,...,vmvivjj<i<v8,v3> não é (porque 8 3 ). <v3,v8,v7>83

Claramente, existem trajetórias diferentes. Seja S = . Suponha para levar s = 1 m e deixá-lo passar por uma trajectória T 1 : para cada passo da trajectória T 1 , colocar o novo valor tomado por s em S . Em seguida, repetir o mesmo processo para uma outra trajectória T 2 (sempre a partir de s = 1 m , e sempre colocando cada novo valor de s em S ). Então, novamente, até você tentar todo o possível 22mS=s=1mT1T1sST2s=1msS trajectórias. No final, o conjunto S2mS conterá todos os valores possíveis que podem assumir, considerando os vetores na entrada. s

Questões

  1. Eu tenho na entrada. Eu quero saber | S | , Ou seja, quantos valores distintos podem s nunca assumir. Claro, eu quero calcular | S | eficientemente, ou seja, sem tentar todas as trajetórias possíveis, uma a uma.vi,...,vm|S|s|S|
  2. Suponha que você remova a restrição dos vetores na entrada. Como isso afeta ? |S|
  3. Mais importante, o que mais me importa é como cresce com m . É | S | no máximo polinômio em m ? É | S | no máximo subexponencial em m ? Ou existem instâncias ruins nas quais | S | é necessariamente exponencial em m ?|S|m|S|m|S|m|S|m

A figura a seguir é um exemplo com : m=17Exemplo

Eu estou recolha de dados experimentais, de modo a tentar descobrir que é a relação entre a e | S | . Até agora, os experimentos parecem sugerir que | S | cresce mais rápido que m 3 e mais lento que m 4 . No entanto, no momento esses dados não têm muito significado: eu só consegui fazer testes de até m = 90 ; portanto, pode haver uma grande constante oculta ou algum outro fator que permita que uma lei exponencial pareça uma lei polinomial para pequenos m . Preciso de ajuda para descobrir o comportamento assintótico de | S | em relação am|S||S|m3m4m=90m|S| . m


4
@ Downowner: Por que fazer voto negativo? Por favor, motive.
Giorgio Camerani

As trajetórias não estão complicando demais? Você poderia apenas falar sobre subconjuntos de {1m}
Peter Taylor

@ Peter: Sim, uma trajetória nada mais é que um subconjunto de . Acabei de pensar que falar sobre trajetórias daria uma imagem mais intuitiva e"visual"do problema. Eu queria colocar o acento sobre a evolução do vector s , para ressaltar o fato de que eu estou interessado em quantos valores diferentes podem s assumir durante todas as suas possíveis evoluções. {1,...,m}ss
Giorgio Camerani

3
@ Walter: Uma razão possível para os votos negativos é o título da pergunta, que não ajuda em nada. Você pode reformulá-lo para que ele não contenha "ajuda" e talvez sugerir os objetos que você deseja contar. Felicidades!
Michaël Cadilhac

@ MichaëlCadilhac: Sim, é verdade que o título é muito genérico. Provavelmente vou mudar para algo mais "atraente" . Obrigado pela sua dica, felicidades!
Giorgio Camerani

Respostas:


8

Repensei isso e meu limite inicial estava correto. Na pior das hipóteses, |S|=Θ(m2mlgm)

A prova está dividida em duas partes. Em primeiro lugar . Considere os possíveis valores desde uma trajetória que termina emvx. Todo bits[j]parajxé 0 e todo bits[j]paraj<x-m|S|=O(m2mlgm)svxs[j]jxs[j] é 1. Portanto, existem apenas2mj<xmlgm valores quespodem tomar. Multiplique pelo número devx2mlgmsvx e temos o limite superior.

Em segundo lugar, considere

    0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 
    0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 
    0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 
    0 0 0 0 0  1 1 1 0 1 1 1 1 1 1 1 1 
    0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1
    ...
    0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 
    0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
     0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

Eu afirmo que esse esquema fornece a você . Para cada colunavxconsidere também o(m|S|=Ω(m2mlgm)vxcolunas à sua direita. Cada um dos2 m(mlgm2)combinações deles dão umsdiferente, e em cada um dessesso bit de ajuste superior é o bit de ajuste superior devx, portanto, não há contagem dupla entre diferentesvx.2mlgm2ssvxvx


Obrigado pela sua resposta. Você tem alguma idéia de se a terceira restrição (ou seja, não mais que zeros) faz alguma diferença? Em outras palavras, você acredita que restringir os zeros a no máximo 12 implica que o número de valores diferentes introduzidos por trajetórias que terminam em v x é muito menor que 2 m / l o g m (por "muito menos" não quero dizer exponencial em m / l o g m )? Minha sensação é que não faz diferença: mesmo que permitamos no máximo 1 zero, parece que podemos gerar 2 /1212vx2m/logmm/logm1 valores diferentes para pelo menos um de v x .2m/logmvx
Giorgio camerani

@ WalterBishop, meu exemplo usa não mais que 1 zero.
Peter Taylor

Desculpe, eu analisei a resposta e o exemplo muito rápido.
Giorgio Camerani

@WalterBishop, embora, se você restringir o número de 1s (no máximo, dos valores livres em um vetor possa ser 1), você obtém | S | = O ( m k + 1 )k|S|=O(mk+1)
Peter Taylor

Como você obtém nesse caso? Para mim, parece que nesse caso teríamos | S | = O ( m 2 k ) = O ( m ) (desde que k é constante). Como AND-2 vetores, um 1 pode se tornar um 0, mas um 0 não pode se tornar um 1 : assim, independentemente do fato de nossa "janela deslizante" ter m / l|S|=O(mk+1)|S|=O(m2k)=O(m)k1001vetor de g m , podemos gerar no máximo 2 k vetores diferentes para cada um dosm/logm2km
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.