Mar 25, 2012 12:04
Говоря о преобразовании, нельзя не обсудить такую вещь, как потоковые структуры данных (ПСД). Что это такое?
ПСД представляют собой потенциально бесконечные последовательности однородных данных. Под однородными понимаются данные (элементы ПСД), которые обладают одинаковым набором свойств и могут быть обработаны единым алгоритмом. В естественных языках мы имеем дело именно с однородными данными (иначе было бы уж очень тяжело воспринимать информацию).
Основными свойствами ПСД являются:
1. Однородность элементов (из определения).
2. Последовательный доступ - элементы упорядочены (из определения).
3. Единовременный доступ только к одному элементу.
4. Чтение ПСД только в одном направлении (без возвратов).
5. Потенциальная бесконечность (из определения).
Простейшим примером ПСД может служить текст, который вы не видите целиком, а, например, слышите по телефону (устная речь). Однородными элементами в нём являются фонемы; вы их воспринимаете последовательно; ваш мозг их обрабатывает по очереди; вы их обрабатываете в порядке поступления и никак не наоборот; вы не знаете, когда собеседник закончит говорить :)
Таким образом, ПСД представляют собой удобную модель для описания структур естественного языка. Хорошим примером ПСД может служить интерфейс IEnumerable из библиотеки классов .NET.
Преобразование заключается в построении результирующей ПСД по входной ПСД. Эффективное преобразование умеет выдавать частичный результат (до прочтения всей входной ПСД). К примеру, вы начинаете осознавать смысл телефонного текста ещё до того, как прослушаете его весь :) Существуют некоторые блоки текста, которые могут быть осознаны самостоятельно, без необходимости обращения к последующему тексту. Это крайне актуально, учитывая то, что входная ПСД может никогда не закончиться.
Доступ к единственному элементу и отсутствие возможности возврата обуславливают специфику реализации преобразователей - они должны кэшировать столько входных элементов, сколько их потребуется для построения частичного результата.
ИИ