Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизМатематический алгоритм... или ??? Найти похожие ветки
← →
ЮРИЙ_К (2003-09-12 13:34) [0]Кто может подсказать алгоритм занесения, к примеру, в базу числа по следующим требованиям:
Есть 5 чисел 1, 2, 3, 4, 5, которые могут быть выбраны. Но в базу нужно занести только одно число, говорящее о том, что и какие числа именно выбраны. К примеру я выбрал числа 1 и 3. В базу заношу число 4. Но мне нужно точно знать, какие именно числа выбраны, ведь это может быть и 4 и так-же 1+3. Как поступить в такой ситуации?
← →
Юрий Федоров (2003-09-12 13:38) [1]Используй биты
10100 - означает, что выбраны 1 и 3 (например)
← →
Sandman25 (2003-09-12 13:39) [2]Или 13.
← →
[lamer]Barmaglot (2003-09-12 13:43) [3]Обычно кодируют. Например 2^n. то есть первое число 1, второе 2, третее 4 и т.д. В итоге если у тебя число 5. то понятно, что оно содержит 4 и 1...
← →
Sandman25 (2003-09-12 13:46) [4][3] [lamer]Barmaglot © (12.09.03 13:43)
Это и есть метод из поста [1] Юрий Федоров © (12.09.03 13:38).
Только биты в другом порядке.
← →
[lamer]Barmaglot (2003-09-12 13:50) [5]Я и не спорю... Просто набивал долго :-). Кстати почему в другом порядке? Помоему также как и у него. Просто я объяснил принцип, который можно понять даже на бумаге. С битами сложнее - хотя каждому своё...
← →
pasha_676 (2003-09-12 13:57) [6]
> С битами сложнее - хотя каждому своё...
Имхо - с битами все на порядок проще. Сравни
> 10100 - означает, что выбраны 1 и 3 (например)
Или
> Обычно кодируют. Например 2^n. то есть первое число 1, второе
> 2, третее 4 и т.д. В итоге если у тебя число 5. то понятно,
> что оно содержит 4 и 1...
В твое утверждение надо долго вникать. Не говоря уже о страшном слове "кодируют", в то время как в первом случае "выставляют бит"
← →
ЮРИЙ_К (2003-09-12 13:58) [7]>> [lamer]Barmaglot
>>Обычно кодируют. Например 2^n. то есть первое число 1, второе >>2, третее 4 и т.д. В итоге если у тебя число 5. то понятно, что >>оно содержит 4 и 1...
А вот и не понятно, а может это 2 и 3?
← →
Verg (2003-09-12 14:08) [8]Ну вот конкретно -
Есть 32-х битное число N, там битики, у них номер от 0 до 31 (или от 1 до 32, как кому нравится).
Предположим, что выбор происходит из чисел от 0 до 31.
Тогда в этом числе N установим в 1 тот бит, номер которого равен выбранному.
Т.о., чило 1-ных бит в N будет равно количеству выбранных чисел, а порядковые номера этих 1-чек - собственно числам.
Ограничение:
нельзя выбрать два и более одинаковых числа.
← →
[lamer]Barmaglot (2003-09-12 14:22) [9]to ЮРИЙ_К
Да нет все понятно . Особенно для тех кто когда-нибудь рисовал спрайты :-). Просто я объясняю так, как мне лично, было-бы легче понять.
Конкретнее на ваш вопрос :-). Декодирование идет следующим образом сначала вычитается наибольшее число из возможного, то есть из 5 вычитают 4. Из остатка наибольшее число из возможного и т.д. Пока число не обратится в ноль. Степени числа 2 и дают номера выбранных слотов. :-).
← →
pasha_676 (2003-09-12 14:30) [10]
> Декодирование идет следующим образом сначала вычитается
> наибольшее число из возможного, то есть из 5 вычитают 4.
> Из остатка наибольшее число из возможного и т.д. Пока число
> не обратится в ноль. Степени числа 2 и дают номера выбранных
> слотов. :-).
ты это, как его... Давай через биты лучше. Там проще и никаких вычитаний не надо. Сравнил если второй бит установлен - то одно число, если третий - то другое...
← →
[lamer]Barmaglot (2003-09-12 14:34) [11]Биты ещё знать надо :-). А то, что я написал - это математика 3-го класса. Знают все (я надеюсь). Хотя для реализации на компьютере Биты действительно намного проще и быстрее.
← →
pasha_676 (2003-09-12 14:51) [12]
> :-). А то, что я написал - это математика 3-го класса.
Я чуть рак мозга не заработал пытаясь в такой математике разобраться :). На редкость все запутано. Биты проще и для понимания и для реализации. Ну а если программер не знает что есть биты и как с ними манипулировать - то ему надо учиться. Все в сад, в сад.... ну или хотя бы к Юрию Зотову на сайт.
← →
[lamer]Barmaglot (2003-09-12 14:58) [13]Я же не спорю, что для реализации на компьютере проще биты. Но он же попросил МАТЕМАТИЧЕСКИЙ АЛГОРИТМ, вот я его ему и предоставил...
← →
ЮРИЙ_К (2003-09-12 15:47) [14]>> Да мне без разницы какой алгоритм, лиж-бы работало так как нуно 8-). А математический назвал - потому, как нужно же было заглавие для темы придумать ;-)
← →
ЮРИЙ_К (2003-09-15 08:45) [15]>> [lamer]Barmaglot
>> pasha_676
А нельзя-ли конкретно примерец кинуть, как через биты это реализовать, нк никогда не сталкивался с этим. Знать что такое биты - это одно, а реализовать их применение к конкретному вопросу - другое. Не все-же выросли вундеркиндами ;-). Для чего тогда нужен этот форум?
← →
[lamer]Barmaglot (2003-09-15 12:04) [16]Например так...
procedure TForm1.Button1Click(Sender: TObject);
const
d: array[0..4] of Boolean=(false,false,true,false,true);
var
i, k: Integer;
begin
i:=0;
For k:=0 to 4 do
begin
if d[k]=true then i:=(i shl 1) or 1 else i:=(i shl 1) or 0;
end;
Edit1.Text:=inttostr(i);
end;
Это для одирования, для декодирования используется shr...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c