Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Ищу алгоритм удаления

3445  1 2 3 4 5 6 все
Murr патриот29.01.24 18:58
Murr
NEW 29.01.24 18:58 
в ответ AlexNek 29.01.24 18:02

если пустую бутылку

------

А если полную?

Цилиндром со времен ЕС ЭВМ называлось все находящееся по головками в текущем положении.

Ну да, чистые софтовики этого не знают - все столичной меряют... а по гермашке - ужО выпитой...

#81 
AlexNek патриот29.01.24 19:27
AlexNek
NEW 29.01.24 19:27 
в ответ Murr 29.01.24 18:58
Цилиндром со времен ЕС ЭВМ называлось все находящееся по головками в текущем положении.

Ну так тонко и намекаю, что до такого определения цилиндра можно дойти только по ужО выпитой смущ и не раз.


Но похоже все идеи по делу уже закончились. Ну ладно, будет пока неоптимальное решение.

#82 
Murr патриот29.01.24 19:31
Murr
NEW 29.01.24 19:31 
в ответ AlexNek 29.01.24 18:03

Нужно только одна со свободными блоками.

-------

как обычно - либо полная информация и нормальные решения.

либо частичная и решение частное (а-ля как нибудь)

#83 
Murr патриот29.01.24 19:35
Murr
NEW 29.01.24 19:35 
в ответ AlexNek 29.01.24 19:27

Но похоже все идеи по делу уже закончились.

----------

задачу полностью определи - может что-то добавится.

#84 
AlexNek патриот29.01.24 19:50
AlexNek
NEW 29.01.24 19:50 
в ответ Murr 29.01.24 19:31
либо полная информация и нормальные решения.

У меня такое чувство что ты забрался в раковину и никак не хочешь оттуда вылезти смущ

Только какие то постулаты. Либо только фиксированные блоки либо только таблица обо всех блоках.


Ну вот пишу я миллион записей и ничего не удаляю, на кой мне информация о занятых блоках?

Тем более, что решение было и достаточно простое, раз не запомнилось. Но всё вертелось вокруг того, что размер блоков был кратен степени двойки.

#85 
AlexNek патриот29.01.24 20:07
AlexNek
NEW 29.01.24 20:07 
в ответ Murr 29.01.24 19:35
задачу полностью определи

да не знаю что еще добавить, вроде уже всё написано.

Ну вот маленькая часть:

Есть список блоков в файле длина которых кратна степени двойки, соответственно есть начало блока Х и его длина L.

Появляется некий новый блок из того же файла с началом блока Х1 и длиной L1.

Если Х1+L1 = Х или Х+L = Х1, то блоки смежные и их можно объединить.


Ограничения: список блоков находится на диске (в памяти может не поместится), список блоков отсортирован по длине блоков.


Хочется иметь красивый алгоритм поиска смежных блоков. Что помню - это был побочный эффект организации списка блоков.

#86 
Murr патриот29.01.24 22:09
Murr
NEW 29.01.24 22:09 
в ответ AlexNek 29.01.24 20:07

вроде уже всё написано

-------

Рамазано по постам, что-то учитывается, что опущено.

надо собрать в кучку

Надо обосновать отказ от предложенных вариантов.


Появляется некий новый блок из того же файла

-=-----

Ээээ... что значит - появляется? Его выбрали произвольно, с перекрытием других блоков? Его дописали? Начало? средина? Конец? Перехлест имевшихся блоков?

То, что Ты сам,Я или кто-то еще имеет какое-то свое понимание - не важно - опиши детали.


Х1+L1 = Х или Х+L = Х1

-------

Ну так у тебя написно - проверить текущий (Х1) на "смежность" с предыдущим и следующим.


список блоков отсортирован по длине блоков.

-------

Ну и как ты собираешься искать предыдущий и следующий?

Либо сортировка по Х, либо пороход по списку с выбором пары

#87 
Murr патриот29.01.24 22:21
Murr
NEW 29.01.24 22:21 
в ответ AlexNek 29.01.24 20:07

побочный эффект организации списка

------

Списка или массива представления списка?

В первом случае у тебя только гарантия сортировки по длине, без информации об положении элементов списка.

Во втором у тебя список остается как был, но элементы можно физически упорядочить по возрастанию Х.

#88 
AlexNek патриот29.01.24 22:55
AlexNek
NEW 29.01.24 22:55 
в ответ Murr 29.01.24 22:09, Последний раз изменено 29.01.24 23:00 (AlexNek)
Его выбрали произвольно, с перекрытием других блоков? Его дописали? Начало? средина? Конец? Перехлест имевшихся блоков?

Перехлёст и перекрытие блоков абсолютно невозможно. В блоках же какая то инфа записана.

Да и вообще какая разница откуда он появляется? Если так интересно - его удалили.


не важно - опиши детали.

появляется проблема - нужно ли описывать, что земля не стоит на трёх китах?


Ну так у тебя написано

сам же просишь опиши детали, вот это и важные детали, а то опять цилиндр приплетёшь.


Ну и как ты собираешься искать предыдущий и следующий?

ну это и есть задачка....


Либо А, либо Б

Так не бывает, вполне может быть и С. Так это это чисто твое персональное мнение.

Например, считаем минимальный размер блока 16 байт, тогда все блоки в списке можно представить в двоичном виде

0  0  1  0  0  1  1   1   0    0   1    1000
0,16,32,48,64,80,96,112,128, 144,160, 176 -> адрес

Здесь 3 блока длиной 16,48 и 32 байта, по адресам 32, 80, 160

Тоже самое но без пробелов

001001110011000

добавляем теперь блок в 32 байта, по адресу 48

001111110011000

сразу видно, что с адреса 32 появился большой блок в 6*16=96 байт

#89 
AlexNek патриот29.01.24 22:59
AlexNek
NEW 29.01.24 22:59 
в ответ Murr 29.01.24 22:21
физически упорядочить по возрастанию Х.

Всё информация записана в файле, создать что то разумное еще можно, но вторичная сортировка никак невозможна.

#90 
Murr патриот29.01.24 23:33
Murr
NEW 29.01.24 23:33 
в ответ AlexNek 29.01.24 22:55

это и есть задачка

------

Не-е, это не задачка - у тебя просто нет этой информации


минимальный размер блока 16 байт

-------

256 - не хочешь из-за большой таблицы.


Здесь 3 блока длиной ... добавляем теперь блок в 32 байта, по адресу 48

------

У тебя выше блок определен как 16 байт.

32 байта блоке быть не может - используй другой термин. Пусть будет - сегмент - добавил сегмент из двух блоков.


Что у тебя должно получится в списке? Таблицу ( не список ) занятых/свободных блоков Я вижу.

Остаются три 4 ранее определенных сегмента?

Или их надо конвертирвать в два? В смысле - три - слипаются?

Сегмент удаляется целиком или произвольными блоками?

#91 
Murr патриот29.01.24 23:46
Murr
NEW 29.01.24 23:46 
в ответ AlexNek 29.01.24 22:59

вторичная сортировка никак невозможна

-------

Тогда что ты понимаешь под тем что список отсортирован?

Физически упорядоченные узлы (нах тогда список?) или логически упорядоченные ( т.е. 9 ссылается на 5 потому что 5 - описывает следующий по размеру сегмент)

Это Я к тому, что логические связки могут быть по размеру, а физический порядок - по номерам начального блока. Изменение одного не меняет второго.

#92 
Murr патриот29.01.24 23:53
Murr
NEW 29.01.24 23:53 
в ответ AlexNek 29.01.24 22:55

В блоках же какая то инфа записана.

------

Ну мне же это не мешает что-то прописать поверх... Потому и уточняю поведение системы.

#93 
AlexNek патриот30.01.24 18:00
AlexNek
NEW 30.01.24 18:00 
в ответ Murr 29.01.24 23:33
У тебя выше блок определен как 16 байт.

определен только минимальный размер блока


В смысле - три - слипаются?

А что это не естественно? Три смежных свободных сегмента можно смело пустить в дело как один.


Сегмент удаляется целиком или произвольными блоками?

Сегмент или нужен или не нужен. Но у меня есть только блоки переменной длины.

#94 
AlexNek патриот30.01.24 18:09
AlexNek
NEW 30.01.24 18:09 
в ответ Murr 29.01.24 23:46
Тогда что ты понимаешь под тем что список отсортирован? (по размеру блока)

Я могу достаточно быстро найти блок зная его размер.

Любой другой поиск не предусмотрен либо может организовываться простым перебором всех элементов.


Это Я к тому, что логические связки могут быть по размеру, а физический порядок - по номерам начального блока

Ну это уже два типа сортировки одних и тех же элементов. Которая осуществляется по мере расширения списка, а не некими дополнительными проходами.

#95 
Murr патриот31.01.24 00:57
Murr
NEW 31.01.24 00:57 
в ответ AlexNek 30.01.24 18:00

определен только минимальный размер блока

-------

Ну следующий будет 18 байт....


А что это не естественно?

--------

нет.


Три смежных свободных сегмента можно смело пустить в дело как один.

------

Вот тут ты сам себе противоречишь - либо они слипаются, либо остаются отдельными.

Ты говоришь - слипаются, но в то же время у тебя как то имеются смежные не слипшиеся.

Доопределяй.


Но у меня есть только блоки переменной длины.

-------

Т.е. имется 16 байт переменной длины.

#96 
Murr патриот31.01.24 01:07
Murr
NEW 31.01.24 01:07 
в ответ AlexNek 30.01.24 18:09

может организовываться простым перебором всех элементов.

----------

Ну это Я тебе давно сказал - либо организация, либо перебор.


Ну это уже два типа сортировки одних и тех же элементов.

-------

Аааа... ты необходимости пересортировки боишься.

Зря. Тебе предлагается один список удовлетворяющий обоим критериям одновременно.

#97 
AlexNek патриот31.01.24 17:22
AlexNek
NEW 31.01.24 17:22 
в ответ Murr 31.01.24 00:57
Ну следующий будет 18 байт....

не может быть в принципе, следующий 32.


Вот тут ты сам себе противоречишь - либо они слипаются, либо остаются отдельными.

Не вижу никакого противоречия. Есть либо занятые блоки, либо свободные.

У занятых блоков нет операции слияния. Только свободные имеют такое право.


Т.е. имется 16 байт переменной длины.

блоки могут быть переменной длины, 16 байт - абсолютно минимальный размер блока.

#98 
AlexNek патриот31.01.24 17:26
AlexNek
NEW 31.01.24 17:26 
в ответ Murr 31.01.24 01:07
ты необходимости пересортировки боишься.

лишнее время, элемент должен вставляется в список сразу на правильную позицию.


Тебе предлагается один список удовлетворяющий обоим критериям одновременно.

где?

#99 
Murr патриот01.02.24 00:48
Murr
NEW 01.02.24 00:48 
в ответ AlexNek 31.01.24 17:22

У занятых блоков нет операции слияния.

--------

добавляем теперь блок в 32 байта, по адресу 48

001111110011000

сразу видно, что с адреса 32 появился большой блок в 6*16=96 байт

Что-то меня слегка глючит...


1 2 3 4 5 6 все