Jdi na navigaci předmětu

3. Porovnání (Definitnost matic)

Porovnání jednotlivých řešení po tvrdém deadline druhého úkolu.

using CSV, DataFrames
"""

    record_rank!(data_frame, column)

Pomocná hodnotící funkce přidělující body do sloupce `score` tabulky
`data_frame` podle pořadí ve sloupci `column` (seřazeném).

"""
function record_rank!(data_frame::DataFrame, column::Symbol)
    rank = 1
    value = first(data_frame[!, column])

    for row in eachrow(data_frame)
        if ismissing(row[column])
            row[:score] += 42
            continue
        elseif ismissing(value)
            value = row[column]
        elseif row[column] != value
            value = row[column]
            rank += 1
        end

        row[:score] += rank
    end
end;

Načtení dat, smazání username a přidání "skórovacího" sloupce a výpis základních statistik datasetu.

df = CSV.read("benchmark03.csv", DataFrame)
df[!, "score"] .= 0
select!(df, Not(:username))
describe(df)
12×7 DataFrame
Rowvariablemeanminmedianmaxnmissingeltype
SymbolUnion…AnyUnion…AnyInt64Type
1nickAeloria of the Seven Sigilskalvotom0String
2rat_correct0.403846false0.0true0Bool
3ispd_f64_t5.82276e53780.44312039.06.19825e611Union{Missing, Float64}
4ispd_f64_m1.20761e6112197456.03710728811Union{Missing, Int64}
5ispsd_f64_t5.69018e53826.113.12424e56.96396e611Union{Missing, Float64}
6ispsd_f64_m1.07848e6240197456.03710728811Union{Missing, Int64}
7isid_f64_t6.9111e54.479334853.06.00203e611Union{Missing, Float64}
8isid_f64_m1.36837e60197456.03710728811Union{Missing, Int64}
9ispd_hilbert_t3.3958e6252818.02.06826e68.61048e632Union{Missing, Float64}
10ispd_hilbert_m4.45451e64463442.63175e6994790432Union{Missing, Int64}
11ispd_hilbert_c0.384615false0.0true0Bool
12score0.000.000Int64

Dále mezi hodnocené zařazuji i své odevzdání (nick kalvotom), kód vygenerovaný pomocí ChatGPT (nick chatgpt).

Správnost v exaktní aritmetice

Správnost na malé matici s velmi malými racionálními vlastními čísly. Přístupy založené na vlastních číslech počítaných numerickým algoritmem ve strojových číslech zde selžou.

sort!(df, :rat_correct, rev=true)
record_rank!(df, :rat_correct)
show(df[!,[:nick, :rat_correct, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               rat_correct  score 
      String                             Bool         Int64 
─────┼───────────────────────────────────────────────────────
   1 │ kalvotom                                  true      1
   2 │ Morvain Duskwalker                        true      1
   3 │ Eldaric Runehand                          true      1
   4 │ Lyssara Moonveil                          true      1
   5 │ Korvath the Obsidian                      true      1
   6 │ Mirelda Starbloom                         true      1
   7 │ Zerathorn the Pale                        true      1
   8 │ Vyrion the Eternal                        true      1
   9 │ Maerilith Stormweaver                     true      1
  10 │ Sareth the Verdant                        true      1
  11 │ Lunara Dreambinder                        true      1
  12 │ Rhovar Mistborn                           true      1
  13 │ Talmek the Shattered                      true      1
  14 │ Vessryn Bloodsong                         true      1
  15 │ Eldwyn of the Shimmering Vale             true      1
  16 │ Ivenar Spellforge                         true      1
  17 │ Selvethra of the Whispering Woods         true      1
  18 │ Althira Starweaver                        true      1
  19 │ Valtheris of the Amber Flame              true      1
  20 │ Gorvath Ironchant                         true      1
  21 │ Xandor the Arcane                         true      1
  22 │ chatgpt                                  false      2
  23 │ Aldorin the Luminous                     false      2
  24 │ Seraphyne Windwhisper                    false      2
  25 │ Thamior Embercloak                       false      2
  26 │ Velindra the Azure                       false      2
  27 │ Thalendir Brightflame                    false      2
  28 │ Orlien Silverchant                       false      2
  29 │ Faelora Nightbloom                       false      2
  30 │ Galdur the Wise                          false      2
  31 │ Elithar Dawnseeker                       false      2
  32 │ Caelwyn of the Crystal Spire             false      2
  33 │ Tirvian Shadowmantle                     false      2
  34 │ Erenwyn the Whispering                   false      2
  35 │ Orren Emberforge                         false      2
  36 │ Korthen Deepflame                        false      2
  37 │ Aeloria of the Seven Sigils              false      2
  38 │ Dravok the Gloomed                       false      2
  39 │ Velmaris Lightbinder                     false      2
  40 │ Nimriel the Golden                       false      2
  41 │ Sylthara the Veiled                      false      2
  42 │ Ilyrien Dawnpetal                        false      2
  43 │ Maranelle Frostpetal                     false      2
  44 │ Zytherin the Forgotten                   false      2
  45 │ Cyralis Moonbinder                       false      2
  46 │ Thauren the Wandering                    false      2
  47 │ Kerron the Unseen                        false      2
  48 │ Dromek the Bound                         false      2
  49 │ Nysera Cloudveil                         false      2
  50 │ Bramor the Tempest                       false      2
  51 │ Talvorn Runebreaker                      false      2
  52 │ Yseline Frostwhisper                     false      2

Větší (100×100100 \times 100) matice s Float64 prvky

Časová a paměťová náročnost výpočtu na matici s prvky strojov7mi čísly. Případ PD.

sort!(df, :ispd_f64_t)
df[!, :ispd_f64_t] /= df[1, :ispd_f64_t]
record_rank!(df, :ispd_f64_t)
show(df[!,[:nick, :ispd_f64_t, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispd_f64_t     score 
      String                             Float64?       Int64 
─────┼─────────────────────────────────────────────────────────
   1 │ Xandor the Arcane                        1.0          2
   2 │ Eldaric Runehand                         2.15424      3
   3 │ Vessryn Bloodsong                        3.28885      4
   4 │ Thauren the Wandering                    8.14931      6
   5 │ Aeloria of the Seven Sigils              9.26769      7
   6 │ Orlien Silverchant                      48.6258       8
   7 │ Korvath the Obsidian                    50.6824       8
   8 │ Yseline Frostwhisper                    71.0173      10
   9 │ Sylthara the Veiled                     72.0135      11
  10 │ Bramor the Tempest                      75.8779      12
  11 │ Talvorn Runebreaker                     75.9072      13
  12 │ Gorvath Ironchant                       76.8836      13
  13 │ Rhovar Mistborn                         77.0489      14
  14 │ Cyralis Moonbinder                      77.2848      16
  15 │ Eldwyn of the Shimmering Vale           78.007       16
  16 │ Selvethra of the Whispering Woods       78.2601      17
  17 │ Lyssara Moonveil                        80.4891      18
  18 │ Galdur the Wise                         80.5157      20
  19 │ Caelwyn of the Crystal Spire            81.112       21
  20 │ Kerron the Unseen                       82.2685      22
  21 │ Maerilith Stormweaver                   82.5403      22
  22 │ Zerathorn the Pale                      82.731       23
  23 │ Ivenar Spellforge                       83.2556      24
  24 │ Maranelle Frostpetal                    83.8362      26
  25 │ Korthen Deepflame                       85.172       27
  26 │ Elithar Dawnseeker                      85.2143      28
  27 │ Faelora Nightbloom                      88.0793      29
  28 │ Dravok the Gloomed                      88.4487      30
  29 │ Valtheris of the Amber Flame            99.0749      30
  30 │ kalvotom                               137.365       31
  31 │ Nimriel the Golden                     206.041       33
  32 │ Dromek the Bound                       227.281       34
  33 │ Talmek the Shattered                   228.29        34
  34 │ Mirelda Starbloom                      230.773       35
  35 │ Sareth the Verdant                     231.245       36
  36 │ Orren Emberforge                       231.326       38
  37 │ Lunara Dreambinder                     232.901       38
  38 │ Tirvian Shadowmantle                   241.098       40
  39 │ Vyrion the Eternal                     246.327       40
  40 │ Althira Starweaver                     554.54        41
  41 │ Morvain Duskwalker                    1639.56        42
  42 │ chatgpt                            missing           44
  43 │ Aldorin the Luminous               missing           44
  44 │ Seraphyne Windwhisper              missing           44
  45 │ Thamior Embercloak                 missing           44
  46 │ Velindra the Azure                 missing           44
  47 │ Thalendir Brightflame              missing           44
  48 │ Erenwyn the Whispering             missing           44
  49 │ Velmaris Lightbinder               missing           44
  50 │ Ilyrien Dawnpetal                  missing           44
  51 │ Zytherin the Forgotten             missing           44
  52 │ Nysera Cloudveil                   missing           44
sort!(df, :ispd_f64_m)
record_rank!(df, :ispd_f64_m)
show(df[!, [:nick, :ispd_f64_m, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispd_f64_m  score 
      String                             Int64?      Int64 
─────┼──────────────────────────────────────────────────────
   1 │ Xandor the Arcane                         112      3
   2 │ Vessryn Bloodsong                       81240      6
   3 │ Aeloria of the Seven Sigils             81896     10
   4 │ kalvotom                                81944     35
   5 │ Eldaric Runehand                        82120      8
   6 │ Orlien Silverchant                     117368     14
   7 │ Yseline Frostwhisper                   117368     16
   8 │ Cyralis Moonbinder                     117368     22
   9 │ Selvethra of the Whispering Woods      117368     23
  10 │ Lyssara Moonveil                       117368     24
  11 │ Galdur the Wise                        117368     26
  12 │ Talvorn Runebreaker                    117480     20
  13 │ Dravok the Gloomed                     119160     38
  14 │ Eldwyn of the Shimmering Vale          119288     25
  15 │ Valtheris of the Amber Flame           119448     40
  16 │ Maerilith Stormweaver                  121096     33
  17 │ Thauren the Wandering                  160192     18
  18 │ Korvath the Obsidian                   181920     21
  19 │ Bramor the Tempest                     197456     26
  20 │ Gorvath Ironchant                      197456     27
  21 │ Rhovar Mistborn                        197456     28
  22 │ Caelwyn of the Crystal Spire           197456     35
  23 │ Kerron the Unseen                      197456     36
  24 │ Zerathorn the Pale                     197456     37
  25 │ Ivenar Spellforge                      197456     38
  26 │ Maranelle Frostpetal                   197456     40
  27 │ Elithar Dawnseeker                     197456     42
  28 │ Faelora Nightbloom                     197456     43
  29 │ Sylthara the Veiled                    197472     26
  30 │ Korthen Deepflame                      197536     43
  31 │ Talmek the Shattered                   277496     51
  32 │ Mirelda Starbloom                      277496     52
  33 │ Tirvian Shadowmantle                   277496     57
  34 │ Nimriel the Golden                     277528     51
  35 │ Sareth the Verdant                     277528     54
  36 │ Lunara Dreambinder                     277528     56
  37 │ Vyrion the Eternal                     277528     58
  38 │ Dromek the Bound                       277544     53
  39 │ Orren Emberforge                       278424     58
  40 │ Althira Starweaver                    5566456     62
  41 │ Morvain Duskwalker                   37107288     64
  42 │ chatgpt                               missing     86
  43 │ Aldorin the Luminous                  missing     86
  44 │ Seraphyne Windwhisper                 missing     86
  45 │ Thamior Embercloak                    missing     86
  46 │ Velindra the Azure                    missing     86
  47 │ Thalendir Brightflame                 missing     86
  48 │ Erenwyn the Whispering                missing     86
  49 │ Velmaris Lightbinder                  missing     86
  50 │ Ilyrien Dawnpetal                     missing     86
  51 │ Zytherin the Forgotten                missing     86
  52 │ Nysera Cloudveil                      missing     86

Případ PSD.

sort!(df, :ispsd_f64_t)
df[!, :ispsd_f64_t] /= df[1, :ispsd_f64_t]
record_rank!(df, :ispsd_f64_t)
show(df[!,[:nick, :ispsd_f64_t, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispsd_f64_t    score 
      String                             Float64?       Int64 
─────┼─────────────────────────────────────────────────────────
   1 │ Xandor the Arcane                        1.0          4
   2 │ Vessryn Bloodsong                        3.86241      8
   3 │ Althira Starweaver                       6.8056      65
   4 │ Orlien Silverchant                      48.831       18
   5 │ Korvath the Obsidian                    50.3498      26
   6 │ Thauren the Wandering                   52.4235      24
   7 │ Yseline Frostwhisper                    69.981       23
   8 │ Sylthara the Veiled                     72.4082      34
   9 │ Gorvath Ironchant                       74.5781      36
  10 │ Talvorn Runebreaker                     75.284       30
  11 │ Bramor the Tempest                      75.4097      37
  12 │ Eldwyn of the Shimmering Vale           75.8282      37
  13 │ Cyralis Moonbinder                      76.6568      35
  14 │ Rhovar Mistborn                         76.8599      42
  15 │ Selvethra of the Whispering Woods       77.1637      38
  16 │ Galdur the Wise                         78.9839      42
  17 │ Lyssara Moonveil                        79.8322      41
  18 │ Caelwyn of the Crystal Spire            79.8716      53
  19 │ Zerathorn the Pale                      80.4004      56
  20 │ Maerilith Stormweaver                   81.2959      53
  21 │ Kerron the Unseen                       81.6559      57
  22 │ Maranelle Frostpetal                    83.071       62
  23 │ Ivenar Spellforge                       83.1706      61
  24 │ Elithar Dawnseeker                      83.7941      66
  25 │ Korthen Deepflame                       84.2678      68
  26 │ Eldaric Runehand                        84.3676      34
  27 │ Faelora Nightbloom                      86.588       70
  28 │ Aeloria of the Seven Sigils             92.922       38
  29 │ Dravok the Gloomed                      95.3665      67
  30 │ Valtheris of the Amber Flame            97.654       70
  31 │ kalvotom                               135.868       66
  32 │ Nimriel the Golden                     201.818       83
  33 │ Tirvian Shadowmantle                   223.533       90
  34 │ Dromek the Bound                       224.997       87
  35 │ Mirelda Starbloom                      227.331       87
  36 │ Orren Emberforge                       228.391       94
  37 │ Talmek the Shattered                   228.867       88
  38 │ Sareth the Verdant                     229.202       92
  39 │ Lunara Dreambinder                     230.742       95
  40 │ Vyrion the Eternal                     235.962       98
  41 │ Morvain Duskwalker                    1820.12       105
  42 │ chatgpt                            missing          128
  43 │ Aldorin the Luminous               missing          128
  44 │ Seraphyne Windwhisper              missing          128
  45 │ Thamior Embercloak                 missing          128
  46 │ Velindra the Azure                 missing          128
  47 │ Thalendir Brightflame              missing          128
  48 │ Erenwyn the Whispering             missing          128
  49 │ Velmaris Lightbinder               missing          128
  50 │ Ilyrien Dawnpetal                  missing          128
  51 │ Zytherin the Forgotten             missing          128
  52 │ Nysera Cloudveil                   missing          128
sort!(df, :ispsd_f64_m)
record_rank!(df, :ispsd_f64_m)
show(df[!, [:nick, :ispsd_f64_m, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispsd_f64_m  score 
      String                             Int64?       Int64 
─────┼───────────────────────────────────────────────────────
   1 │ Xandor the Arcane                          240      5
   2 │ Althira Starweaver                       80328     67
   3 │ Vessryn Bloodsong                        81240     11
   4 │ kalvotom                                 81944     70
   5 │ Orlien Silverchant                      117368     23
   6 │ Yseline Frostwhisper                    117368     28
   7 │ Cyralis Moonbinder                      117368     40
   8 │ Selvethra of the Whispering Woods       117368     43
   9 │ Galdur the Wise                         117368     47
  10 │ Lyssara Moonveil                        117368     46
  11 │ Talvorn Runebreaker                     117480     36
  12 │ Dravok the Gloomed                      119160     74
  13 │ Eldwyn of the Shimmering Vale           119288     45
  14 │ Valtheris of the Amber Flame            119448     79
  15 │ Eldaric Runehand                        119512     44
  16 │ Maerilith Stormweaver                   121096     64
  17 │ Korvath the Obsidian                    181920     38
  18 │ Thauren the Wandering                   197456     37
  19 │ Gorvath Ironchant                       197456     49
  20 │ Bramor the Tempest                      197456     50
  21 │ Rhovar Mistborn                         197456     55
  22 │ Caelwyn of the Crystal Spire            197456     66
  23 │ Zerathorn the Pale                      197456     69
  24 │ Kerron the Unseen                       197456     70
  25 │ Maranelle Frostpetal                    197456     75
  26 │ Ivenar Spellforge                       197456     74
  27 │ Elithar Dawnseeker                      197456     79
  28 │ Faelora Nightbloom                      197456     83
  29 │ Sylthara the Veiled                     197472     48
  30 │ Korthen Deepflame                       197536     83
  31 │ Aeloria of the Seven Sigils             199040     54
  32 │ Tirvian Shadowmantle                    277496    107
  33 │ Mirelda Starbloom                       277496    104
  34 │ Talmek the Shattered                    277496    105
  35 │ Nimriel the Golden                      277528    101
  36 │ Sareth the Verdant                      277528    110
  37 │ Lunara Dreambinder                      277528    113
  38 │ Vyrion the Eternal                      277528    116
  39 │ Dromek the Bound                        277544    106
  40 │ Orren Emberforge                        278424    114
  41 │ Morvain Duskwalker                    37107288    126
  42 │ chatgpt                                missing    170
  43 │ Aldorin the Luminous                   missing    170
  44 │ Seraphyne Windwhisper                  missing    170
  45 │ Thamior Embercloak                     missing    170
  46 │ Velindra the Azure                     missing    170
  47 │ Thalendir Brightflame                  missing    170
  48 │ Erenwyn the Whispering                 missing    170
  49 │ Velmaris Lightbinder                   missing    170
  50 │ Ilyrien Dawnpetal                      missing    170
  51 │ Zytherin the Forgotten                 missing    170
  52 │ Nysera Cloudveil                       missing    170

Případ ID.

sort!(df, :isid_f64_t)
df[!, :isid_f64_t] /= df[1, :isid_f64_t]
record_rank!(df, :isid_f64_t)
show(df[!,[:nick, :isid_f64_t, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               isid_f64_t       score 
      String                             Float64?         Int64 
─────┼───────────────────────────────────────────────────────────
   1 │ Eldwyn of the Shimmering Vale            1.0           46
   2 │ Vessryn Bloodsong                     3281.54          13
   3 │ Xandor the Arcane                     4419.96           8
   4 │ Korvath the Obsidian                 42446.8           42
   5 │ Yseline Frostwhisper                 59757.8           33
   6 │ Sylthara the Veiled                  61035.1           54
   7 │ Gorvath Ironchant                    63445.4           56
   8 │ Bramor the Tempest                   64567.1           58
   9 │ Cyralis Moonbinder                   65956.0           49
  10 │ Selvethra of the Whispering Woods    66137.3           53
  11 │ Rhovar Mistborn                      66318.2           66
  12 │ Orlien Silverchant                   67117.2           35
  13 │ Galdur the Wise                      67539.9           60
  14 │ Lyssara Moonveil                     67958.2           60
  15 │ Caelwyn of the Crystal Spire         67988.5           81
  16 │ Kerron the Unseen                    70735.1           86
  17 │ Ivenar Spellforge                    70979.9           91
  18 │ Maranelle Frostpetal                 71004.7           93
  19 │ Korthen Deepflame                    71977.7          102
  20 │ Dravok the Gloomed                   74674.3           94
  21 │ Faelora Nightbloom                   74760.7          104
  22 │ Valtheris of the Amber Flame         75312.8          101
  23 │ Maerilith Stormweaver                76240.0           87
  24 │ Eldaric Runehand                     78727.6           68
  25 │ Aeloria of the Seven Sigils          79748.6           79
  26 │ Zerathorn the Pale                   82729.4           95
  27 │ Thauren the Wandering                83875.4           64
  28 │ kalvotom                                 1.15624e5     98
  29 │ Talvorn Runebreaker                 126804.0           65
  30 │ Elithar Dawnseeker                       1.41404e5    109
  31 │ Nimriel the Golden                       1.71064e5    132
  32 │ Tirvian Shadowmantle                     1.90634e5    139
  33 │ Mirelda Starbloom                        1.94394e5    137
  34 │ Sareth the Verdant                       1.9539e5     144
  35 │ Talmek the Shattered                195480.0          140
  36 │ Dromek the Bound                         1.95604e5    142
  37 │ Lunara Dreambinder                       1.96507e5    150
  38 │ Orren Emberforge                         2.04894e5    152
  39 │ Vyrion the Eternal                       4.15843e5    155
  40 │ Althira Starweaver                       9.63892e5    107
  41 │ Morvain Duskwalker                       1.34004e6    167
  42 │ chatgpt                            missing            212
  43 │ Aldorin the Luminous               missing            212
  44 │ Seraphyne Windwhisper              missing            212
  45 │ Thamior Embercloak                 missing            212
  46 │ Velindra the Azure                 missing            212
  47 │ Thalendir Brightflame              missing            212
  48 │ Erenwyn the Whispering             missing            212
  49 │ Velmaris Lightbinder               missing            212
  50 │ Ilyrien Dawnpetal                  missing            212
  51 │ Zytherin the Forgotten             missing            212
  52 │ Nysera Cloudveil                   missing            212
sort!(df, :isid_f64_m)
record_rank!(df, :isid_f64_m)
show(df[!, [:nick, :isid_f64_m, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               isid_f64_m  score 
      String                             Int64?      Int64 
─────┼──────────────────────────────────────────────────────
   1 │ Eldwyn of the Shimmering Vale               0     47
   2 │ Xandor the Arcane                       80744     10
   3 │ Vessryn Bloodsong                       81240     16
   4 │ kalvotom                                81944    102
   5 │ Yseline Frostwhisper                   117368     38
   6 │ Cyralis Moonbinder                     117368     54
   7 │ Selvethra of the Whispering Woods      117368     58
   8 │ Orlien Silverchant                     117368     40
   9 │ Galdur the Wise                        117368     65
  10 │ Lyssara Moonveil                       117368     65
  11 │ Dravok the Gloomed                     119160    100
  12 │ Valtheris of the Amber Flame           119448    108
  13 │ Eldaric Runehand                       119624     76
  14 │ Maerilith Stormweaver                  121096     96
  15 │ Korvath the Obsidian                   181920     52
  16 │ Gorvath Ironchant                      197456     67
  17 │ Bramor the Tempest                     197456     69
  18 │ Rhovar Mistborn                        197456     77
  19 │ Caelwyn of the Crystal Spire           197456     92
  20 │ Kerron the Unseen                      197456     97
  21 │ Ivenar Spellforge                      197456    102
  22 │ Maranelle Frostpetal                   197456    104
  23 │ Faelora Nightbloom                     197456    115
  24 │ Sylthara the Veiled                    197472     66
  25 │ Korthen Deepflame                      197552    115
  26 │ Zerathorn the Pale                     198128    109
  27 │ Aeloria of the Seven Sigils            199120     94
  28 │ Talvorn Runebreaker                    234960     81
  29 │ Tirvian Shadowmantle                   277496    156
  30 │ Mirelda Starbloom                      277496    154
  31 │ Talmek the Shattered                   277496    157
  32 │ Nimriel the Golden                     277528    150
  33 │ Sareth the Verdant                     277528    162
  34 │ Lunara Dreambinder                     277528    168
  35 │ Dromek the Bound                       277560    161
  36 │ Orren Emberforge                       278424    172
  37 │ Thauren the Wandering                  314824     85
  38 │ Elithar Dawnseeker                     314824    130
  39 │ Vyrion the Eternal                     635144    177
  40 │ Althira Starweaver                   11293744    130
  41 │ Morvain Duskwalker                   37107288    191
  42 │ chatgpt                               missing    254
  43 │ Aldorin the Luminous                  missing    254
  44 │ Seraphyne Windwhisper                 missing    254
  45 │ Thamior Embercloak                    missing    254
  46 │ Velindra the Azure                    missing    254
  47 │ Thalendir Brightflame                 missing    254
  48 │ Erenwyn the Whispering                missing    254
  49 │ Velmaris Lightbinder                  missing    254
  50 │ Ilyrien Dawnpetal                     missing    254
  51 │ Zytherin the Forgotten                missing    254
  52 │ Nysera Cloudveil                      missing    254

Pozitivní definitnost Hilbertovy matice

O Hilbertově matici libovolného čtvercového rozměru lze dokázat, že je PD. Pojďme se podívat, jak si s tím poradí naše řešiče (prvky Hilbertovy matice zadávám jako racionální čísla s BigFloat čitatelem/jmenovatelem). Nejprve test správné odpovědi.

sort!(df, :ispd_hilbert_c, rev=true)
record_rank!(df, :ispd_hilbert_c)
show(df[!,[:nick, :ispd_hilbert_c, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispd_hilbert_c  score 
      String                             Bool            Int64 
─────┼──────────────────────────────────────────────────────────
   1 │ Xandor the Arcane                            true     11
   2 │ Vessryn Bloodsong                            true     17
   3 │ kalvotom                                     true    103
   4 │ Selvethra of the Whispering Woods            true     59
   5 │ Orlien Silverchant                           true     41
   6 │ Eldaric Runehand                             true     77
   7 │ Maerilith Stormweaver                        true     97
   8 │ Korvath the Obsidian                         true     53
   9 │ Rhovar Mistborn                              true     78
  10 │ Ivenar Spellforge                            true    103
  11 │ Zerathorn the Pale                           true    110
  12 │ Aeloria of the Seven Sigils                  true     95
  13 │ Mirelda Starbloom                            true    155
  14 │ Talmek the Shattered                         true    158
  15 │ Sareth the Verdant                           true    163
  16 │ Lunara Dreambinder                           true    169
  17 │ Thauren the Wandering                        true     86
  18 │ Vyrion the Eternal                           true    178
  19 │ Althira Starweaver                           true    131
  20 │ Morvain Duskwalker                           true    192
  21 │ Eldwyn of the Shimmering Vale               false     49
  22 │ Yseline Frostwhisper                        false     40
  23 │ Cyralis Moonbinder                          false     56
  24 │ Galdur the Wise                             false     67
  25 │ Lyssara Moonveil                            false     67
  26 │ Dravok the Gloomed                          false    102
  27 │ Valtheris of the Amber Flame                false    110
  28 │ Gorvath Ironchant                           false     69
  29 │ Bramor the Tempest                          false     71
  30 │ Caelwyn of the Crystal Spire                false     94
  31 │ Kerron the Unseen                           false     99
  32 │ Maranelle Frostpetal                        false    106
  33 │ Faelora Nightbloom                          false    117
  34 │ Sylthara the Veiled                         false     68
  35 │ Korthen Deepflame                           false    117
  36 │ Talvorn Runebreaker                         false     83
  37 │ Tirvian Shadowmantle                        false    158
  38 │ Nimriel the Golden                          false    152
  39 │ Dromek the Bound                            false    163
  40 │ Orren Emberforge                            false    174
  41 │ Elithar Dawnseeker                          false    132
  42 │ chatgpt                                     false    256
  43 │ Aldorin the Luminous                        false    256
  44 │ Seraphyne Windwhisper                       false    256
  45 │ Thamior Embercloak                          false    256
  46 │ Velindra the Azure                          false    256
  47 │ Thalendir Brightflame                       false    256
  48 │ Erenwyn the Whispering                      false    256
  49 │ Velmaris Lightbinder                        false    256
  50 │ Ilyrien Dawnpetal                           false    256
  51 │ Zytherin the Forgotten                      false    256
  52 │ Nysera Cloudveil                            false    256

A pro zajímavost opět ještě časová a paměťová náročnost.

sort!(df, :ispd_hilbert_t)
df[!, :ispd_hilbert_t] /= df[1, :ispd_hilbert_t]
record_rank!(df, :ispd_hilbert_t)
show(df[!,[:nick, :ispd_hilbert_t, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispd_hilbert_t  score 
      String                             Float64?        Int64 
─────┼──────────────────────────────────────────────────────────
   1 │ Eldaric Runehand                          1.0         78
   2 │ Orlien Silverchant                        1.13715     43
   3 │ Thauren the Wandering                     1.40663     89
   4 │ Selvethra of the Whispering Woods         3.50533     63
   5 │ Maerilith Stormweaver                     3.57567    102
   6 │ Sareth the Verdant                        3.90224    169
   7 │ Korvath the Obsidian                      3.95371     60
   8 │ Mirelda Starbloom                         6.2128     163
   9 │ Rhovar Mistborn                           6.49463     87
  10 │ Lunara Dreambinder                        8.17806    179
  11 │ Talmek the Shattered                      8.18363    169
  12 │ kalvotom                                  8.32633    115
  13 │ Ivenar Spellforge                        14.2905     116
  14 │ Morvain Duskwalker                       15.3618     206
  15 │ Zerathorn the Pale                       24.0834     125
  16 │ Aeloria of the Seven Sigils              25.7359     111
  17 │ Vessryn Bloodsong                        32.5708      34
  18 │ Xandor the Arcane                        32.8263      29
  19 │ Althira Starweaver                       33.8331     150
  20 │ Vyrion the Eternal                       34.058      198
  21 │ Eldwyn of the Shimmering Vale       missing           91
  22 │ Yseline Frostwhisper                missing           82
  23 │ Cyralis Moonbinder                  missing           98
  24 │ Galdur the Wise                     missing          109
  25 │ Lyssara Moonveil                    missing          109
  26 │ Dravok the Gloomed                  missing          144
  27 │ Valtheris of the Amber Flame        missing          152
  28 │ Gorvath Ironchant                   missing          111
  29 │ Bramor the Tempest                  missing          113
  30 │ Caelwyn of the Crystal Spire        missing          136
  31 │ Kerron the Unseen                   missing          141
  32 │ Maranelle Frostpetal                missing          148
  33 │ Faelora Nightbloom                  missing          159
  34 │ Sylthara the Veiled                 missing          110
  35 │ Korthen Deepflame                   missing          159
  36 │ Talvorn Runebreaker                 missing          125
  37 │ Tirvian Shadowmantle                missing          200
  38 │ Nimriel the Golden                  missing          194
  39 │ Dromek the Bound                    missing          205
  40 │ Orren Emberforge                    missing          216
  41 │ Elithar Dawnseeker                  missing          174
  42 │ chatgpt                             missing          298
  43 │ Aldorin the Luminous                missing          298
  44 │ Seraphyne Windwhisper               missing          298
  45 │ Thamior Embercloak                  missing          298
  46 │ Velindra the Azure                  missing          298
  47 │ Thalendir Brightflame               missing          298
  48 │ Erenwyn the Whispering              missing          298
  49 │ Velmaris Lightbinder                missing          298
  50 │ Ilyrien Dawnpetal                   missing          298
  51 │ Zytherin the Forgotten              missing          298
  52 │ Nysera Cloudveil                    missing          298

A pak paměť, čím méně, tím lépe.

sort!(df, :ispd_hilbert_m)
record_rank!(df, :ispd_hilbert_m)
show(df[!, [:nick, :ispd_hilbert_m, :score]], allrows=true)
52×3 DataFrame
 Row  nick                               ispd_hilbert_m  score 
      String                             Int64?          Int64 
─────┼──────────────────────────────────────────────────────────
   1 │ Eldaric Runehand                           446344     79
   2 │ Orlien Silverchant                         488904     45
   3 │ Thauren the Wandering                      734496     92
   4 │ Selvethra of the Whispering Woods         1018744     67
   5 │ Maerilith Stormweaver                     1188496    107
   6 │ Sareth the Verdant                        1234384    175
   7 │ Korvath the Obsidian                      1330320     67
   8 │ Rhovar Mistborn                           1983152     95
   9 │ Mirelda Starbloom                         2298336    172
  10 │ kalvotom                                  2504344    125
  11 │ Talmek the Shattered                      2759160    180
  12 │ Lunara Dreambinder                        2846616    191
  13 │ Ivenar Spellforge                         5540352    129
  14 │ Morvain Duskwalker                        5925304    220
  15 │ Vessryn Bloodsong                         9615824     49
  16 │ Zerathorn the Pale                        9659656    141
  17 │ Xandor the Arcane                         9681272     46
  18 │ Vyrion the Eternal                        9941904    216
  19 │ Althira Starweaver                        9944704    169
  20 │ Aeloria of the Seven Sigils               9947904    131
  21 │ Eldwyn of the Shimmering Vale             missing    133
  22 │ Yseline Frostwhisper                      missing    124
  23 │ Cyralis Moonbinder                        missing    140
  24 │ Galdur the Wise                           missing    151
  25 │ Lyssara Moonveil                          missing    151
  26 │ Dravok the Gloomed                        missing    186
  27 │ Valtheris of the Amber Flame              missing    194
  28 │ Gorvath Ironchant                         missing    153
  29 │ Bramor the Tempest                        missing    155
  30 │ Caelwyn of the Crystal Spire              missing    178
  31 │ Kerron the Unseen                         missing    183
  32 │ Maranelle Frostpetal                      missing    190
  33 │ Faelora Nightbloom                        missing    201
  34 │ Sylthara the Veiled                       missing    152
  35 │ Korthen Deepflame                         missing    201
  36 │ Talvorn Runebreaker                       missing    167
  37 │ Tirvian Shadowmantle                      missing    242
  38 │ Nimriel the Golden                        missing    236
  39 │ Dromek the Bound                          missing    247
  40 │ Orren Emberforge                          missing    258
  41 │ Elithar Dawnseeker                        missing    216
  42 │ chatgpt                                   missing    340
  43 │ Aldorin the Luminous                      missing    340
  44 │ Seraphyne Windwhisper                     missing    340
  45 │ Thamior Embercloak                        missing    340
  46 │ Velindra the Azure                        missing    340
  47 │ Thalendir Brightflame                     missing    340
  48 │ Erenwyn the Whispering                    missing    340
  49 │ Velmaris Lightbinder                      missing    340
  50 │ Ilyrien Dawnpetal                         missing    340
  51 │ Zytherin the Forgotten                    missing    340
  52 │ Nysera Cloudveil                          missing    340

Závěrečná tabulka

Zaznamenávali jsme v každé kategorii (sdílené) pořadí. Čím nižší hodnota, tím lepší výsledek.

sort!(df, :score)
show(df[!,[:nick, :score]], allrows=true)
52×2 DataFrame
 Row  nick                               score 
      String                             Int64 
─────┼──────────────────────────────────────────
   1 │ Orlien Silverchant                    45
   2 │ Xandor the Arcane                     46
   3 │ Vessryn Bloodsong                     49
   4 │ Selvethra of the Whispering Woods     67
   5 │ Korvath the Obsidian                  67
   6 │ Eldaric Runehand                      79
   7 │ Thauren the Wandering                 92
   8 │ Rhovar Mistborn                       95
   9 │ Maerilith Stormweaver                107
  10 │ Yseline Frostwhisper                 124
  11 │ kalvotom                             125
  12 │ Ivenar Spellforge                    129
  13 │ Aeloria of the Seven Sigils          131
  14 │ Eldwyn of the Shimmering Vale        133
  15 │ Cyralis Moonbinder                   140
  16 │ Zerathorn the Pale                   141
  17 │ Galdur the Wise                      151
  18 │ Lyssara Moonveil                     151
  19 │ Sylthara the Veiled                  152
  20 │ Gorvath Ironchant                    153
  21 │ Bramor the Tempest                   155
  22 │ Talvorn Runebreaker                  167
  23 │ Althira Starweaver                   169
  24 │ Mirelda Starbloom                    172
  25 │ Sareth the Verdant                   175
  26 │ Caelwyn of the Crystal Spire         178
  27 │ Talmek the Shattered                 180
  28 │ Kerron the Unseen                    183
  29 │ Dravok the Gloomed                   186
  30 │ Maranelle Frostpetal                 190
  31 │ Lunara Dreambinder                   191
  32 │ Valtheris of the Amber Flame         194
  33 │ Faelora Nightbloom                   201
  34 │ Korthen Deepflame                    201
  35 │ Vyrion the Eternal                   216
  36 │ Elithar Dawnseeker                   216
  37 │ Morvain Duskwalker                   220
  38 │ Nimriel the Golden                   236
  39 │ Tirvian Shadowmantle                 242
  40 │ Dromek the Bound                     247
  41 │ Orren Emberforge                     258
  42 │ chatgpt                              340
  43 │ Aldorin the Luminous                 340
  44 │ Seraphyne Windwhisper                340
  45 │ Thamior Embercloak                   340
  46 │ Velindra the Azure                   340
  47 │ Thalendir Brightflame                340
  48 │ Erenwyn the Whispering               340
  49 │ Velmaris Lightbinder                 340
  50 │ Ilyrien Dawnpetal                    340
  51 │ Zytherin the Forgotten               340
  52 │ Nysera Cloudveil                     340