resueltos programas para matrices hechos graficar funciones euler español ejercicios comandos search sorting find octave cell-array

search - programas - matrices octave



¿Cómo clasifica y encuentra de manera eficiente los elementos en una matriz de celdas(de cadenas) en Octave? (3)

¿Hay funcionalidad incorporada para esto?


La solución de cellidx no cumple con el requisito de eficiencia del OP, y está en desuso (como lo señala la help cellidx ).

Håvard Geithus en un comentario sugirió usar la función lookup () en una matriz de cadenas ordenada de cadenas, que es significativamente más eficiente que cellidx. Sin embargo, sigue siendo una búsqueda binaria, mientras que la mayoría de los lenguajes modernos (e incluso muchos de 20 años) nos brindan un fácil acceso a matrices asociativas, lo que sería un enfoque mucho mejor.

Si bien Octave obviamente no tiene arrays asociados, eso es efectivamente lo que el intérprete está usando para las variables de ocatve, incluidas las estructuras, por lo que puede hacer eso, como se describe aquí: http://math-blog.com/2011/05/09/associative-arrays-and-cellular-automata-in-octave/

Built-in Function: struct ("field", value, "field", value,...) Built-in Function: isstruct (expr) Built-in Function: rmfield (s, f) Function File: [k1,..., v1] = setfield (s, k1, v1,...) Function File: [t, p] = orderfields (s1, s2) Built-in Function: fieldnames (struct) Built-in Function: isfield (expr, name) Function File: [v1,...] = getfield (s, key,...) Function File: substruct (type, subs,...)

¿Convertir Matlab a Octave hay contenedores? ¿Mapa equivalente? sugiere usar javaObject ("java.util.Hashtable"). Eso vendría con una sobrecarga de configuración, pero sería una ganancia de rendimiento si se usa mucho. Incluso puede ser viable vincular en alguna biblioteca escrita en C o C ++? Sin embargo, piense si esta es una opción mantenible.

Advertencia: soy relativamente nuevo en Octave, y escribo esto mientras lo investigo yo mismo (que es como terminé aquí). Todavía no he realizado pruebas sobre la eficiencia de estas técnicas, y aunque tengo un conocimiento justo de los algoritmos subyacentes, puedo estar haciendo suposiciones irrazonables sobre lo que es realmente eficiente en Octave.



Búsqueda de octavas en una matriz de celdas:

cellidx se deprecia por octava, aún se ejecuta pero dicen que usar ismember en su lugar, así:

octave:1> a = ["hello"; "world"; "moobar"]; octave:1> c = cellstr(a) c = { [1,1] = hello [2,1] = world [3,1] = moobar } octave:1>find(ismember(c, ''world'')) ans = 2

''world'' se encuentra en la ranura de índice 2. Esta es una operación costosa de tiempo O (n) lineal porque tiene que iterar a través de todos los elementos linealmente ya sea que se encuentre o no.

Debe tratar de modelar su problema de manera diferente para lograr una solución de tiempo O (1) o tiempo logaratmico (log n) constante .