Преобразуйте приведенную ниже грамматику в нормальную форму Хомского. Дайте все промежуточные шаги.
S -> AB | aB
A -> aab|lambda
B -> bbA
Итак, первое, что я сделал, это добавил новую начальную переменную S0
, так что теперь у меня есть
S0 -> S
S -> AB | aB
A -> aab|lambda
B -> bbA
, затем я удалил все лямбда-правила:
S0 -> S
S -> AB | aB | B
A -> aab
B -> bbA | bb
Затем я проверил для S- > S
и A- > B
типы правил, которые не существовали. И это был ответ, который я придумал, нужно ли мне что-то делать дальше или я сделал что-то не так?
Мне нужно иметь автоматически отсортированную по значениям карту в Java - чтобы она продолжала сортироваться в любое время, пока я добавляю новые пары ключ-значение или обновляю значение существующей пары ключ-значение, или даже удалить какую-либо запись.
Пожалуйста, также имейте в виду, что эта карта будет действительно большой (100 'из тысяч, или даже 10' из миллионов записей в размере).
Поэтому в основном я ищу следующую функциональность:
Предполагается, что у нас был класс «SortedStartValuesMap», который реализует вышеупомянутую функциональность и у нас есть следующий код:
SortedByValuesMap<String,Long> sorted_map = new SortedByValuesMap<String, Long>();
sorted_map.put("apples", 4);
sorted_map.put("oranges", 2);
sorted_map.put("bananas", 1);
sorted_map.put("lemons", 3);
sorted_map.put("bananas", 6);
for (String key : sorted_map.keySet()) {
System.out.println(key + ":" + sorted_map.get(key));
}
выход должен быть:
bananas:6
apples:4
lemons:3
oranges:2
В частности, что действительно важно для меня, чтобы иметь возможность получить запись с наименьшее значение в любое время - используя команду, такую как:
smallestItem = sorted_map.lastEntry();
, которая должна дать мне запись «апельсины»
EDIT: Я новичок на Java, поэтому, пожалуйста, уточните немного в ваших ответах - спасибо
EDIT2: Это может помочь: я использую это для подсчета слов (для тех, кто знаком: n-грамм в частности) в огромных текстовых файлах. Так что мне нужно построить карту, где ключи - это слова, а значения - это частоты этих слов. Однако из-за ограничений (например, ОЗУ) я хочу сохранить только X самых частых слов - но вы не можете знать заранее, которые будут наиболее частыми словами конечно. Таким путь думал, что это может работать (как приближение), чтобы начать подсчет слов, и когда карта достигает верхнего предела (как 1 мил записей), наименее частые записи будут удалены, чтобы сохранить размер карты до 1 мил всегда.