Разве там Движение не должно Длиться ярлык Местоположения Редактирования в XCode?

Я просто быстро бросил это вместе.

Код:

bought = {
"January": ['Apple', 'Banana', 'Orange', 'Kiwi', 'Raspberry'],
"February": ['Orange', 'Mango', 'Banana'], 
"March": ['Apple', 'Starfruit', 'Apricot']
}

numbers = {}
allb = []
for month in bought:
    allb += bought[month]
for item in allb:
    if item in numbers:
        numbers[item] += 1
    else:
        numbers[item] = 1
print(numbers) # Note you can format this however you want: just iterate through the dictionary again

Ожидаемый результат:

Apple: 2, Banana: 2, Orange: 2, Kiwi: 1, Raspberry: 1, Mango: 1, Starfruit: 1, Apricot: 1

Фактический результат:

{'Apple': 2, 'Banana': 2, 'Orange': 2, 'Kiwi': 1, 'Raspberry': 1, 'Mango': 1, 'Starfruit': 1, 'Apricot': 1}

(Поскольку numbers является словарем, вы можете сделать очень мощные вещи для поиска чисел. В этом случае он действует как таблица.)

Первый for цикл проходит через все купленные ключи (как отформатировано, все месяцы) и ищет их значение. Затем эти значения добавляются в мой список allb (все куплено). Далее я перебираю allb и if, что элемент уже в числах: я добавляю 1 к счету, в противном случае я устанавливаю счет в 1. [ 1113]

18
задан Community 23 May 2017 в 11:47
поделиться

1 ответ

Хорошо, я нашел другой алгоритм: метод псевдонима (также упоминается в этом ответе ). По сути, он создает такое разделение вероятностного пространства:

  • Есть n разделов, все одинаковой ширины r st nr = m . . 12100] каждый раздел содержит два слова в некотором соотношении (которое сохраняется вместе с разделом).
  • для каждого слова w i , f i = ∑ разделы t st w i ∈ t r × ratio (t, w i )

Поскольку все разделы имеют одинаковый размер, выбор раздела может выполняться в постоянной работе (выберите случайным образом индекс из 0 ... n-1 ), а раздел Затем можно использовать коэффициент s, чтобы выбрать, какое слово будет использоваться в постоянной работе (сравните число в формате pRNG с соотношением между двумя словами). Таким образом, это означает, что выбор p может быть выполнен в O (p) работе с таким разделом.

Причина, по которой такое разделение существует, заключается в том, что существует слово w i st f i , если и только если существует слово w i ' st f i '> r , поскольку r - это среднее значение частот.

Учитывая такую ​​пару w i и w i ' , мы можем заменить их псевдословом w' i частоты f ' i = r (что представляет w i с вероятностью f i / r и w i ' с вероятностью 1 - f i / r ) и новым словом w' i ' настроенной частоты ] f ' i' = f i ' - (r - f i ) соответственно. Средняя частота всех слов по-прежнему будет r, и по-прежнему действует правило из предыдущего абзаца. Поскольку псевдослово имеет частоту r и состоит из двух слов с частотой r, мы знаем, что если мы будем повторять этот процесс, мы никогда не получим псевдослово из псевдослова, и такая итерация должна заканчиваться последовательность из n псевдословов, которые являются искомым разделом.

  • одно из слов с частотой ≤ r
  • одно из слов с частотой> r
  • затем вытащить слово из первого списка
    • , если его частота = r, то превратить его в одноэлементный раздел
    • в противном случае, извлечь слово из другого списка и использовать его для заполнения двухсловного раздела. Затем поместите второе слово обратно в первый или второй список в соответствии с его настроенной частотой.
  • Это действительно работает, если количество разделов q> n (вам просто нужно доказать это по-другому). Если вы хотите убедиться, что r является целым, и вы не можете легко найти множитель q из m st q> n , вы можете заполнить все частоты в n , поэтому f ' i = nf i , что обновляет m' = mn и устанавливает r '= m , когда q = n .

    В любом случае,

    12
    ответ дан 30 November 2019 в 09:07
    поделиться