реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> быстрый алгоритм, определения отсуствующего байта произвольного массива байтов размером
sKWO
сообщение Jun 1 2007, 10:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Нужно найти значение которого нету в списке.
Где-то пробегала мысль нащёт хэш функции, но немогу вспомнить где я ёё видел.

Сообщение отредактировал sKWO - Jun 1 2007, 10:59


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 11:30
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Совершенно непонятны условия задачи. Опишиде более подробно.

Массив отсортирован?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jun 1 2007, 11:37
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(GetSmart @ Jun 1 2007, 14:30) *
Массив отсортирован?

массив размером 255 произвольных значений.
одно значение - размер один байт!!
Не охота цыкл использовать!

Сообщение отредактировал sKWO - Jun 1 2007, 11:39


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 11:47
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Два или более одинаковых значений в массиве допускаются?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 1 2007, 11:58
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Хеш функция для поиска байта, это нечто из серии-
"Когда Чак Норрис идет сдавать кровь, он не признает шприцов, но просит дать ему пистолет и ведро. "
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 1 2007, 12:20
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(sKWO @ Jun 1 2007, 09:57) *
Нужно найти значение, которого нет в списке.
Где-то пробегала мысль насчёт хэш-функции, но не могу вспомнить, где я её видел.

Значение одно или несколько?

Для одного значения надо просто сравнить значение со всем списком. Для нескольких значений сделайте два упорядоченных списка.

Цитата(sKWO @ Jun 1 2007, 10:37) *
массив размером 255 произвольных значений.
одно значение - размер один байт!!
Не охота цикл использовать!

Ну пишите тогда линейную программу(:-)


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jun 1 2007, 12:30
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(GetSmart @ Jun 1 2007, 14:47) *
Два или более одинаковых значений в массиве допускаются?

Товарищ это применил для передачи пакетов от ПЭВМ в МК.
А вот для обратной передачи пришлось отказаться крутить циклы в МК.
Для формирования пакетов 8-битных данных и передачи по RS232.
Назначаю какой-то байт разделителем пакетов, например 0x55.
Дальше необходимо присоеденить произвольный пакет размером <= 254 байт. Но в этом
пакете могут быть байты 0x55. Поэтому их необходимо заменить каким-то
другим байтом, которого в пакете точно нет. А раз размер пакета <= 254,
то такой символ точно существует, например 0xAA.
Результирующий пакет выглядит так:
0x55, 0xAA, а дальше весь исходный пакет с замененными значениями 0x55 на 0xAA.
При приеме находим первый байт 0x55, запоминаем очередной байт 0xAA и
дальше принимаем остальные данные заменяя встретившиеся байты равные
запомненому (Для этого пакета 0xAA) на 0x55. Накладные расходы
информативности канала на такую передачу не большие и можна нормально
использовать RS232 для передачи проиозвольных 8-битных данных.

Что думаете по этому поводу? Спасибо.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 12:43
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Во время подготовки пакета к отправке из МК один раз в цикле проходите пакет и устанавливаете в 256-битном массиве (32-байтном) еденичный бит, соответствующий текущему байту в пакете. Пройдя весь пакет у вас будут установлены биты присутствующих байт. Далее первый не 0xff байт в этом массиве будет указывать на значение, которого нет в пакете.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
add
сообщение Jun 1 2007, 12:44
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Результирующий пакет выглядит так:0x55, 0xAA, а дальше весь исходный пакет с замененными значениями 0x55 на 0xAA.При приеме находим первый байт 0x55, запоминаем очередной байт 0xAA идальше принимаем остальные данные заменяя встретившиеся байты равныезапомненому (Для этого пакета 0xAA) на 0x55. Накладные расходыинформативн

Че за венегрет? а если ав пакете данные равны 0xAA? буете их менять на 0x55..? Проще добавить несколько байт в стартовую комбинацию, и распознавать ее. а пакет еще и отксорить..


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 12:46
Сообщение #10


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Можно же и 256 байт в пакете использовать. То есть 1 байт - синхронизация и 255 байт данных


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 1 2007, 12:49
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sKWO @ Jun 1 2007, 15:30) *
Что думаете по этому поводу? Спасибо.

Я думаю:
Гораздо проще продублировать управляющий символ 0x55 два раза как делается в случает с printf("i want to print backslash \\");
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 12:50
Сообщение #12


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(defunct @ Jun 1 2007, 18:49) *
Я думаю фигня это..
Гораздо проще просто продублировать управляющий символ 0x55 два раза как делается в случает с printf("i want to print backslash \\");

Дык и в пакете с данными он может два раза подряд идти. Что тогда?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
add
сообщение Jun 1 2007, 12:50
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Можно же и 256 байт в пакете использовать. То есть 1 байт - синхронизация и 255 байт данных

А как различать пакеты по байту?
Цитата
Дык и в пакете с данными он может два раза подряд идти. Что тогда?

Дык я уже говорил комбинация байт.последовательность..хоть до 20 байт если нелень перелапачивать а ксореная контрольная сумма подтвердит правильно принятый пакет.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 1 2007, 12:52
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(GetSmart @ Jun 1 2007, 15:50) *
Дык и в пакете с данными он может два раза подряд идти. Что тогда?

printf("i want to print 2 backslashes in a row \\\\");
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2007, 12:54
Сообщение #15


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(add @ Jun 1 2007, 18:50) *
Дык я уже говорил комбинация байт.последовательность..хоть до 20 байт если нелень перелапачивать а ксореная контрольная сумма подтвердит правильно принятый пакет.

А может лень. По этому алгоритму всего один байт теряется. Разве не лучше это?

Цитата(defunct)
printf("i want to print 2 backslashes in a row \\\\");

И так до бесконечности...


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 21:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016