хромосомы, через которые передаются по наследству признаки и свойства организмов, и т. д.
Различают основные виды информации, которые классифицируют по ее форме представления ее кодирования и хранения:
Графическая – один из древнейших видов, с которого хранили информацию об окружающем мире в виде наскальных рисунков, а затем в виде картин, фотографий, схем, чертежей на различных материалах (бумага, холст, мрамор и др.), которые изображают картины реального мира;
Звуковая (акустическая) – для хранения звуковой информации в 1877 г. было изобретено звукозаписывающее устройство, а для музыкальной информации – разработан кодирования с использованием специальных символов, который дает возможность хранить ее как графическую информацию;
Текстовая – кодирует речь человека с специальных символов – букв (для каждого народа свои); для хранения используется бумага (записи в тетради, книгопечатание и т.п.);
Числовая – кодирует количественную меру объектов и их свойств в окружающем мире с специальных символов – цифр (для каждой системы кодирования свои); особенно важной стала с развитием торговли, экономики и денежного обмена; видеоинформация хранения «живых» картин окружающего мира, который появился с изобретением кино.
Свойства информации.
Информация, как и любой объект, обладает свойствами, наиболее важными среди которых, с точки зрения информатики, являются:
Объективность. Объективная информация – существующая независимо от человеческого сознания, методов ее фиксации, чьего-либо мнения или отношения.
Достоверность. Информация, отражающая истинное положение дел, является достоверной. Недостоверная информация чаще всего приводит к неправильному пониманию или принятию неправильных решений. Устаревание информации может из достоверной информации сделать недостоверную, т.к. она уже не будет отражением истинного положения дел.
Полнота. Информация является полной, если она достаточна для понимания и принятия решений. Неполная или избыточная информация может привести к задержке принятия решения или к ошибке.
Точность информации – степень ее близости к реальному состоянию объекта, процесса, явления и т. п.
Ценность информации зависит от ее важности для принятия решения, решения задачи и дальнейшей применимости в каких-либо видах деятельности человека.
Актуальность. Только своевременность получения информации может привести к ожидаемому результату.
Понятность. Если ценную и своевременную информацию выразить непонятно, то она, скорее всего, станет бесполезной. Информация будет понятной, когда она, как минимум, выражена понятным для получателя языком.
Доступность. Информация должна соответствовать уровню восприятия получателя. Например, одни и те же вопросы по-разному излагаются в учебниках для школы и вуза.
Краткость. Информация воспринимается гораздо лучше, если она представлена не подробно и многословно, а с допустимой степенью сжатости, без лишних деталей. Краткость информации незаменима в справочниках, энциклопедиях, инструкциях. Логичность, компактность, удобная форма представления облегчает понимание и усвоение информации.
Можно поступить следующим образом: создаем multimap. Читаем слова из словаря, для каждого слова находим все супрефиксы, вставляем их в multimap в качестве ключа, значение можно ставить любое (например, (int) 1). После этого в цикле читаем слова-образцы и выводим значение count от каждого слова-образца.
Программа будет иметь примерно такую структуру: multimap<string, ...> subprefixes input n n times: input s for j = 0..size of s: if s[..j] is subprefix of s: subprefixes.insert(pair<string, ...>(s[..j], ...)) input m m times: input s print subprefixes.count(s)
Остался вопрос, как определять, является ли s[..j] супрефиксом. Конечно, можно это делать наивно: пройти циклом для всех возможных длин подстрок j и проверить, правда ли, что s[0] = s[s.size() - j - 1], s[1] = s[s.size() - j]...
Как можно ускорить всё это? 1) Выберем какое-нибудь достаточно большое (по сравнению с кодами символов) простое число x, например, x = 1009. Вычислим для строки s все хеши по формуле для n = 1..len s (это делается за линейное время относительно len s, если предпросчитать все степени x от нулевой до 50) Теперь если у строки s длины k есть супрефикс длины j, то обязательно – проверить это быстрее, чем ходить циклом. 2) Необязательно хранить в multimap-е подстроки, это дорого и по времени и по памяти. Можно хранить хеши. 3) Можно вместо одного multimap-а создать 50 multimap-ов, в каждом хранить только супрефиксы одной длины.
Получаем примерно такое: pow = new long long[51] pow[0] = 1 for i = 1..50: pow[i] = x * pow[i - 1] suprefixes = new multimap<long long, ...>[51] input n n times: input s h = hashes(s) k = len s for j = 1..k: if h[j] * pow[k - j] == h[k] - h[k - j - 1]: suprefixes[j].insert(pair(h[j], ...)) input m m times: input s print puprefixes[len s].count(hash(s))
В принципе, для такого решения multimap не нужен, достаточно иметь map, и хранить для каждого ключа количество вхождений. Это можно делать и для multimap.
Виды информации.
Информация может существовать в различных видах:
текст, рисунки, чертежи, фотографии;
световые или звуковые сигналы;
радиоволны;
электрические и нервные импульсы;
магнитные записи;
жесты и мимика;
запахи и вкусовые ощущения;
хромосомы, через которые передаются по наследству признаки и свойства организмов, и т. д.
Различают основные виды информации, которые классифицируют по ее форме представления ее кодирования и хранения:
Графическая – один из древнейших видов, с которого хранили информацию об окружающем мире в виде наскальных рисунков, а затем в виде картин, фотографий, схем, чертежей на различных материалах (бумага, холст, мрамор и др.), которые изображают картины реального мира;
Звуковая (акустическая) – для хранения звуковой информации в 1877 г. было изобретено звукозаписывающее устройство, а для музыкальной информации – разработан кодирования с использованием специальных символов, который дает возможность хранить ее как графическую информацию;
Текстовая – кодирует речь человека с специальных символов – букв (для каждого народа свои); для хранения используется бумага (записи в тетради, книгопечатание и т.п.);
Числовая – кодирует количественную меру объектов и их свойств в окружающем мире с специальных символов – цифр (для каждой системы кодирования свои); особенно важной стала с развитием торговли, экономики и денежного обмена; видеоинформация хранения «живых» картин окружающего мира, который появился с изобретением кино.
Свойства информации.
Информация, как и любой объект, обладает свойствами, наиболее важными среди которых, с точки зрения информатики, являются:
Объективность. Объективная информация – существующая независимо от человеческого сознания, методов ее фиксации, чьего-либо мнения или отношения.
Достоверность. Информация, отражающая истинное положение дел, является достоверной. Недостоверная информация чаще всего приводит к неправильному пониманию или принятию неправильных решений. Устаревание информации может из достоверной информации сделать недостоверную, т.к. она уже не будет отражением истинного положения дел.
Полнота. Информация является полной, если она достаточна для понимания и принятия решений. Неполная или избыточная информация может привести к задержке принятия решения или к ошибке.
Точность информации – степень ее близости к реальному состоянию объекта, процесса, явления и т. п.
Ценность информации зависит от ее важности для принятия решения, решения задачи и дальнейшей применимости в каких-либо видах деятельности человека.
Актуальность. Только своевременность получения информации может привести к ожидаемому результату.
Понятность. Если ценную и своевременную информацию выразить непонятно, то она, скорее всего, станет бесполезной. Информация будет понятной, когда она, как минимум, выражена понятным для получателя языком.
Доступность. Информация должна соответствовать уровню восприятия получателя. Например, одни и те же вопросы по-разному излагаются в учебниках для школы и вуза.
Краткость. Информация воспринимается гораздо лучше, если она представлена не подробно и многословно, а с допустимой степенью сжатости, без лишних деталей. Краткость информации незаменима в справочниках, энциклопедиях, инструкциях. Логичность, компактность, удобная форма представления облегчает понимание и усвоение информации.
Программа будет иметь примерно такую структуру:
multimap<string, ...> subprefixes
input n
n times:
input s
for j = 0..size of s:
if s[..j] is subprefix of s:
subprefixes.insert(pair<string, ...>(s[..j], ...))
input m
m times:
input s
print subprefixes.count(s)
Остался вопрос, как определять, является ли s[..j] супрефиксом. Конечно, можно это делать наивно: пройти циклом для всех возможных длин подстрок j и проверить, правда ли, что s[0] = s[s.size() - j - 1], s[1] = s[s.size() - j]...
Как можно ускорить всё это?
1) Выберем какое-нибудь достаточно большое (по сравнению с кодами символов) простое число x, например, x = 1009. Вычислим для строки s все хеши по формуле для n = 1..len s (это делается за линейное время относительно len s, если предпросчитать все степени x от нулевой до 50)
Теперь если у строки s длины k есть супрефикс длины j, то обязательно – проверить это быстрее, чем ходить циклом.
2) Необязательно хранить в multimap-е подстроки, это дорого и по времени и по памяти. Можно хранить хеши.
3) Можно вместо одного multimap-а создать 50 multimap-ов, в каждом хранить только супрефиксы одной длины.
Получаем примерно такое:
pow = new long long[51]
pow[0] = 1
for i = 1..50:
pow[i] = x * pow[i - 1]
suprefixes = new multimap<long long, ...>[51]
input n
n times:
input s
h = hashes(s)
k = len s
for j = 1..k:
if h[j] * pow[k - j] == h[k] - h[k - j - 1]:
suprefixes[j].insert(pair(h[j], ...))
input m
m times:
input s
print puprefixes[len s].count(hash(s))
В принципе, для такого решения multimap не нужен, достаточно иметь map, и хранить для каждого ключа количество вхождений. Это можно делать и для multimap.