Я не знаю в какой раздел написать эту задачку, так как она вообще из раздела программирования Программисты не догоняют тему, видимо привыкли только по клавишам щелкать Ищу математическую формулу Попробую обьяснить для чего это нужно Если перебирать файлы на жестком диске - это занимает много времени Если вычислять местоположения файла по моей структуре, то доступ будет мгновенным, жесткий диск не нужно будет крутить лишний раз branches - число веток max_file_count - максимальное количество файлов или папок в другой папке при создании вот такого выражения max_file_count=3 branches=2 получится вот такая структура http://s4.uploads.ru/M3Eqk.png веток можно делать неограниченное количество, структура будет такой же как происходит подсчет каждого элемента ветки Вначале я вычисляю максимальное число файлов которое уместится в этой структуре Подсчитываю вот так max_file_count в степени branches+1 т.е. в данном примере 3^2+1=27 $$3^3=27$$ теперь мне нужно вычислить в какой папке находится файл 3 и файл 15 Вычисляем папку 1 для файла 3 3 поделить на число ветвлений в степени количества веток (файл 3 поделить на branches+1 в степени branches) и округлить в большую сторону 3 поделить на 3 в степени 2 и округлить в большую сторону $$3/3^2=3/9=0,3=1$$ Вычислили первую папку она будет 1 Вычисляем папку 2 для файла 3 3 поделить на число ветвлений в степени количества веток-1 (файл 3 поделить на branches+1 в степени branches-1) и округлить в большую сторону 3 поделить на 3 в степени 1 и округлить в большую сторону $$3/3^1=3/3=1$$ Вычислили вторую папку она будет 1 Теперь мы знаем что файл 3 лежит по адресу 1/1/ Вычисляем папку 1 для файла 15 15 поделить на число ветвлений в степени количества веток (файл 15 поделить на branches+1 в степени branches) и округлить в большую сторону 15 поделить на 3 в степени 2 и округлить в большую сторону $$15/3^2=15/9=1,6=2$$ Вычислили первую папку она будет 2 Вычисляем папку 2 для файла 15 15 поделить на число ветвлений в степени количества веток-1 (файл 15 поделить на branches+1 в степени branches-1) и округлить в большую сторону 15 поделить на 3 в степени 1 и округлить в большую сторону $$15/3^1=15/3=5$$ Вычислили вторую папку она будет 5 Теперь мы знаем что файл 15 лежит по адресу 2/5/ Сравниваем полученные результаты с картинкой выше Все бы хорошо, но у меня задумка была другой Дерево должно иметь вот такой вид http://s4.uploads.ru/GYndt.png Что нужно поменять в формуле чтобы дерево вычислялось как на второй картинке? В таком случае файл 3 должен лежать по адресу 1/1/ а файл 15 по адресу 2/2/ задан 21 Сен '13 23:34 dfjdgfjgffgfff |
Если параметр max_file_count - максимальное количество файлов или папок в другой папке подразумевает оценку сверху... то есть некоторые файлы или папки по ссылке из вершины данного уровня могут быть пустыми (то есть указатель на них равен $%nil$%)... а параметр branches - число веток определён заранее... то вся нумерация файлов (в том числе пустых) имеет вид записи числа по основанию maxfilecount, в котором есть (branches+1)разрядов... Например, на Вашей картинке переведите нумерацию файлов в троичную систему счисления... отвечен 22 Сен '13 1:37 all_exist |