41 Востаннє редагувалося elektryk (11.11.2014 23:34:01)

Re: Новий алгоритм

3tooth написав:

Зареєструвався, щоб прокоментувати...
Пане  elektryk, а Ви ще не публікували розв'язків Великої Теореми Ферма?

Ваш сарказм недоречний. Мені здається, що цей Ферма - москаль. І теорема його - москальська, якщо цей москалізм взагалі можна назвати теоремою. Це свого роду математичний вічний двигун. Тим більше не потрібне її доведення.

42

Re: Новий алгоритм

elektryk написав:
3tooth написав:

Зареєструвався, щоб прокоментувати...
Пане  elektryk, а Ви ще не публікували розв'язків Великої Теореми Ферма?

Ваш сарказм недоречний. Мені здається, що цей Ферма - москаль. І теорема його - москальська, якщо цей москалізм взагалі можна назвати теоремою. Це свого роду математичний вічний двигун. Тим більше не потрібне її доведення.

Той сарказм був цілком доречним. Ця тема пройшла мимо мене, але сьогодні я від душі посміявся з n!/3 і тому подібних штучок. Ну а на несаркастичний коментар ви могли б образитись.

43 Востаннє редагувалося elektryk (11.11.2014 23:47:09)

Re: Новий алгоритм

quez написав:
elektryk написав:
3tooth написав:

Зареєструвався, щоб прокоментувати...
Пане  elektryk, а Ви ще не публікували розв'язків Великої Теореми Ферма?

Ваш сарказм недоречний. Мені здається, що цей Ферма - москаль. І теорема його - москальська, якщо цей москалізм взагалі можна назвати теоремою. Це свого роду математичний вічний двигун. Тим більше не потрібне її доведення.

Той сарказм був цілком доречним. Ця тема пройшла мимо мене, але сьогодні я від душі посміявся з n!/3 і тому подібних штучок. Ну а на несаркастичний коментар ви могли б образитись.

Ось лишень заждіть. Я розміщу свій алгоритм, як тільки знайду. Подивимось, що ви тоді скажете.
А 3tooth і quez це одна особа??

44

Re: Новий алгоритм

elektryk написав:

Ось лишень заждіть. Я розміщу свій алгоритм, як тільки знайду. Подивимось, що ви тоді скажете.

Якщо він буде достойним, то скажу багато хороших слів, ось що я скажу.

45

Re: Новий алгоритм

Евріка!!! Евріка!!! Знайшов нарешті свій алгоритм. Тепер начувайтесь. Хто його просив протестувати??

46 Востаннє редагувалося elektryk (10.01.2015 23:43:32)

Re: Новий алгоритм

Ось мій скарб. Налітайте. Тестуйте.

10 'Determinant 
20 'Вычисление определителя 
30 'модифицированым аналитическим методом 
40 INPUT "n="; N: DIM Z(N) 
50 DIM C(N): DIM A(N, N): DIM P(N) 
60 DЕТ = 0: L = -1 
70 FOR I = 1 ТО N: FOR J = 1 ТО N 
80 РRINT "а ( "; I; ","; J; ")"; 
90 INPUT A(I, J): NEXT J: NEXT I 
100 FOR I = 1 ТО N 
110 P(I) = I: C(I) = 1: Z(I) = 1 
120 NEXT I: C(N) = -1: GOTO 160 
130 К = C(I) + Н 
140 SWAP Р ( K ), Р (К + 1) 
150 C(I) = C(I) + Z(I) 
160 АВ = 1: FOR J = 1 ТО N 
170 АВ = АВ * A(J, P(J)) 
180 NEXT J: L = L * -1 
190 DЕТ = DЕТ + АВ * L: I = 1 
200 Н = 0: GOTO 240 
210 Z(I) = -Z(I): C(I) = C(I) + Z(I) 
220 IF Z(1) > 0 THEN Н = Н + 1 
230 I = I + 1 
240 IF C(I) > N - I ОR C(I) = 0 THEN GOTO 210 
250 IF I < N THEN GOTO 130 
260 PRINT "det = "; DЕТ: END
Подякували: 0xDADA11C7, leofun012

47

Re: Новий алгоритм

elektryk написав:

Ось мій скарб. Налітайте. Тестуйте.

Прихований текст
10 'Determinant 
20 'Вычисление определителя 
30 'модифицированым аналитическим методом 
40 INPUT "n="; N: DIM Z(N) 
50 DIM C(N): DIM A(N, N): DIM P(N) 
60 DЕТ = 0: L = -1 
70 FOR I = 1 ТО N: FOR J = 1 ТО N 
80 РRINT "а ( "; I; ","; J; ")"; 
90 INPUT A(I, J): NEXT J: NEXT I 
100 FOR I = 1 ТО N 
110 P(I) = I: C(I) = 1: Z(I) = 1 
120 NEXT I: C(N) = -1: GOTO 160 
130 К = C(I) + Н 
140 SWAP Р ( K ), Р (К + 1) 
150 C(I) = C(I) + Z(I) 
160 АВ = 1: FOR J = 1 ТО N 
170 АВ = АВ * A(J, P(J)) 
180 NEXT J: L = L * -1 
190 DЕТ = DЕТ + АВ * L: I = 1 
200 Н = 0: GOTO 240 
210 Z(I) = -Z(I): C(I) = C(I) + Z(I) 
220 IF Z(1) > 0 THEN Н = Н + 1 
230 I = I + 1 
240 IF C(I) > N - I ОR C(I) = 0 THEN GOTO 210 
250 IF I < N THEN GOTO 130 
260 PRINT "det = "; DЕТ: END

Я не дуже розбираюсь в сортах... Який це рід бейсіка? Чим хоч відкомпілювати?

48

Re: Новий алгоритм

Не чекав такого оперативного відгука. А чому Ви не спите??
Не пам"ятаю версію бейсика. здається qbasik. Взагалі я намагався зробити програму щоб було під силу найпростішому. Гадаю, що в мене вийшло, за виключенням оператара SWAP.

49

Re: Новий алгоритм

От шматок numpy/linalg

Прихований текст
def _assertNoEmpty2d(*arrays):
    for a in arrays:
        if a.size == 0 and product(a.shape[-2:]) == 0:
            raise LinAlgError("Arrays cannot be empty")

def _assertRankAtLeast2(*arrays):
    for a in arrays:
        if len(a.shape) < 2:
            raise LinAlgError('%d-dimensional array given. Array must be '
                'at least two-dimensional' % len(a.shape))

def _assertNdSquareness(*arrays):
    for a in arrays:
        if max(a.shape[-2:]) != min(a.shape[-2:]):
            raise LinAlgError('Last 2 dimensions of the array must be square')

....

def det(a):
    a = asarray(a)
    _assertNoEmpty2d(a)
    _assertRankAtLeast2(a)
    _assertNdSquareness(a)
    t, result_t = _commonType(a)
    signature = 'D->D' if isComplexType(t) else 'd->d'
    return _umath_linalg.det(a, signature=signature).astype(result_t)

А оце кінцівка, я так розумію звідси

Прихований текст
@TYPE@_det(char **args,
npy_intp *dimensions,
npy_intp *steps,
void *NPY_UNUSED(func))
{
fortran_int m;
npy_uint8 *tmp_buff;
size_t matrix_size;
size_t pivot_size;
/* notes:
* matrix will need to be copied always, as factorization in lapack is
* made inplace
* matrix will need to be in column-major order, as expected by lapack
* code (fortran)
* always a square matrix
* need to allocate memory for both, matrix_buffer and pivot buffer
*/
INIT_OUTER_LOOP_2
m = (fortran_int) dimensions[0];
matrix_size = m*m*sizeof(@typ@);
pivot_size = m*sizeof(fortran_int);
tmp_buff = (npy_uint8 *)malloc(matrix_size + pivot_size);
if (tmp_buff)
{
LINEARIZE_DATA_t lin_data;
@typ@ sign;
@basetyp@ logdet;
/* swapped steps to get matrix in FORTRAN order */
init_linearize_data(&lin_data, m, m,
(ptrdiff_t)steps[1],
(ptrdiff_t)steps[0]);
BEGIN_OUTER_LOOP_2
linearize_@TYPE@_matrix(tmp_buff, args[0], &lin_data);
@TYPE@_slogdet_single_element(m,
(void*)tmp_buff,
(fortran_int*)(tmp_buff+matrix_size),
&sign,
&logdet);
*(@typ@ *)args[1] = @TYPE@_det_from_slogdet(sign, logdet);
END_OUTER_LOOP
free(tmp_buff);
}
}
/**end repeat**/

50

Re: Новий алгоритм

На жаль я не розумію ані строчки з ваших цитат.
На яких мовах це написано??
А ви, я так розумію, намагаєтесь звинуватити мене в плагіаті.
Ну-ну.

51

Re: Новий алгоритм

Пан майстер обфускації. Щоправда, не 80-го рівня, але теж непогано (довідково).

52

Re: Новий алгоритм

elektryk написав:

На жаль я не розумію ані строчки з ваших цитат.
На яких мовах це написано??
А ви, я так розумію, намагаєтесь звинуватити мене в плагіаті.
Ну-ну.

Перший фрагмент — на python, другий — на C.
Мова не про плагіат, а про повторне винайдення того, що вже було винайдено й десь використано.

Щодо обраного Вами BASIC — на свій час це була достатньо прогресивна навчальна мова, але в наш час ніхто на ній нічого не пише, бо читати важко. Якщо Ви використовуєте qbasic (а не gwbasic чи більш ранні діалекти), він дозволяє писати програми і в більш структурованому форматі (маю на увазі конструкції IF...END IF, DO...LOOP та ін. — краще використовувати їх, щоб уникнути GOTO й підвищити читабельність коду). Хоча для опису алгоритму (щоб його могли прочитати інші) можна обійтися й псевдокодом (тобто, узагальненою алгоритмічною мовою, призначеною не для обробки транслятором, а для читання людиною).

53

Re: Новий алгоритм

koala написав:

Пан майстер обфускації. Щоправда, не 80-го рівня, але теж непогано (довідково).

Як казав один кіногерой: "В маём доме папрашу не выражацца".

54

Re: Новий алгоритм

elektryk написав:

Ось мій скарб. Налітайте. Тестуйте.

Ви самі тестували його на великих матрицях? Хоча б n=50?

55

Re: Новий алгоритм

Ні, не тестував. Коли я його створював, то в мене була айбіемка з частотою 25 Мгц. Я боявся, що вона не справиться.

56

Re: Новий алгоритм

elektryk написав:

Ні, не тестував. Коли я його створював, то в мене була айбіемка з частотою 25 Мгц. Я боявся, що вона не справиться.

Від частоти тільки час виконання проги залежить, вона могла б не "справиться" якщо в неї не вистачило б ОЗП.

57 Востаннє редагувалося elektryk (12.01.2015 00:40:22)

Re: Новий алгоритм

Я розуію, але дві доби мене не влаштовувало.  Крім того в мене не було прикладу. Ну видасть програма якесь число. І що?? Як перевірити??
А взагалі легковажно я віднісся. Треба було хоча б спробувати.

58

Re: Новий алгоритм

то хто вийграв?

59

Re: Новий алгоритм

elektryk написав:

Я розуію, але дві доби мене не влаштовувало.  Крім того в мене не було прикладу. Ну видасть програма якесь число. І що?? Як переовірити??
А взагалі легковажно я віднісся. Треба було хоча б спробувати.

На папері перевіряти =) Не подумайте, що я Вас тролю, я до Вас з більшою повагою ставлюсь ніж до tim'а і його старшого помічника Сергія Чікурова, бо на відміну від них Ви хоч якийсь код виклали, і вже можете претендувати на звання програміста.

60 Востаннє редагувалося elektryk (12.01.2015 00:57:54)

Re: Новий алгоритм

Справа не в коді як такому. Справа в алгоритмі. Зверніть увагу, що немає обрахунку кількості інверсій та немає піднесення до ступеня, який являється цим числом інверсій. Я їх скоротив і таким чинов втричі скоротив час. Це я перевіряв з секундоміром.

Я не скажу, яким чинов відбувається поділ доданків на від"ємні та додатні.