Преобразование грамматики в нормальную форму Хомского?

Преобразуйте приведенную ниже грамматику в нормальную форму Хомского. Дайте все промежуточные шаги.

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 типы правил, которые не существовали. И это был ответ, который я придумал, нужно ли мне что-то делать дальше или я сделал что-то не так?

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

Мне нужно иметь автоматически отсортированную по значениям карту в 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 мил всегда.

25
задан Mechanical snail 19 September 2011 в 03:56
поделиться