Jeter les chats de windows
Imaginez que vous êtes dans un grand bâtiment avec un chat. Le chat peut survivre à une chute d'une basse histoire de la fenêtre, mais mourront si elles sont lancées à partir d'un étage élevé. Comment pouvez-vous trouver la plus longue chute que le chat peut survivre, en utilisant le moins de tentatives?
Évidemment, si vous avez un chat, vous ne pouvez rechercher de manière linéaire. D'abord jeter le chat à partir du premier étage. Si elle survit, jeter de la seconde. Finalement, après avoir été jeté du sol f, le chat va mourir. Vous savez alors que f-1 est le maximum coffre-fort-de-chaussée.
Mais que faire si vous avez plus d'un chat? Vous pouvez maintenant essayer une certaine sorte d'logarithmique de recherche. Disons que la compilation de 100 étages et vous avez deux identiques chats. Si vous jetez le premier chat de la 50ème étage et il meurt, vous n'avez alors qu'à la recherche de 50 étages de façon linéaire. Vous pouvez faire encore mieux si vous choisissez un étage inférieur pour votre première tentative. Disons que vous choisissez de traiter le problème de 20 étages à la fois et que le premier fatal étage est n ° 50. Dans ce cas, votre premier chat va survivre vols à partir de planchers de 20 et 40 avant de mourir de sol 60. Vous n'avez qu'à vérifier les planchers de 41 à 49 individuellement. C'est un total de 12 tentatives, qui est beaucoup mieux que le 50 vous devez vous avais tenté d'utiliser les binaires élimination.
En général, quelle est la meilleure stratégie et c'est pire-la complexité de l'affaire pour un n étages, avec 2 chats? Et pour le n étages et m les chats?
Supposer que tous les chats sont équivalents: ils seront tous de survivre ou de mourir d'une chute d'une fenêtre donnée. Aussi, chaque tentative est indépendant: si un chat survit à une chute, il est complètement indemne.
Ce n'est pas de devoirs, même si j'ai résolu pour l'école d'affectation une fois. C'est juste un lunatique problème qui surgit dans ma tête aujourd'hui, et je ne me souviens pas de la solution. Les points de Bonus si quelqu'un sait le nom de ce problème ou de la solution de l'algorithme.
- Je m'oppose à l'utilisation de chats dans la façon décrite. Pouvons-nous changer pour les chiens?
- Il n'est pas simple. Des études ont été faites (des chats tomber accidentellement du gratte-ciel, ne pas être jeté). Il y avait une certaine plage où ils sont morts, et une gamme *** de plus que ce *** d'où ils ont survécu. Quelque chose à propos de la façon dont ils se crispa de leur corps.
- C'est un casse-tête qui est sur internet que l'un d'eux a demandé à google d'entrevue (je ne connais pas la véracité de cela), mais voici la solution http://interviewpuzzle.blogspot.com/2010/03/google-interview-puzzle-2-egg-problem.html
- J'ai lu quelque part que 15ft ou au-dessus, les chats ont une plus grande chance de survivre. Cette question serait mieux si nous étions à la chute de l'ex-petites amies et/ou de harceler les femmes.
- Avez-vous lu jusqu'à la fin où il a dit qu'il n'est pas de devoirs? Il peut être allongé pour nous, mais nous allons voir.
- Si vous avez un chat, et de le jeter de étages successifs, il va également soutenir les blessures non mortelles de la précédente jeté par la fenêtre événements. Quand le chat est finalement levée à partir de la fenêtre qui s'avère fatale, nous ne pouvons déterminer que c'était l'automne ou le collectif de blessures qui a tué la bête. Par conséquent, le chat doit être autorisé à recouvrer entièrement entre les étages, avant d'être chucked par la fenêtre à nouveau.
- Est-il une meilleure solution que binaire de recherche? Démarrer à partir du milieu, si le chat meurt jeter la moitié supérieure, si le chat vit jeter la moitié inférieure, de manière récursive.
- Le problème est que vous avez seulement un nombre limité d'essais sur les gammes supérieures.
- Oh, essayons-nous de préserver les chats de la vie? Je pensais que nous étions aller juste pour un minimum de tentatives. Pour un minimum de pertes, il vous suffit de faire une recherche linéaire en partant du bas.
- Nous n'allons pas pour un minimum de pertes, nous allons nous pour un minimum de tentatives. Mais nous avons une contrainte sur le nombre maximum de victimes.
- Bien sûr, il n'est pas à propos de Microsoft, c'est à propos des fenêtres en verre...
- Je crois que c'est mieux résolus avec le bien connu Défenestration Modèle, plus concise dans le LOLCODE langage de programmation.
- Vous savez, si vous commencez avec deux chats, vous avez juste à attendre quelques mois et puis exécutez une recherche binaire. Ou attendre quelques mois après et faire une "recherche simultanée," dans lequel vous obtenez des aides pour jeter les chats de chaque étage à la fois-- le comte de survie des chats dans ce cas est le plus haut numéro de l'étage, vous pouvez jeter 'em à partir, bien sûr.
- Avec des lapins, des changement "mois" à "semaines".
- sauf si vous commencez avec deux chats mâles. alors vous êtes en difficulté, surtout après quelques mois.
- +1 pour toute question, qui implique que la qualification de "supposer que tous les chats sont équivalentes".
- Je suis en désaccord, si les chats sont une paire de reproduction, puis vous vous retrouverez à l'aide d'un de fibonacci de recherche
- C'est un très bon puzzle intellectuel du type appréciée par les programmeurs, mais je ne vois pas comment elle est elle-même liée à la programmation ou le développement de logiciels.
- Je suis sûr que c'est un dupe. Mais la question d'origine utilisé quelque chose d'autre cassable autres que les chats.
- Aw, pas plus
windows
oufatal
balises. 🙁 - Puis-je jeter ces deux chats en même temps? De cette façon, le premier chat pourrait amortir le deuxième chat est l'automne, donc de l'enregistrer.
- Les chatons et les chats vont tomber différemment. Mon FIL chaton est allé de parachutisme de la 27e étage. Il était en boitant un peu par la suite. Ainsi, vous aurez à attendre plusieurs mois pour exécuter votre recherche binaire.
- Je voudrais que les gens utilisent ce site pour discuter de la programmation. Je suis malade de ces postes qui sont considérés comme des blagues à faire beaucoup d'attention et inutile de réponses. Je knw, je sais, je n'ai pas cliquer...
- Lunatique, il peut être, mais ce n'est pas une blague...C'est valable de puzzle de logique nécessitant beaucoup de complexes calculs algorithmiques afin de le résoudre. Des sons à droite de l'allée d'une communauté de développeurs
- J'ai eu cela comme une question d'entrevue avec des boules de billard
- Les chats ont 9 vies. Vous pouvez simplement le jeter de la plus basse de la fenêtre et l'incrément de la hauteur jusqu'à ce qu'il meurt.
- Notez que c'est identique à Google Code Jam "la Chute de l'Oeuf problème". Le O(n^3) la solution ci-dessous n'est pas assez bon, parce que le grand problème réglé utilise N = 2000000000. code.google.com/codejam/contest/dashboard?c=32003#s=p2
- Ne pas les chats ont un non-fatal vitesse terminale?
- en.wikipedia.org/wiki/Buttered_cat_paradox
- J'avais utilisation de Schrödinger, le chat du pour cette.
- pour que vous n'avez pas besoin d'un chat, juste un peu de rembourrage tout ça pourrait le faire. que fait-il pas lié à la question en cours.
- Question appartient à la Programmation des Énigmes & Code de Golf de la pile d'échange du site (codegolf.stackexchange.com)
- les deux personnes qui upvoted ce commentaire), non, ce n'est pas le cas. PPCG est pour l'hébergement de concours, pas d'en débattre.
- l'OP est clairement demandant une réponse, pas une discussion. C'est un casse-tête, pas une pratique de la programmation ou codage problème, donc je m'en tiens à mon commentaire.
- à mesure que votre affirmation est que la question est hors sujet sur cette pile, je ne discute pas. Mais pour les utilisateurs qui connaissent l'existence des PPCG mais ne participent pas il y a souvent des idées erronées de ce sujet là, et votre commentaire est en ligne. L'OP est clairement le but n'est pas d'accueillir un concours de programmation, il est donc hors sujet pour PPCG. Il serait probablement sur le sujet de la très récente puzzles.stackexchange.
- bien à l'aide du chat de Schrödinger n'est pas conseillé ici, il est tout à fait le problème est plus compliqué ..:)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez facilement écrire un peu de DP (programmation dynamique) pour le cas général de n étages et m les chats.
La principale formule,
a[n][m] = min(max(a[k - 1][m - 1], a[n - k][m]) + 1) : for each k in 1..n
, devrait être auto-explicatif:k - 1
étages pour vérifier (tous au-dessous dek
) etm - 1
chats (a[k - 1][m - 1]
).n - k
étages gauche (tous les étages au-dessus dek
) et encorem
chats.max
.+ 1
vient du fait que nous avons utilisé une tentative (même si le chat a survécu ou pas).min(f(k)) : for k in 1..n
.Il est d'accord avec Google, le résultat de Gaurav Saxena's lien pour (100, 2).
Vous pouvez facilement trouver de la stratégie (comment lancer en premier chat), si vous enregistrez le meilleur
k
dans un autre tableau.Il y a aussi une solution plus rapide, n'impliquant pas de O(n^3) les calculs, mais je suis un peu endormie déjà.
modifier
Oh oui, Je me souviens lorsque j'ai vu ce problème avant.
+ 1
besoin d'être à l'extérieur de lamin()
? Comme vous le dites vous-même, si la tentative est réussie ou non, c'est encore une tentative.+1
à l'extérieur demin
. Ou en les déplaçant à l'intérieur demax
🙂Selon un récent épisode de Radiolab (à propos de "la Chute"), un chat atteint la vitesse terminale au 9ème étage. Après cela, il se détend et est moins susceptible d'être blessé. Il y a complètement indemne chats après une chute à partir de ci-dessus le 30. Les plus risqués que les planchers sont en 5e au 9e.
La meilleure stratégie pour la résolution de ce problème est à l'investigation, à l'aide de la loi de la physique, la probabilité de vos hypothèses soient vraies en premier lieu.
Si vous l'avez fait, vous réaliserais que le chat chances de survie en fait augmenter le plus élevé de la distance à la terre est. Bien sûr, en supposant que vous jetez à partir d'un nombre toujours plus élevé de la construction, tels que les tours petronas, et non pas un nombre toujours plus élevé de la montagne, comme le mont everest.
Edit:
En fait, vous devriez voir une inachevé chameau de distribution.
Tout d'abord, la probabilité de le chat en train de mourir est faible (très faible altitude), puis il devient plus élevé (basse altitude), puis de nouveau en baisse (en altitude), et puis de nouveau plus élevé (très haute altitude).
Le graphique de la probabilité de chat en train de mourir en fonction de l'altitude au-dessus du sol ressemble à ceci:
(terminer à la 3, parce que inachevé chameau de distribution)
Mise à jour:
Un chat terminal de la vitesse est de 100 km/h (60 mph) [=27.7 m/s = 25.4 mètres/s].
Terminal de l'homme de la vitesse de 210 km/h (130mph).[=75m/s = 68.58 mètres/s]
Vitesse terminale source:
http://en.wikipedia.org/wiki/Cat_righting_reflex
Crédits:
Goooooogle
J'ai besoin de vérifier plus tard:
http://en.wikipedia.org/wiki/Terminal_velocity
http://www.grc.nasa.gov/WWW/K-12/airplane/termv.html
J'ai d'abord lu ce problème dans de Steven Skiena de la Conception d'un Algorithme Manuel (exercice 8.15). Il a suivi un chapitre sur la programmation dynamique, mais vous n'avez pas besoin de connaître la programmation dynamique pour prouver précise les limites de la stratégie de. D'abord l'énoncé du problème, alors la solution ci-dessous.
Seulement 1 œuf
Déposer l'oeuf de chaque étage de départ lors de la première trouverez la critique étage (au-pire) n opérations.
Il n'y a pas d'algorithme plus rapide. À tout moment, dans n'importe quel algorithme, soit g l'étage le plus élevé à partir de laquelle l'œuf a été vu pour ne pas casser. L'algorithme doit tester étage g+1 avant tout l'étage supérieur h > g+1, sinon si l'oeuf à la pause de sol h, il ne pouvait pas distinguer entre f=g+1 et f=h.
2 oeufs
D'abord, considérons le k=2 œufs cas, lorsque n = r**2 est un carré parfait. Voici une stratégie qui prend O(sqrt(n)) de temps. Commencez par déposer le premier œuf en incréments de r étages. Lorsque le premier œuf de pauses, à dire, à l'étage
ar
, nous savons que la critique de plancher f doit être(a-1)r < f <= ar
. Nous avons ensuite déposer le deuxième oeuf de chaque étage de départ à(a-1)r
. Lorsque le deuxième oeuf se brise, nous avons trouvé la critique de l'étage. Nous avons baissé de chaque œuf à la plupart de la recherche, alors cet algorithme prend au-pire 2r opérations, qui est Θ(sqrt(n)).Lorsque n n'est pas un carré parfait, prendre r =
ceil(sqrt(n)) ∈ Θ(sqrt(n))
. L'algorithme reste Θ(sqrt(n)).La preuve que l'algorithme prend au moins sqrt(n) fois. Supposons qu'il existe un algorithme plus rapide. Tenir compte de la séquence de sols à partir de laquelle il tombe le premier œuf (à condition qu'il ne se casse pas). Depuis, il tombe moins de sqrt(n), il doit y avoir un intervalle d'au moins n/sqrt(n) qui est sqrt(n). Lorsque f est, dans cet intervalle, l'algorithme doit enquêter avec le deuxième oeuf, et qui doit être fait étage par étage rappelant l'1-oeuf. La CONTRADICTION.
k œufs
L'algorithme présenté pour 2 œufs peuvent être facilement étendu à k œufs. Déposer chaque oeuf avec des intervalles constants, ce qui devrait être pris que les pouvoirs de la k-ième racine de n. Par exemple, pour n=1000 et k=3, la recherche des intervalles de 100 étages avec le premier œuf, 10 avec le deuxième oeuf et 1 avec le dernier oeuf.
De la même façon, nous pouvons prouver qu'aucun algorithme est plus rapide
Θ(n**(1/k))
en récupérant à partir de k=2 preuve.Solution exacte
Nous en déduisons que la récidive par l'optimisation de l'endroit où déposer le premier œuf (plancher g), en supposant que nous savons des solutions optimales pour les plus petits paramètres. Si l'oeuf se brise, nous avons le g-1 étages ci-dessous pour explorer avec k-1 oeufs. Si l'ovule survit, on a n-g étages au-dessus d'explorer avec k œufs. Le diable choisit le pire pour nous. Ainsi, pour k>1 la récurrence
O(k*n**(1/k))
pour le pire des cas? Depuis, dans le pire des cas, je dois passer parn**(1/k)
exactementk
fois.N'est-ce pas supposer que vous êtes à l'aide de "Le Même Chat"?
Vous pouvez l'approcher mathématiquement, mais c'est la bonne chose à propos des mathématiques... avec les bonnes hypothèses, 0 peut être égale à 1 (pour les grandes valeurs de 0).
À partir d'une pratique de point de vue, vous pouvez obtenir Similaire Chats", mais vous ne pouvez pas obtenir Le Même Chat".
Vous pourriez essayer de déterminer la réponse de manière empirique, mais je pense qu'il y aurait assez de différences statistiques que la réponse serait statistiquement insignifiantes.
Vous pouvez essayer d'UTILISER "Le Même Chat", mais qui ne fonctionne pas, car, après la première chute, il n'est plus le même chat. (De la même manière, les onecan pas jamais dans le même fleuve deux fois)
Ou, vous pourriez globale de la santé du chat, à l'échantillonnage et à très proche des intervalles, et de trouver les hauteurs pour laquelle le chat est "la plupart du temps vivant" (par opposition aux "morts pour la plupart" à partir de "The Princess bride"). Les chats survivent en moyenne (jusqu'à la dernière intervalle).
Je pense que j'ai dévié de l'objectif initial, mais si vous allez empiriques sur la route, je vote pour le démarrage le plus haut possible et de continuer à déposer des cats que la hauteur diminue, jusqu'à ce qu'ils statistiquement survivre. Et puis re-test sur la survie des chats pour en être sûr.
J'ai pris une méthode légèrement différente pour produire une solution.
J'ai commencé à travailler sur le plancher maximale qui pourrait être couverts à l'aide x chats et y suppositions à l'aide de la méthode suivante.
Commencer avec 1 étage et de continuer à augmenter le nombre de suppositions tout en gardant la trace d'étages vérifié, ce qui suppose qu'ils ont été contrôlés et la façon dont beaucoup de chats ont été restant pour chaque étage.
Répétez cette opération jusqu'à y fois.
Ce très inefficace code pour calculer la réponse qui est donnée, mais néanmoins utile pour le petit nombre de chats /étages.
Code Python:
Pour 2 chats le maximum d'étages qui peuvent être identifiés dans x devine est:
1, 3, 6, 10, 15, 21, 28...
Pour 3 chats:
1, 3, 7, 14, 25, 41, 63...
Pour 4 chats:
1, 3, 7, 15, 30, 56, 98...
Après de longues recherches (essentiellement en tapant les numéros de séquences en OEIS), j'ai remarqué que le maximum d'étages pour x suit un combinaison par morceaux motif.
Pour 2 chats:
n < 2 : 2^n - 1
n >= 2 : C(n, 1) + C(n, 2)
Pour 3 chats:
n < 3 : 2^n - 1
n >= 3 : C(n, 1) + C(n, 2) + C(n, 3)
Pour 4 chats:
n < 4 : 2^n - 1
n >= 4 : C(n, 1) + C(n, 2) + C(n, 3) + C(n, 4)
De là, j'ai pris la simple approche d'une simple incrémentation de n jusqu'à ce que je passe le nombre d'étages.
Code Python:
Cela donne la bonne solution pour (100, 2) = 14.
Pour quelqu'un qui veut vérifier quelque chose de moins banal, il donne (1 000 000, 5) = 43.
Cela s'exécute en O(n) où n est la réponse au problème (les chats de plus le mieux).
Cependant, je suis sûr que quelqu'un avec un niveau élevé de mathématiques pourrait simplifier la par morceaux formules permettant de calculer en O(1).
Je ne peut pas lire le google blogspot sur ce (grâce à des travaux blogwall) mais je ne pense pas droite binaire de recherche de style serait le mieux. La raison étant que le binaire de recherche est basé autour de l'idée que la réponse que vous recherchez a une chance égale d'être à tout indice dans la liste. Toutefois, dans ce cas la ce n'est pas vrai. Dans ce cas, la réponse aura une probabilité plus élevée d'être plus proche d'une extrémité de la gamme que l'autre. Je n'ai aucune idée de comment en tenir compte dans la recherche, mais c'est une question intéressante.
tout ce fou de parler de chats..et c'est juste une supposition, le nombre de problème avec un minimum d'hypothèses (nombre de chats). il ne devrait pas être nécessaire de diminuer artificiellement (et à tort) de définir l'infini comme une partie de la solution. la variable doit avoir été nommé à la limite supérieure ou max-essayer ou quelque chose du genre.
la définition du problème (le chat de la chose) et de graves problèmes bien que, avec les gens de répondre à la cruauté envers les animaux potentiels et aussi les multiples facettes d'un tel problème posé dans la vie réelle, par exemple de l'air-glisser, la gravité est l'accélération, et d'autres de la vie réelle des paramètres du problème. alors peut-être il aurait été demandé de façon totalement différente.