С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
melanu
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
#1

Выделение "слов" из последовательности бит - C++

19.02.2013, 20:52. Просмотров 700. Ответов 7
Метки нет (Все метки)

Имеется файл из вещественных чисел, я считываю его и преобразовываю в unsigned long домножив каждое вещественное число на 2^32. Затем эту последовательность целых чисел преобразовываю в битовую последовательность. И в этой битовой последовательности мне нужно выделять слова по примеру и Подсчитать количество "слов" в "словаре" :
№ бита Словарь
Бит Новое слово? Слово № слова
1 0 Да 0 (бит 1) 1
2 1 Да 1 (бит 2) 2
3 0 Нет
4 1 Да 01 (биты 3-4) 3
5 1 Нет
6 0 Да 10 (биты 5-6) 4
7 0 Нет
8 1 Нет
9 0 Да 010 (биты 7-8-9) 5
10
Всё понятно до выделения слов

Добавлено через 3 часа 11 минут
хелп
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 20:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение "слов" из последовательности бит (C++):

Создание переменной типа "чар" из последовательности бит - C++
1. Получаю 8 чисел типа int '0' или '1'.То есть, например, 00101010 2. Как получить переменную типа char, двоичное значение которой...

Даны три слова - "мама", "мыла", "раму". Задача - напечатать всевозможные варианты построения слов - C++
Я записал код, однако эту часть надо автоматизировать, поможете? КОД: } #include <iostream> using namespace std; int main()...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Посчитать сколько слов в строке начинается с буквы "т" 2. Ввести фразу. Все последовательности одинаковых символов заменить на выражение N(C) - C++
Очень нужно написать программы на C 1. Посчитать сколько слов в строке начинается с буквы "т" 2. Ввести фразу. Все последовательности...

Заменить в последовательности символов после первого вхождения символа "+" все цифры на символ "-" - C++
Заменить в последовательности символов после первого вхождения символа "+"все цифры на символ "-"О_о Добавлено через 1 минуту что бы...

Найти все вхождения в строку последовательности символов "сто" и заменить на "100" - C++
Дана строка символов. Найти все вхождений последовательностей символов "сто" и заменить на "100"

7
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
19.02.2013, 21:29 #2
Всё понятно до выделения слов
Признаться, не все.

Если речь идет о вещественных числах типа float (32 bits), рассматриваемых (cast) как unsigned long (32 bits), то "домножив" такое число на 2^32 (иными словами, сдвинув на 32 разряда влево, вы гарантированно получаете 0. Если вы умножаете его как вещественное на вещественное 2^32, то это никак не делает его целым типа unsigned long.

Остальное еще более непонятно.
0
melanu
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
20.02.2013, 08:24  [ТС] #3
Цитата Сообщение от gazlan Посмотреть сообщение
Признаться, не все.

Если речь идет о вещественных числах типа float (32 bits), рассматриваемых (cast) как unsigned long (32 bits), то "домножив" такое число на 2^32 (иными словами, сдвинув на 32 разряда влево, вы гарантированно получаете 0. Если вы умножаете его как вещественное на вещественное 2^32, то это никак не делает его целым типа unsigned long.

Остальное еще более непонятно.
Допустим у меня есть файл в котором уже хранятся целые числа unsigned long, мне надо считать их в массив и побитово выделить слова по примеру:
010110
1 слово 0
2 слово 1
3 слово 01
4 слово 10
Как выделять побитово я пока не разобралась
0
XRuZzz
Антикодер
692 / 598 / 29
Регистрация: 15.09.2012
Сообщений: 2,545
20.02.2013, 09:23 #4
какой будет результат если произвести операцию логического побитового "и" над этими числами
00000011 и 00010110
?

а так какой будет результат
00000001 и 00010110
?

Битовые операции в вики
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
20.02.2013, 12:08 #5
мне надо считать их в массив и побитово выделить слова
А можно услышать общую постановку задачи?

Сдается, вам хочется реализовать битовый вариант LZ78.

Иными словами, если вы работаете с битовым потоком, то неважно, целые там числа или какие-то еще и читать
надо побитово, а не словами.

В любом случае, вам требуются словарь и парсер. Дальше - классика: Имеем пустой словарь и пустое слово. Парсер считывает в слово очередной бит и проверяет, есть ли это слово в словаре. Если нет - заносит его в словарь, если есть - добавляет к нему бит и проверяет... Для каждого слова, словарь хранит все его префиксы.

Или можете сразу строить суффиксное дерево.

P.S.
Вероятно, ваша тема больше подходит для раздела "алгоритмы".
0
melanu
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
20.02.2013, 17:51  [ТС] #6
Цитата Сообщение от gazlan Посмотреть сообщение
А можно услышать общую постановку задачи?

Сдается, вам хочется реализовать битовый вариант LZ78.

Иными словами, если вы работаете с битовым потоком, то неважно, целые там числа или какие-то еще и читать
надо побитово, а не словами.

В любом случае, вам требуются словарь и парсер. Дальше - классика: Имеем пустой словарь и пустое слово. Парсер считывает в слово очередной бит и проверяет, есть ли это слово в словаре. Если нет - заносит его в словарь, если есть - добавляет к нему бит и проверяет... Для каждого слова, словарь хранит все его префиксы.

Или можете сразу строить суффиксное дерево.

P.S.
Вероятно, ваша тема больше подходит для раздела "алгоритмы".
Да совершенно верно, мне нужно считывать побитово и проверять есть ли такое слово в словаре, каждое новое слово записывать в счётчик и в конце вывести число слов в словаре, т.е. 0 1 10 01 101 010 и т.д.
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
20.02.2013, 18:28 #7
Ну, так а в чем проблема?

Побитовое чтение из потока? См., например, у Марка Нельсона) - автора известной книги (и/или в исходниках почти любого архиватора)

http://marknelson.us/attachments/1991/compression/bitio.h
http://marknelson.us/attachments/1991/compression/bitio.c

LZ78/LZW?

Поищите в поисковиках "The Data Compression Book", посмотрите статьи:

http://marknelson.us/1989/10/01/lzw-data-compression/
http://marknelson.us/2011/11/08/lzw-revisited/

Большая (хотя и не слишком "свежая") подборка литературы, программ и исходных кодов по сжатию:
http://www.compression.ru/download/

Можете еще посмотреть http://en.wikipedia.org/wiki/Radix_tree, но того, что выше должно хватить.
0
melanu
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 120
20.02.2013, 18:36  [ТС] #8
Цитата Сообщение от gazlan Посмотреть сообщение
Ну, так а в чем проблема?

Побитовое чтение из потока? См., например, у Марка Нельсона) - автора известной книги (и/или в исходниках почти любого архиватора)

http://marknelson.us/attachments/1991/compression/bitio.h
http://marknelson.us/attachments/1991/compression/bitio.c

LZ78/LZW?

Поищите в поисковиках "The Data Compression Book", посмотрите статьи:

http://marknelson.us/1989/10/01/lzw-data-compression/
http://marknelson.us/2011/11/08/lzw-revisited/

Большая (хотя и не слишком "свежая") подборка литературы, программ и исходных кодов по сжатию:
http://www.compression.ru/download/

Можете еще посмотреть http://en.wikipedia.org/wiki/Radix_tree, но того, что выше должно хватить.
Спасибо буду искать!
0
20.02.2013, 18:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 18:36
Привет! Вот еще темы с ответами:

Определить количество слов, которые содержат ровно четыре буквы "о", "О" - C++
Дано строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить количество слов, которые содержат ровно...

Подсчитать количество слов "KSM" и "SKS" в строке - C++
Доброго времени суток, господа. Не знаю что делать с поставленном мне задачей -- подсчитать количество слов "KSM" и "SKS" в строке char...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Заданный словарь слов. Найти в нем слова-палиндромы, то есть такие, которые одинаково читаются слева направо и наоборот, например, "АННА", "ШАЛАШ" - C++
Заданный словарь слов. Найти в нем слова-палиндромы, то есть такие, которые одинаково читаются слева направо и наоборот, например, "АННА",...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.