La plupart des combinaisons binaires à partir de 4 bits, avec un seul changement par bit
J'ai 4 bits binaires
Bit 3 Bit 2 Bit 1 Bit 0
Normalement la réponse est simple: 2^4, ou 16 combinaisons différentes; et il serait ressemble à quelque chose comme:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Cependant, Le LSB (Bit 0) change d'état à chaque itération.
J'ai besoin d'un algorithme d'où l'état d'un bit seulement les changements une fois à travers toutes les itérations; je.e, j'ai besoin de tous mes bits d'agir comme le MSB (Bit 3).
Comment puis-je faire cela?
Modifier
Il semble que la plupart des gens sont en train de converger à seulement 5 solutions possibles. Toutefois, cela suppose qu'il existe un point de départ pour la valeur et un point de fin. Ce n'est pas grave donc je vais vous donner un scénario réel de mieux expliquer.
Supposons que j'ai un numérique réveil qui me donne 4 sorties. Chaque sortie peut être programmée pour aller à un certain moment et à un certain moment et sont programmés indépendants les uns des autres, par exemple. Je peux le programme de la sortie 1 pour aller sur à 1 h et descendre à 3 heures du matin, alors que je peux le programme de la sortie 2 pour aller à 7 h et descendre à 2 heures du matin. Il n'existe aucune restriction pour combien de temps à chaque sortie peut rester sur.
Maintenant je veux brancher ce réveil à un ordinateur et à se rapprocher le plus possible au courant de l'heure exacte. j'.e Si l'horloge indique le temps est de 2:15 pm, mon ordinateur ne connaît que l'alarme est dans les 12 h à 6 h de gamme par exemple. Je veux être en mesure d'obtenir le plus petit nombre possible. Quel est le plus petit nombre possible que je peux obtenir?
- C'est un très intéressant problème. Je suis en train de le comprendre maintenant, j'aime les défis. =) Savez-vous si il est possible ou est-il prouver/infirmer?
- Les Bits sont habituellement numérotées d'une manière qui LSB est le bit 0, permettez-moi de le modifier pour vous. 🙂
- J'ai trouver une solution, mais n'a pas d'état dans la question parce que je veux voir ce que les autres gens. En fait, j'ai utiliser une interface d'ordinateur.
- L'ordinateur a sa propre horloge interne? Si oui, alors il sait l'heure qu'il est, et n'a pas besoin de réveil. Si ça ne marche pas, alors comment voulez-4 bits à partir de l'alarme de l'horloge de donner à l'ordinateur de toute info sur le temps?
- Aussi, vous avait d'abord déclaré que chaque bit peut changer qu'une seule fois, mais dans votre "horloge", par exemple, chaque bit changements à deux reprises. Par exemple, à l'origine, sur à 1h du matin, à 3h du matin.
- Tant pis, je pense que j'obtiens ce que tu veux dire maintenant: * Une personne décrit un réveille-matin numérique pour faire 4 bits individuellement allumer une fois au cours de la journée, puis de désactiver une fois (au cours de la même journée, ou peut tourner sur, à 11 heures du soir et descendre à 1h du matin)? (suite)
- * Si la personne ne sait pas quelle heure il est, mais des regards à l'état des bits, ils devraient être en mesure de déduire que l'heure est à une certaine distance. * La question que vous vous poser est: Quelle doit être l'heure / heure pour chaque bit qui produirait le min(max(ressort intervalle de temps))?
Vous devez vous connecter pour publier un commentaire.
Par conséquent, vous pouvez avoir au plus 4 modifications de l'état, et au plus 5 valeurs différentes.
Exemple:
Edit:
Très bien, nous allons reformuler à partir de ce que tu veux dire plutôt que de partir de ce que vous dites.
Par conséquent, vous pouvez avoir un maximum de 8 modifications de l'état, et au plus 8 valeurs différentes (depuis le dernier changement d'état nécessairement apporte tous les bits de retour à leur état initial)
Exemple:
Donc, en définissant les sorties pour: 3 H - 3 H, 6 H - 6 H, 9 h - 9 H et midi - minuit, vous pouvez déterminer la période de 3 heures c'est à partir des sorties. Je vous suggère de brancher les fils dans le résultat visuel à la place.
Vous voulez un Gris Code. Look à mi-chemin vers le bas pour "la Construction d'un n-bits en niveaux de gris code".
Je crois qu'il est impossible de parcourir tous les possibles motifs de bits avec une telle restriction.
Si vous avez un n-bits idée, vous pouvez parcourir un total de (n+1), avant d'avoir à retourner un peu, vous avez déjà retournées.
Par exemple, dans un 3-bit exemple, si vous démarrez avec 111, vous obtenez
Et puis vous êtes forcé de retourner l'un que vous avez déjà retourné pour obtenir un nouvel état.
Basé sur votre réveil exemple je suppose que vous avez besoin pour terminer sur le combiation on l'a commencé, et que chaque bit peut être pédalé puis s'éteint qu'une seule fois, par exemple
Le nombre d'étapes est deux fois le nombre de bits, donc avec 4 bits, vous pourriez obtenir l'heure actuelle à moins de 3 heures de gamme.
Vous voulez chaque bit à modifier qu'une seule fois?
Comme:
Dans ce cas, vous pouvez utiliser un simple comptoir où le delta est multiplié par 2 à chaque itération (ou shift-gauche).
Si Gamecat vous avez correctement,
votre masque de bits des valeurs:
ou, à l'aide de changements:
(1 << i) - 1 for i in 0..
"J'ai besoin d'un algorithme d'où l'état d'un bit seulement les changements une fois à travers toutes les itérations"
Si la déclaration ci-dessus est pris à la lettre, alors il y a seulement cinq états par itération, comme expliqué dans d'autres posts.
Si la question est "Combien de séquences possibles peuvent être générés?", alors:
Est le premier état toujours 0000?
Si non, alors vous avez 16 états initiaux.
Ne ordre d'importance?
Si oui, alors vous avez 4! = 24 façons possibles de choisir les bits de retourner en premier.
Donc, ce qui donne un total de 16*24 = 384 séquences possibles qui peuvent être générés.
À la recherche de retour à la question initiale, je pense que je comprends ce que tu veux
simplement ce qui est la plus petite quantité de bits que vous pouvez utiliser pour programmer une horloge, basé sur la quantité de possibles combinaisons
la première question est de savoir comment de nombreuses séquences sont nécessaires.
60Secs x 60 Minutes x 24 heures = 86400 (combinaisons requis)
la prochaine étape est de travailler sur combien de bits sont nécessaires pour produire au moins 86400 combinaisons
si quelqu'un sais le calcul de
combien de bits peut produire 86400 combinaisons puis c'est votre réponse.
heureusement qu'il y a une formule en ligne quelque part pour ce calcul
Voici un exemple de comment vous pouvez rester un peu seul être retourné une fois. Ne connaissant pas tous les paramètres de votre système, il n'est pas facile de donner un exemple précis, mais en voici un de toute façon.
Retournement avec cette fonction n'autorise qu'une seule flip sur chaque bit.