suzy Posted May 9, 2008 at 11:08 AM Report Share #184135 Posted May 9, 2008 at 11:08 AM malta é o seguinte, tenho uam lista ligada simples, e quero eliminar os nomes que se repetem. ora bem, á medida que vou percorrendo a lista ligada, tenho de comparar de o nome do no inicial com os nomes dos outros nós se for igual elimina, sendo assim em cada iteracção. é assim o raciocionio?? obrigada Link to comment Share on other sites More sharing options...
falk0n Posted May 9, 2008 at 01:18 PM Report Share #184156 Posted May 9, 2008 at 01:18 PM penso que o que estas a dizer irá ter uma complexidade de O(n^2). se tiveres hipotese de teres feito uma hashtable, iria iterando a lista e inserindo na hashtable qdo existisse uma colisão e em que o valor fosse igual ao valor da lista retiraria esse valor da lista, depois de iterar toda a lista apagaria a hashtable da memoria e assim com uma complexidade O(n) conseguiria fazer esse processo, ter uma lista sem repeticoes. se não interessa a complexidade do algoritmo, penso que sim possas fazer dessa maneira. boas programacoes Link to comment Share on other sites More sharing options...
QuickFire Posted May 9, 2008 at 01:43 PM Report Share #184162 Posted May 9, 2008 at 01:43 PM Outra solução simples seria manipular a forma como inseres na lista, podes inserir já de acordo com o teu problema. Claro que ias ficar com uma inserção mais cara, mas poupas no resto. Mas pessoalmente penso que ia para uma hashtable também... Link to comment Share on other sites More sharing options...
TheDark Posted May 9, 2008 at 04:30 PM Report Share #184184 Posted May 9, 2008 at 04:30 PM malta é o seguinte, tenho uam lista ligada simples, e quero eliminar os nomes que se repetem. ora bem, á medida que vou percorrendo a lista ligada, tenho de comparar de o nome do no inicial com os nomes dos outros nós se for igual elimina, sendo assim em cada iteracção. é assim o raciocionio?? obrigada Acho que estás correcta. Em cada iteração tens 2 apontadores: o primeiro percorre os nós da lista um a um, a partir do 1º nó, e o segundo percorre-os também um a um, mas a partir do nó seguinte ao apontado pelo primeiro apontador. Depois é só compará-los, como disseste. falk0n e QuickFire: tenho quase a certeza que a ajuda que ela está a pedir é para um trabalho escolar, e que tem que usar unicamente a estrutura indicada 😄 Desaparecido. Link to comment Share on other sites More sharing options...
Triton Posted May 9, 2008 at 04:35 PM Report Share #184186 Posted May 9, 2008 at 04:35 PM Bem, há 3 dias tinha um projecto para entregar que percorria uma lista toda à procura de duplicados no momento da inserção, e demorava 2 minutos num caso teste que tinha de passar em menos de 10 segundos. No meu caso estava a fazer sort da lista antes de fazer output, e o que fiz foi no momento do output, testar se o valor do elemento da lista actual era igual ao seguinte. Só com esta optimização o código passou a resolver o caso mais lento em 2 segundos. 😄 <3 life Link to comment Share on other sites More sharing options...
nata79 Posted May 15, 2008 at 06:20 PM Report Share #185334 Posted May 15, 2008 at 06:20 PM o raciocinio da suzy penso k tá correcto mas tb é sempre bom ler outras soluções... eu nesse caso o k faria era, partindo do principio que a inserção é feita por ti, manipula-la de forma a nao inserir conteudos repetidos. se a lista tiver ordenada axo k até é relativamente eficiente e facil de implementar... arithmeticoverflow.wordpress.com Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now