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

 
 
> Нахождение последней записи, Помогите придумать надежный алгоритм
paskal
сообщение Jan 20 2009, 18:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Есть флеш память некоторого объема, куда последовательно одну за другой записываем страницы. Это значит что при каждой записи адрес увеличивается на размер страницы, а дойдя до конца памяти, адрес циклически возвращается к 0. Т.е. старые записи закрываются новыми. Для нахождения последней записи мы нумеруем их, и номер записываем вместе со страницей. Номеров больше чем страниц (например страниц 128, нумерация от 0 до 255). Естественно что и номера тоже циклически возвращаются к 0. При включении устройства мы просматриваем все страницы, и по номеру должны найти ту которая была записана последней.
Вопрос: какой алгоритм выбрать для нахождения последней записи? Задача осложнена тем, что устройство работает в условии помех и сбоев и существуют ошибочные номера. Алгоритм нужен такой чтоб если какая то страница один раз выбрана последней, потом после некоторой работы, включения-выключения, не могла бы выбраться более раняя запись.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ssvSerge
сообщение Jan 28 2009, 18:13
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 22-01-09
Пользователь №: 43 819



Цитата(paskal @ Jan 20 2009, 21:55) *
при каждой записи адрес увеличивается на размер страницы, а дойдя до конца памяти, адрес циклически возвращается к 0.
Для нахождения последней записи мы нумеруем их, и номер записываем вместе со страницей.

А вам необходимо нумеровать и записи и страницы?
Или это лишь предложенное решение задачи?

Мне представяется, что можно обойтись "бегущей единицей" всего лишь.
Эталоном будет первый блок.
Если в нем записана "1", то это значит, что надо пропускать последовательно
все блоки вплоть до первого встреченного нуля.

При зацикливании первый блок должен быть перетерт и флаг должен
измениться на противоположный (с "1" на "0"). После этого будет
"бегущий ноль".

Ничего не будет работать в том случае, если вам надо писать
в случайные блоки (что противоречит условию).
Достоинством метода будет возможность бинарного поиска в массиве,
а не последовательное вычитывание данных для нахождения
"хвоста".

А что касается ошибки записи, то битый блок должен быть такого же
типа, как и блок последующий в памяти.

Сергей.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 22:29
Рейтинг@Mail.ru


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