Какова Энтропия Точечной Системы Пароля Android?

Сколько перестановок системы входа в систему точки андроидов возможно? Я знаю для факта, решение этого находится в Дискретной Математике, конкретно Перестановки Без Повторения, Если Ваш ответ не использует перестановки или комбинации, Вы являетесь неправильными.

Длина паролей между 4 и 9 точками, существует в общей сложности 9 точек для перестановки все же. таким образом, мое начальное уравнение:

9P4+9P5+9P6+9P7+9P8+9P9

Однако я знаю, что это уравнение является неполным, потому что оно не учитывает все правила. Каждая точка отлична из-за, положение поэтому, если Вы присваиваете номер каждой точке следующим образом:

123
456
789

Пароль "1397" невозможен, при попытке использовать этот пароль, Вы на самом деле войдете в "1236987", потому что промежуток чисел автоматически выбран. Другое уравнение должно быть создано, чтобы составлять эти ограничения и затем вычесть прочь из моего уравнения nPr выше.

Эта ссылка имеет большое видео кого-то использующего вход в систему андроида. Это также глубже проникает в детали в правила. Математика на той странице является абсолютно неправильной, он даже не близко к действительному решению.

21
задан rook 13 August 2019 в 23:28
поделиться

3 ответа

Это только частичный ответ. Единственными соответствующими стартовыми точками являются 1, 2 и 5. Для точек 1 и 2 можно сгенерировать шаблон, эквивалентный началу с любой из других точек (кроме 5) с помощью простого поворотного преобразования. Это означает, что если можно перечислить все детали, начинающиеся с 1 и 2, то можно считать все детали, начинающиеся с любого числа, кроме 5, умножив их на 4.

Траектории, начинающиеся с 5 - это другой случай. Вы можете считать их все, считая все пути, которые начинаются с 5->1 и 5->2 и умножаются на 4, так как можно сгенерировать все остальные возможные пути простым вращением с помощью трансформации.

Таким образом, способ перечислить пути будет...

(Все пути, начинающиеся с 1 + все пути, начинающиеся с 2 + все пути, начинающиеся с 5->1 + все пути, начинающиеся с 5->2) * 4

Опять же, система нумерации, для удобства:

1  2  3
4  5  6
7  8  9

Для этого первого хода:

От 1 -> 2, 4, 5, 6 и 8 доступны.

Из 2 -> 1, 3, 4, 5, 6, 7 и 9 доступны (в основном просто не 8 или сам по себе).

Из 5 -> 1, 2, 3, 4, 6, 7, 8 и 9 доступны.

Для ходов после этого становится действительно интересно.

Например, 1537 - действующий пароль. 1539 - нет.

Здесь кратко изложены правила:

Ни одна точка не может быть частью пути дважды. Если точка не является частью пути и точно пересекается переходом, она становится частью пути между точкой источника и точкой назначения.

Вот несколько примеров путей:

  • 2->3->1->8 допускается.
  • 1->3->2->5 не разрешен, потому что 2 не является частью пути, когда 1->3 проходит точно через 2, поэтому путь становится 1->2->3->5 независимо от того, хотите вы этого или нет.
  • 1->2->3->7 не разрешено, потому что 3->7 пересекается с 5 и 5 еще не является частью пути.
  • 1->5->3->7 разрешено. 5 игнорируется в 3->7, потому что он уже является частью пути.

Эта программа:

class LockPattern(object):
    def __init__(self, *args):
        if (len(args) == 1) and hasattr(args[0], '__iter__'):
            args = tuple(args[0])
        if len(args) > 9:
            raise TypeError("A LockPattern may have at most 9 elements.")
        self._pattern = ()
        for move in args:
            if not self.isValidNextStep(move):
                raise TypeError("%r is not a valid lock sequence." % (args,))
            else:
                self._pattern = self._pattern + (move,)
    def __len__(self):
        return len(self._pattern)
    def __iter__(self):
        return iter(self._pattern)
    def isValidNextStep(self, nextdot):
        nextdot = int(nextdot)
        if (nextdot < 1) or (nextdot > 9):
            raise ValueError("A lock sequence may only contain values from 1 "
                             "to 9 and %d isn't." % (nextdot,))
        if len(self._pattern) <= 0:
            return True # Any dot is valid for the first dot
        if len(self._pattern) >= 9:
            return False
        if nextdot in self._pattern:
            return False # No dot may be visited twice
        prevdot = self._pattern[-1]
        dotpair = tuple(sorted((prevdot, nextdot)))
        if dotpair == (1,3):
            return 2 in self._pattern
        if dotpair == (1,7):
            return 4 in self._pattern
        if dotpair in ((1,9),(2,8),(3,7),(4,6)):
            return 5 in self._pattern
        if dotpair == (3,9):
            return 6 in self._pattern
        if dotpair == (7,9):
            return 8 in self._pattern
        return True
    def isValidLockSequence(self):
        return 4 <= len(self)
    def newSequenceAddDot(self, nextdot):
        if not self.isValidNextStep(nextdot):
            raise ValueError("%d is not a valid next dot for the sequence." % (nextdot,))
        newseq = LockPattern()
        newseq._pattern = self._pattern + (nextdot,)
        return newseq

def genAllPatterns(starting = LockPattern()):
    if starting.isValidLockSequence():
        yield starting
    for dot in xrange(1,10):
        if starting.isValidNextStep(dot):
            for result in genAllPatterns(starting.newSequenceAddDot(dot)):
                yield result

print reduce(lambda x, p: x+1, genAllPatterns(), 0)

Генерирует ответ 389112.

Она также подтверждает мои предыдущие интуиции:

lsts = tuple(((p, list(genAllPatterns(LockPattern(p)))) for p in ((1,), (2,), (5,1), (5,2))))
[(x[0], len(x[1])) for x in lsts]
-> [((1,), 38042), ((2,), 43176), ((5, 1), 7352), ((5, 2), 8708)]
sum((len(x[1]) for x in lsts)
-> 97278
97278 * 4
-> 389112
20
ответ дан 29 November 2019 в 21:32
поделиться

Ключ - заметить, что, как только вы посетили любые две точки, вы можете связаться с любой другой точкой, которую вы хотите, не перемещаясь через какую-либо точку, которую вы еще не посещали. Поэтому, как только вы выберете два стартовых точка (по порядку), вы можете выбрать остальную часть вашего пароля по желанию желаемого заказа. (Это потому, что «движения рыцаря» разрешены, по крайней мере, в соответствии со страницей, которую вы связаны)

Итак, исключая «запуск двух» точек, количество оставшихся 2-7 цифр - 7P2 + 7P3 + 7P4 + 7P5 + 7P6 + 7P7. Есть 56 потенциальных начинающих двухзначных головок, потому что есть 5 ходов, которые вы можете сделать из любого углового точка, 7 из любой краевой точки и 8 из центральной точки. Таким образом, общее количество шаблонов разблокировки было бы 56 * (7P2 + 7P3 + 7P4 + 7P5 + 7P6 + 7P7) = 766 752.

Если это неправильно, это, вероятно, потому что я скучаю по некоторым знаниям о правилах этой системы Отказ

2
ответ дан 29 November 2019 в 21:32
поделиться

Это очень сложная вещь.

Вы можете попробовать INT из FourMilab и сравните его с результатами против их RNG, Hotbits . Вы также можете понравиться просмотреть Random.org .

Это также выглядит интересно: Diehard Tests (Я не работал с этим, хотя).

-121--1389144-- 1389144-

Хорошо, поэтому во-первых, позвольте мне начать с того, что всемогаемое, кажется, правильно. Что мы можем сделать с математикой. Я бы согласился с ним, когда он говорит, что на самом деле есть только 3 случая, которые будут обеспокоены. 1,2 и 5.

ОП хочет какой-то элегантной подсчитанной формулы, которую я сомнительно существует для такой проблемы. При использовании всех 9 точек вы найдете гамильтоновые пути, которые, если это был полный график, будет очень легко рассчитывать (это не). Поскольку каждый из трех случаев уникален, вы собираетесь перечислить всеми из них, чтобы найти общее количество путей.

Давайте посмотрим на первый случай, начиная с углом. У вас есть четыре варианта за углу, тогда у вас есть 5 вариантов для вашего следующего квадрата. Теперь вы быстро увидите, что наша формула достаточно быстро расширяется, потому что у нас есть 5 вариантов, и мы должны разделить эти 5 вариантов на 2 набора.

Переезд на Средний боковой квадрат, будет иметь один и тот же выбор независимо от того, к которому вы переходите. В отличие от перехода к 5, что даст нам еще много вариантов, уже наша формула:

4 * (4 * (6) + 1 * (7))

, тогда мы должны сломать параметры 6 и 7 в дальнейшие группы. Если мы перейдем на боковую площадь, то теперь мы можем перейти к двум сторонам квадраты, три угла и одну среднюю площадь. Затем наша формула становится:

4 * (4 * (2 * (5) + 3 * (3) + 1 * (7)) + 1 * (7))

, тогда мы должны начать решать, если Мы переехали на Средний квадрат, и я собираюсь остановиться здесь. Нахождение гамильтоновых путей - это НП-полное, хотя мы просто считаем их. Но здесь нет никаких свойств, которые мы можем воспользоваться для элегантного решения. Это проблема теории графиков, и это тот, который включает в себя грубое принуждение к раствору, как ранее было сделано вовременным.

Я постараюсь объяснить, почему вы неверны, вы говорите, что:

«Я знаю, на самом деле решение этого заключается в дискретной математике, в частности, перестановки без повторения, если ваш ответ не Используйте перестановки или комбинации, которые вы неверны. "

К сожалению, вы не знаете это на самом деле, потому что вы не знаете формулу (если вы не можете показать мне строгое неконструктивное доказательство). Дело в том, что перестановка или комбинация означает, что когда у вас есть n элементов, вы можете выбрать любой предмет любой итерации. Теперь вы можете поместить ограничения на количество предметов, которые вы можете выбрать, и в каких элементах вы можете выбрать на определенные итерации. Но то, что вы не можете сделать и ожидать, что элегантное решение делает выбор определенных элементов, влияющих на какие предметы вы можете выбрать дальше. Это именно то, что делает этот вопрос, и почему нет никакой приятной формулы, используя комбинации и перестановки.

Короче Формула, которую вы ищете, не существует, но всеможенными, нашли правильный ответ.

2
ответ дан 29 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: