Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - trurl

Страницы: 1 2 3 [4] 5 6 ... 9
46
Так задача в этом и состоит, не? 

47
А в чем проблема? Итератор можно сделать в любом ЯП, только сахара будет меньше.
А причем там итератор?

48
  • Третий этап - берем самую быструю реализацию из второго этапа и пытаемся её воспроизвести на своем ЯП дословно, т.е. максимально близко к оригиналу. В идеале - буква к букве, настолько, насколько это возможно
И как вот такое переводить буква к букве?
  std::sort(block.begin(), block.end());

49
mmap противоречит ограничению по памяти (весь файл нельзя мэпнуть).
Не противоречит. Нужна ведь не память, а адресное пространство.

50
- LSR. Такой процедуры нет, но она однозначно нужна. Тоже добавил в дополнение к LSL.
А разве нельзя вместо LSR(x, n) использовать LSL(x, -n)?

51
А что, файлы предполагаются многогигабватными? Ну, можно на вторую наминацию и не претендовать. А банальный mmap+qsort трудно будет переплюнуть.

52
А мапить файлы можно?

53
Общий раздел / Re: Странные битовые операции
« : Ноябрь 29, 2016, 12:04:38 pm »
Нет,  ORD( boolean ) появился только в последних ревизиях оберона. 

54
Странное сочетание: 128 Мб и 64 бита.

55
Общий раздел / Re: Странные битовые операции
« : Ноябрь 19, 2016, 01:10:46 pm »
Помню как-то хаяли компилятор, который генерировал add 1, а не inc. Как оказалось, актуальный на то время процессор выполнял add быстрее, чем inc.

56
Это в обероне все типы модулей слепили в один, чтобы не усложнять и не думать. В реальной жизни это не годится.
В реальной жизни вообще обходятся без модулей.

57
MODULE Queens;
IMPORT Out:=StdLog, Kernel;

VAR count:INTEGER;
    board: ARRAY 32 OF INTEGER;

PROCEDURE canplace(row,col:INTEGER):BOOLEAN;
  VAR i:INTEGER;
BEGIN
  i:=1; 
  WHILE  (i < row) & (board[i] # col) & (ABS(board[i]-col) # ABS(i-row)) DO
    INC(i)
  END;
  RETURN i = row
END canplace;

PROCEDURE queen(row, n:INTEGER);
  VAR col:INTEGER;
BEGIN
  FOR col := 1 TO n DO
    IF canplace(row,col)  THEN
      board[row] := col;
      IF row = n THEN count := count + 1 ELSE queen(row+1, n)  END
    END
  END
END queen;

PROCEDURE solve(n:INTEGER);
BEGIN
  count := 0;
  queen(1,n);
END solve;

PROCEDURE Do*(N:INTEGER);
VAR  starttime, endtime:LONGINT;
BEGIN
  Out.String("Solving "); Out.Int(N); Out.String(" Queens Problem") ;Out.Ln;
  starttime := Kernel.Time();
  solve(N);
  endtime  := Kernel.Time();
  Out.Int(count); Out.String(" solutions found t ="); Out.Real((endtime-starttime)/1000); Out.Ln;
END Do;

END Queens.
Вот для BB. Для других приходится переделывать немного.

58
Ну да, по скорости. 200% - это вдвое быстрее BB, а 50% - вдвое медленнее.

59
Известная задача о ферзях и простой алгоритм.
#include <stdio.h>
#include <time.h>
 
int board[32], count;

int can_place(int row,int col) {
  int i = 1;
  while((i < row) && (board[i] != col) && (abs(board[i]-col) != abs(i-row))) ++i;
  return (i == row);
}

void queen(int row,int n) {
  int col;
  for(col=1; col<=n; ++col)  {
    if(can_place(row,col)) {
       board[row] = col;
       if(row==n) ++count; else queen(row+1, n);
    }
  }
}

void solve(int n) {
  count = 0;
  queen(1,n);
}

int main(int argc, char **argv) {
  int N;
  clock_t starttime, endtime; float runtime;
  N = 13;
  if (argc == 2) N = atoi(argv[1]);
 
  printf("Solving %d Queens Problem ... \n", N );
  starttime = clock();
  solve(N);
  endtime  = clock();
  runtime  =  (endtime-starttime)/1000.0;
  printf(" %d solutions found, t = %f \n", count, runtime );
  return 0;
}
Запускал на разных компьютерах и усреднял относительное время среднепотолочно. За попугая принято время выполнения на BlackBox.
Разные компиляторы от ETH дали сравнимые результаты: 80-90%.
Oberon-07 от akron1 - 40%.
Oxford oberon - 40%, а с выключенным JIT всего 6%.
XDS - 100%, с оптимизацией и отключением проверок - 170%.

Компиляторы С без оптимизации 50-90%, но это неинтересно.
Лучший результат у clang - 220%.
Потом идет PellesC - 200%.
GCC и старенький Watcom - по 160%.
lcc немного не дотянул - 90%.
TinyC -  50%. 

JavaScript от гугла (V8): 100%,от мозиллы: 70%, и просто для интереса, JavaScript без JIT: от 5 до 20%.
LuaJit: 75%, просто Lua 4%.

60
Когда-то давно правил этот дизассемблер для BlackBox 1.6. Так и лежит непригодившийся.

Страницы: 1 2 3 [4] 5 6 ... 9