Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
вразлет ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.61 MB
Время: 0.046 c
9-1123729121
Goorus
2005-08-11 06:58
2006.01.22
3DS?


14-1135478240
za Blender
2005-12-25 05:37
2006.01.22
Поддерживает ли Blender 2.40 русский язык?


3-1132813494
Ярослав
2005-11-24 09:24
2006.01.22
Удалить незаблокированные записи


1-1134663265
_white_
2005-12-15 19:14
2006.01.22
Как реализовать связи как в ERWin


2-1136528300
dreamse
2006-01-06 09:18
2006.01.22
Как обновить структуру базы данных не теряя данные ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский