Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

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

 
вразлет ©   (2005-12-28 12:47) [40]

Витёк

А что платишь?


 
Витёк   (2005-12-28 12:54) [41]

The_scorpion, спасибо!


 
ferr ©   (2005-12-28 12:56) [42]

The_scorpion ©   (28.12.05 11:31) [32]

1 байт под одно число по меньшей мере не выгодно, а ещё и медленно.

использовать строки тоже не гуд, они должны быть константными) © C#


 
The_scorpion ©   (2005-12-28 13:05) [43]

1 байт под одно число по меньшей мере не выгодно, а ещё и медленно.
Это выгодно в плане простоты и понимания, по скорости проигрыша нет, в памяти проигрыша тоже нет(256 байт это ОЧЕНЬ мало).
ИМХО: Алгоритм очень хорош


 
ferr ©   (2005-12-28 13:09) [44]

The_scorpion ©   (28.12.05 13:05) [43]
1) log(10,2) / 8 ~= 41 %.
2) быстрее всего процессор работает с машинным словом.


 
The_scorpion ©   (2005-12-28 13:09) [45]


> Спасибо за развернутый ответ. Вы говорили о ТП или все-таки
> о Дельфи? Чем вам те же динамические массивы не угодили?
>  Например.

Можно и с ними...но со стрингами красивее будет...
ИМХО: Дело вкуса..:)))


 
The_scorpion ©   (2005-12-28 13:12) [46]


> 1) log(10,2) / 8 ~= 41 %.

а это ты откуда взял?

> 2) быстрее всего процессор работает с машинным словом.

Ты думаешь много времени уйдет на изменение регистра кода на единицу?
К разрядам быстрее доступ будет


 
Kerk ©   (2005-12-28 13:14) [47]

The_scorpion ©   (28.12.05 13:12) [46]
> 1) log(10,2) / 8 ~= 41 %.

а это ты откуда взял?


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


 
ferr ©   (2005-12-28 13:15) [48]


> а это ты откуда взял?


1 байтом код-ся 10 различных значений


 
palva ©   (2005-12-28 13:24) [49]

Если нужен результат...

use Math::BigInt;
$x = Math::BigInt->new(1);
for($i=1; $i<=100; $i++) {
 $x = $x->bmul($i);
}
print $x;

93326215443944152681699238856266700490715968264381
62146859296389521759999322991560894146397615651828
62536979208272237582511852109168640000000000000000
00000000


 
The_scorpion ©   (2005-12-28 13:33) [50]


> Ну как бы неплохо мат.часть почитывать прежде чем на олимпиады
> ходить.
> Хотя, если ограничений по времени нет, то твой код сойдет.
>

Так почитываю, иногда...:)))не понимаю откуда вы взяли это число 10,2...
Еще раз повторюсь, проигрыша по времени не будет. Советую почитывать ассемблер...:)))

> 1 байтом код-ся 10 различных значений

Это плохо?


 
ferr ©   (2005-12-28 13:36) [51]


> не понимаю откуда вы взяли это число 10,2...

забавно. ln(10)/ln(2).


> Это плохо?

это 41%


 
Kerk ©   (2005-12-28 13:38) [52]

The_scorpion ©   (28.12.05 13:33) [50]
Еще раз повторюсь, проигрыша по времени не будет.


Будет.


 
Думкин ©   (2005-12-28 13:39) [53]

> The_scorpion ©   (28.12.05 13:33) [50]

2 isn"t fractional part but it"s a base of log.


 
The_scorpion ©   (2005-12-28 13:39) [54]


> Kerk ©   (28.12.05 13:14) [47]

Предлагаю вам написать этот алгоритм своим способом и мы сравним их по трем параметром:1) читабельность кода 2) скорость работы 3) затрачиваемые ресурсы.
ИМХО: не люблю оторванных от реальности теоретиков...:)))


 
The_scorpion ©   (2005-12-28 13:40) [55]


> ferr ©

Вам тоже...:)))


 
Kerk ©   (2005-12-28 13:41) [56]

The_scorpion ©   (28.12.05 13:39) [54]
Предлагаю вам написать этот алгоритм своим способом и мы сравним их по трем параметром


Мой код в [31]. Не самый оптимальный, но лучше твоего. Только ты сравнивай на больших числах. 100 разрядов - не серьезно.

> не люблю оторванных от реальности теоретиков...:)))

Это ты мне? LOL


 
The_scorpion ©   (2005-12-28 13:44) [57]

Давай на больших... выкладывай, оценим...:)))


 
Kerk ©   (2005-12-28 13:47) [58]

123^7890 = [16490 десятичных знаков]
потрачено 265 мс


 
palva ©   (2005-12-28 13:56) [59]

123^7890 на перле 25 сек (700 Мгц)


 
The_scorpion ©   (2005-12-28 14:05) [60]

1000 операции сложения в каждой  около 200 разрядах на моем Celeron 2,4 ггц получаем : Мой Алгоритм 266 мс , ваш чуть меньше 1 сек, комментарии излишни.
ИМХО тему можно закрыть.


 
Kerk ©   (2005-12-28 14:09) [61]

The_scorpion ©   (28.12.05 14:05) [60]
1000 операции сложения в каждой  около 200 разрядах на моем Celeron 2,4 ггц получаем : Мой Алгоритм 266 мс , ваш чуть меньше 1 сек, комментарии излишни.


В [58] и [59] указаны конкретные числа и результаты. У тебя что-то все "около". К чему бы это... :))


 
Kerk ©   (2005-12-28 14:11) [62]

Тестовый пример 123^7890
Реализовал бы быстренько умножение через свое сложение, а затем и возведение в степень. Оно ведь не долго.


 
The_scorpion ©   (2005-12-28 14:18) [63]


> Тестовый пример 123^7890
> Реализовал бы быстренько умножение через свое сложение,
> а затем и возведение в степень. Оно ведь не долго.

Реализую вечеро, а то зачет горит...:)))

> В [58] и [59] указаны конкретные числа и результаты. У тебя
> что-то все "около". К чему бы это... :))

К тому, что я умею ПРАВИЛЬНО тестировать...и использовал random, а его сложно предсказать(хотя и возможно).
ИМХО: если ваш алгорит слабее по скорости, то надо это просто признать, это было бы красивее и честнее.


 
ferr ©   (2005-12-28 14:24) [64]

чего стоит хотя бы вот эта строчка

for i:=1 to dlin-dlin2 do
str:="0"+str;


 
Kerk ©   (2005-12-28 14:28) [65]

ferr ©   (28.12.05 14:24) [64]

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


 
ferr ©   (2005-12-28 14:41) [66]

вот вам и тест:

program Project2;

{$APPTYPE CONSOLE}

 uses  Windows;

const
 Max = 100000;

var
 str1, str2 : string;

var
 i1,i2 : int64;
 i : integer;
begin

 QueryPerformanceCounter(i1);
 for i:=1 to Max do
   str1:="0"+str1;
 QueryPerformanceCounter(i2);

 writeln(i2-i1);

 QueryPerformanceCounter(i1);
 SetLength(str2, Max);
 for i:=1 to Max do
   str2[i]:="0";
 QueryPerformanceCounter(i2);

 writeln(i2-i1);

 readln;
end.


 
Sha ©   (2005-12-28 15:56) [67]

> The_scorpion ©
> Kerk ©

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


 
Kerk ©   (2005-12-28 17:03) [68]

Sha ©   (28.12.05 15:56) [67]

Согласен. Честно говоря, мне тогда было просто лень это реализовывать. :)


 
The_scorpion ©   (2005-12-28 19:10) [69]


> чего стоит хотя бы вот эта строчка
>
> for i:=1 to dlin-dlin2 do
> str:="0"+str;

Что вам не нравится?


> Sha ©   (28.12.05 15:56) [67]

А кто спорит?
Только перевод из десятичные в двоичную займет еще минут 20-30, на олимпиадах это смертельное время.


 
ferr ©   (2005-12-28 19:57) [70]


> Что вам не нравится?

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


 
Sha ©   (2005-12-28 20:03) [71]

> The_scorpion ©   (28.12.05 19:10) [69]
> перевод из десятичные в двоичную займет еще минут 20-30,
> на олимпиадах это смертельное время

А где написано, что ответ должен быть в десятичной системе?
Для больших чисел это обычно не требуется :)

Вот тебе "олимпиадный" вариант:

function MulString(const t, s: string): string;
var
 i, j, j1, j2, lent, lens, len, sum: integer;
begin;
 lent:=Length(t);
 lens:=Length(s);
 len:=lent+lens;
 SetLength(Result,len);
 sum:=0;
 for i:=1 to len do begin;
   j1:=i+1-lens; if j1<=0 then j1:=1;
   j2:=i; if j2>lent then j2:=lent;
   for j:=j1 to j2 do sum:=sum+(ord(t[j])-ord("0"))*(ord(s[i+1-j])-ord("0"));
   Result[i]:=chr(sum mod 10 + ord("0"));
   sum:=sum div 10;
   end;
 while (len>1) and (Result[len]="0") do dec(len);
 SetLength(Result,len);
 end;

procedure DecString(var s: string);
var
 i: integer;
begin;
 for i:=1 to Length(s) do begin;
   if s[i]>"0" then begin;
     if (s[i]="1") and (i>1) and (i=Length(s))
     then SetLength(s,i-1)
     else dec(s[i]);
     break;
     end;
   s[i]:="9";
   end;
 end;

function Factorial(n: cardinal): string;
var
 s: string;
begin;
 s:=ReverseString(IntToStr(n));
 Result:="1";
 while (s[1]<>"0") or (Length(s)>1) do begin;
   Result:=MulString(Result,s);
   DecString(s);
   end;
 Result:=ReverseString(Result);
 end;


 
The_scorpion ©   (2005-12-28 20:22) [72]


> учите матчасть. серьёзно. я даже код привёл, осталось запустить.

Хорошо:
dlin:=dlin-dlin2;
for i:=1 to dlin do
теперь все ok

> А где написано, что ответ должен быть в десятичной системе?
>
> Для больших чисел это обычно не требуется :)

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


 
Sha ©   (2005-12-28 20:38) [73]

> The_scorpion ©   (28.12.05 20:22) [72]
> А кому нужны двоичные числа? Их только программисты и понимают...

Есть еще кое-кто. Вернее, кое-что. Вот ему они и нужны в первую очередь.

Для справки. Число 100! записывается при помощи 159 десятичных знаков.
Не уверен, что ты его сможешь прочесть :)
А уж понять...


 
Kerk ©   (2005-12-29 00:09) [74]

The_scorpion ©   (28.12.05 20:22) [72]
теперь все ok


Нет


 
Marser ©   (2005-12-29 00:45) [75]


> Для справки. Число 100! записывается при помощи 159 десятичных
> знаков.
> Не уверен, что ты его сможешь прочесть :)
> А уж понять...

... поэтому выводы о правильности работы конкурсной программы будут составляться случайным образом :-))


 
марсианин ©   (2005-12-29 01:31) [76]


> [49] palva ©   (28.12.05 13:24)
> Если нужен результат...
>
> use Math::BigInt;
> $x = Math::BigInt->new(1);
> for($i=1; $i<=100; $i++) {
>  $x = $x->bmul($i);
> }
> print $x;

тоже самое на питоне :)

result = 1L
for i in range (1L,100L):
   result = result*i;

print result


 
vidiv ©   (2005-12-29 06:59) [77]

на php
$s = "1";
for ($i=1;$i<=10000;$i++)
$s=bcmul($s, $i);
echo "(".strlen($s).") ".$s;

10000! составляет 35660 знаков :)


 
The_scorpion ©   (2005-12-29 08:13) [78]


> Не уверен, что ты его сможешь прочесть :)
> А уж понять...

Мои возможности в понимание всего непонятного очень высоки...:)))

> Kerk ©   (29.12.05 00:09) [74]
> The_scorpion ©   (28.12.05 20:22) [72]
> теперь все ok
>
> Нет

БУ..:))))))))))))))))


 
The_scorpion ©   (2005-12-29 08:16) [79]


> Вот тебе "олимпиадный" вариант:

На олимпиадах понятие о процедурном и модульном программирование практически отсутствует...


 
Kerk ©   (2005-12-29 11:18) [80]

Все ясно. Очередной пионер. А начинал неплохо.



Страницы: 1 2 3 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.044 c
1-1134713613
Дмитрий_177
2005-12-16 09:13
2006.01.22
Проблема с созданием елементов в Notebook


2-1136561798
Dot
2006-01-06 18:36
2006.01.22
найти и удалить текст


4-1131719853
clickmaker
2005-11-11 17:37
2006.01.22
Отключение сообщение об установке неподписанного драйвера


2-1135880390
ezorcist
2005-12-29 21:19
2006.01.22
Как завершить работу компа?


14-1135688727
Ale_x_ey
2005-12-27 16:05
2006.01.22
Виртуальная машина