8 votos

Menor cantidad de pasos para llegar a más de 1000

Estoy deseando escribir 1000 caracteres en un mensaje, puedo empezar con un personaje y me han dicho carácter en mi portapapeles. Me pegue a obtener dos personajes.

A partir de aquí me puede seleccionar todo, copiar, desplácese hasta el final de mensaje y pegarlo, o puedo pegar el único que tengo. la primera opción requiere de 4 pasos para aumentar a 4 con 2 personajes en mi portapapeles, pero esto último se requiere de 1 paso para aumentar a 3 con 1 personaje en mi portapapeles. Entonces yo podría hacer esta elección en cada iteración. Ya sea el doble de la cantidad de caracteres en el portapapeles y agregar a la final en 4 pasos o mantener la cantidad de la misma y añadir al final.

¿Cuál es la menor cantidad de tiempo que pueda tomar para obtener $1000$ o más caracteres suponiendo que cada paso toma 1 segundo. es decir, duplicando el aumento y pegar tarda 4 segundos o simplemente pegar la existente aumentar la demora de 1 segundo.

mi segunda pregunta se expande fuera de esto, ¿cómo puedo averiguar a cuántos pasos que toma para conseguir a más de $n$ personajes asumiendo $n$ es real entero.

¿estaría en lo cierto al suponer que sería conveniente duplicar el aumento en cada oportunidad, excepto en la última iteración que sería de 2 única pega sin doblar?

4voto

Shabaz Puntos 403

Dos más pega llegar a $4$ caracteres, que es dos pasos más rápido que copiar. Ahora para obtener 8 es un cara o cruz, a cuatro pasos de cualquier manera. Si haces la copia, entonces usted tiene cuatro en el portapapeles, por lo que dos más pega llegará a $16$. Creo que a la larga más eficaz es la copia, a continuación, dos pastas, lo que se obtiene un factor de $4$ con seis pasos en lugar de $8$. Mi mejor es entonces $$\begin {array} {l r r} \text{Action} & \text{message} & \text {clipboard}\\3 \text{ pastes} & 4&1\\\text{copy}&8&4\\2\text{ pastes} &16&8\\\text{copy}&32&16\\2\text{ pastes}&64&16\\\text{copy}&128&64\\2\text{ pastes}&256&64\\\text{copy}&512&256\\2\text{ pastes}&1024&256\end{array}$$ for a total of $27$ actions, meaning $27$ segundos

Agregado: para operaciones a largo plazo, podemos pensar en tres opciones, una pasta, a continuación, copiar, dos pastas, a continuación, copiar, o tres pastas, a continuación, copie. Como una figura de mérito, sugiero el registro del factor de expansión dividido por el número de acciones. Llegamos $$\begin {array} \\ \text{pattern}&\text{expansion}&\text{actions}&\text{log(expansion)/actions}\\\text{paste+copy}&3&5&.2197\\ \text{2 paste+copy}&4&6&.2310\\ \text{3 paste+copy}&5&7&.2299\end{array}$$ 2 las pastas parece ganar.

3voto

6005 Puntos 19982

Vamos a definir nuestros dos posibles movimientos de la siguiente manera:

  • Una pasta (P) , se añade el número de caracteres en el portapapeles para el mensaje, tomar de 1 paso.
  • Una copia (C) establece el número de caracteres en el portapapeles para igualar el número de de caracteres en el mensaje, tomar 3 pasos (seleccionar todo, copiar, seleccione la final). (Lado nota: usted puede hacer la misma cosa con seleccionar todo, copiar, pegar - te va a pegar más su texto seleccionado, reemplazándolo con sí mismo. Nota 2: yo estoy usando una diferente definición de "copia" de otros: no estoy incluyendo la pasta de la copia.)

La pregunta es, si usted comienza con 1 personaje en el mensaje y 1 carácter en el portapapeles, ¿cuántos pasos (mínimo) tardará en llegar, al menos, 1000 caracteres en el mensaje?

La secuencia de movimientos (Ps y Cs) se utiliza de forma óptima va a ver algo como este:

PPPCPPCPCPPPCP

(Es inútil empezar o terminar con una C, y poner dos Cs uno al lado del otro es igualmente inútiles). Así, de manera óptima, haremos $a_1$ Ps, seguido por una C, seguido por $a_2$ Ps, seguido por una C, etc., terminando con una C y $a_m$ Ps, donde cada una de las $a_i \ge 1$. El número de pasos que se utiliza en esta forma se $$ a_1 + a_2 + \cdots + a_m + 3(m-1). \etiqueta{1} $$

Now, let $K_n$ be the position with $n$ characters in the message and $$ n caracteres en el portapapeles. De $K_n$, si utilizamos $a$ Ps en una fila, seguido por una C, terminamos en la posición $K_{n(a+1)}$. Podemos asumir que obtener una copia gratuita de mover al final (es no va a mejorar el número de caracteres en el mensaje), por lo que nuestra posición final es $K_A$ donde $A$ está dado por $$ (a_1 + 1)(a_2 + 1)\cdots(a_m + 1) \etiqueta{2} $$

Lo que queremos es maximizar (2), mientras que al mismo tiempo reducir al mínimo (1). Más concretamente, si podemos cambiar el $a_i$s a disminuir (1) y aumento (2), esto es, sin duda bueno. A partir de esta idea, podemos observar:

  • Incluso una $a \ge 8$ debe ser reemplazado por $1$$\frac{a}{2}$. En (2), podemos mejorar desde $(a + 1) \le (1 + 1)(\frac{a}{2} + 1)$. En (1) podemos mejorar ya que $a \ge 1 + \frac{a}{2} + 3$. (The $+ 3$ comes from $m$ increasing by $1$.)
  • Una extraña $a \ge 7$ debe ser reemplazado por $1$$\frac{a-1}{2}$. Tenemos $(a + 1) \le (1 + 1)(\frac{a-1}{2} + 1)$ and $un \ge 1 + \frac{a-1}{2} + 3$.
  • Si $a$$a'$, $a < a'$ son al menos dos separados, se deberá reemplazarlos con $a + 1$$a' - 1$. Tenemos $(a + 1)(a' + 1) \le (a + 2)(a')$$a + a' \ge (a + 1) + (a' - 1)$.

Los tres simplificaciones, cuando se aplica tantas veces como necesitemos, nos dan un conjunto final de $a_1,a_2,\dots,a_m$ que pertenecen a $\{1,2,3,4,5,6\}$ y no contienen dos $a_i$s de dos o más de distancia. En otras palabras, es óptimo para el uso de cualquiera de las $1$s y $2$s, $2$s y $3s$, $3$s y $4$s, $4$s y $5$s o $5$s y $6$s solo. Pero podemos ir más allá. Se puede comprobar que, en la (multi)set $a_1,a_2,\dots,a_m$:

  • $1,1$ puede ser sustituido por $3$
  • $1,2$ puede ser sustituido por $5$
  • $5,5$ puede ser sustituido por $2,2,3$
  • $6,6$ puede ser sustituido por $3,3,3$

Por lo tanto, de manera óptima, tenemos que usar al menos una $5$, en más de una $6$ y en más de una $1$. También, ya que no podemos utilizar tanto en $1$s y $2$s, $1$s son bastante inútil (el único momento en el $a_i = 1$ se bien es si sólo hay un $a_i$ total). Esto arroja fuera el caso de que sólo utilizamos $1$s y $2$s. Finalmente, sólo el uso de $5$s y $6$s podemos conseguir en la mayoría de $(5 + 1)(6 + 1) = 42$, que es mucho menos de $1000$, así que vamos a tirar este caso. Nos quedamos con sólo tres casos: utilizamos $2$s y $3$s, utilizamos $3$s y $4$s, o utilizamos $4$s y en más de una $5$.

En este punto, vamos a suponer que sólo utilizamos $b$s y $b+1$s, donde $b \in \{2,3,4\}$. Deje $a_i = b$ $j$ valores de $i$, y deje $a_i = b + 1$ $k$ valores de $i$. Entonces a partir de (1), es necesario minimizar $$ (b)j + (b + 1)k + 3 j + k - 1) = (b + 3)j + (b + 4)k - 3 \etiqueta{3} $$ Dado que (2) es, al menos,$1000$, es decir, $$ (b + 1)^j (b + 2)^k \ge 1000. \etiqueta{4} $$

We separate into cases on $b$ to complete the work.

Case 1: $b = 2$

Here (4) becomes $3^j 4^k \ge 1000$. Dado un fijo $k$, queremos elegir el más pequeño $j$ para que esto se cumple. También, recogiendo $k > 5$ es inútil desde $4^5 > 1000$ ya.

\begin{array}{|c|c|c|} \hline k & \text{Smallest } j & 3^j 4^k & \text{Steps used (3): } 5j + 6k - 3 \\ \hline 0 & 7 & 2187 & 32 \\ \hline 1 & 6 & 2916 & 33 \\ \hline 2 & 4 & 1296 & 29 \\ \hline 3 & 3 & 1728 & 30 \\ \hline 4 & 2 & 2304 & 31 \\ \hline 5 & 0 & 1024 & 27 \\ \hline \end{array}

Caso 2: $b = 3$

(4) se convierte en $4^j 5^k \ge 1000$. Dado un fijo $k$, queremos elegir el más pequeño $j$ para que esto se cumple. Recogiendo $k > 5$ es inútil desde $5^5 > 1000$ ya. Asumimos $k > 0$ desde $k = 0$ se engloba en el Caso 1.

\begin{array}{|c|c|c|} \hline k & \text{Smallest } j & 4^j 5^k & \text{Steps used (3): } 6j + 7k - 3 \\ \hline 1 & 4 & 1280 & 28 \\ \hline 2 & 3 & 1600 & 29 \\ \hline 3 & 2 & 2000 & 30 \\ \hline 4 & 1 & 2500 & 31 \\ \hline 5 & 0 & 3125 & 32 \\ \hline \end{array}

Caso 3: $b = 4$

(4) se convierte en $5^j 6^k \ge 1000$. Hemos observado antes de que $k \ge 2$ es subóptima. También, $k = 0$ es englobado en el Caso 2. Por lo tanto nuestra tabla es muy simple:

\begin{array}{|c|c|c|} \hline k & \text{Smallest } j & 5^j 6^k & \text{Steps used (3): } 7j + 8k - 3 \\ \hline 1 & 4 & 3750 & 33 \\ \hline \end{array}

$$ * \quad * \quad * $$

Después de haber pasado por todos los casos, podemos ver que, efectivamente, el 27 de pasos es lo mejor que podemos hacer. Nuestra estrategia es PPPCPPPCPPPCPPPCPPP, y terminamos con 1024 caracteres.

Comentarios Finales: El final de la computación era un poco bruto, pero considerablemente más fácil de lo esperado (y factible a mano!). Este método de reducción de los casos $b = 2$, $b = 3$, y $b = 4$, y luego el control de cada uno debe ser fácil para el programa en un equipo para un general $N$ número deseado de caracteres ($N = 1000$ aquí). Habrá cerca de $\log_4 N$ filas de la primera tabla, $\log_5 N$ filas de la segunda tabla, y $1$ fila en la tercera tabla; por lo tanto el algoritmo tendrá tiempo total $\log_4 N + \log_5 N + 1$, o, simplemente,$O(\log N)$, que es casi tan eficiente como podemos pedir.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X