Jdi na navigaci předmětu

3. Porovnání (Definitnost matic)

Porovnání jednotlivých řešení po měkké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.25false0.0true0Bool
3ispd_f64_t623189.011111.03.15388e56.97814e624Union{Missing, Float64}
4ispd_f64_m1.49452e681240189688.03710728824Union{Missing, Int64}
5ispsd_f64_t5.9285e513365.03.1887e55.60177e624Union{Missing, Float64}
6ispsd_f64_m1.50003e681240197456.03710728824Union{Missing, Int64}
7isid_f64_t6.35356e54.5283.28987e55.85381e624Union{Missing, Float64}
8isid_f64_m1.51278e60197456.03710728824Union{Missing, Int64}
9ispd_hilbert_t3.72655e6366442.01.24068e69.00834e641Union{Missing, Float64}
10ispd_hilbert_m4.83244e67344962.56153e6994788841Union{Missing, Int64}
11ispd_hilbert_c0.211538false0.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 │ Zerathorn the Pale                        true      1
   7 │ Vyrion the Eternal                        true      1
   8 │ Maerilith Stormweaver                     true      1
   9 │ Sareth the Verdant                        true      1
  10 │ Vessryn Bloodsong                         true      1
  11 │ Eldwyn of the Shimmering Vale             true      1
  12 │ Selvethra of the Whispering Woods         true      1
  13 │ Valtheris of the Amber Flame              true      1
  14 │ chatgpt                                  false      2
  15 │ Aldorin the Luminous                     false      2
  16 │ Seraphyne Windwhisper                    false      2
  17 │ Thamior Embercloak                       false      2
  18 │ Velindra the Azure                       false      2
  19 │ Thalendir Brightflame                    false      2
  20 │ Mirelda Starbloom                        false      2
  21 │ Orlien Silverchant                       false      2
  22 │ Faelora Nightbloom                       false      2
  23 │ Galdur the Wise                          false      2
  24 │ Yseline Frostwhisper                     false      2
  25 │ Bramor the Tempest                       false      2
  26 │ Elithar Dawnseeker                       false      2
  27 │ Caelwyn of the Crystal Spire             false      2
  28 │ Tirvian Shadowmantle                     false      2
  29 │ Erenwyn the Whispering                   false      2
  30 │ Orren Emberforge                         false      2
  31 │ Lunara Dreambinder                       false      2
  32 │ Korthen Deepflame                        false      2
  33 │ Aeloria of the Seven Sigils              false      2
  34 │ Dravok the Gloomed                       false      2
  35 │ Velmaris Lightbinder                     false      2
  36 │ Nimriel the Golden                       false      2
  37 │ Talvorn Runebreaker                      false      2
  38 │ Sylthara the Veiled                      false      2
  39 │ Rhovar Mistborn                          false      2
  40 │ Ilyrien Dawnpetal                        false      2
  41 │ Talmek the Shattered                     false      2
  42 │ Maranelle Frostpetal                     false      2
  43 │ Xandor the Arcane                        false      2
  44 │ Zytherin the Forgotten                   false      2
  45 │ Cyralis Moonbinder                       false      2
  46 │ Thauren the Wandering                    false      2
  47 │ Ivenar Spellforge                        false      2
  48 │ Kerron the Unseen                        false      2
  49 │ Althira Starweaver                       false      2
  50 │ Dromek the Bound                         false      2
  51 │ Nysera Cloudveil                         false      2
  52 │ Gorvath Ironchant                        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 │ Vessryn Bloodsong                        1.0          2
   2 │ Thauren the Wandering                    2.85474      4
   3 │ Aeloria of the Seven Sigils              3.13167      5
   4 │ Orlien Silverchant                      16.8304       6
   5 │ Korvath the Obsidian                    18.8286       6
   6 │ Cyralis Moonbinder                      26.7993       8
   7 │ Eldwyn of the Shimmering Vale           26.8114       8
   8 │ Selvethra of the Whispering Woods       26.8222       9
   9 │ Galdur the Wise                         26.8548      11
  10 │ Sylthara the Veiled                     26.9593      12
  11 │ Lyssara Moonveil                        27.1538      12
  12 │ Caelwyn of the Crystal Spire            27.7601      14
  13 │ Zerathorn the Pale                      27.7664      14
  14 │ Elithar Dawnseeker                      28.1023      16
  15 │ Maerilith Stormweaver                   28.6682      16
  16 │ Kerron the Unseen                       28.9986      18
  17 │ Faelora Nightbloom                      29.2408      19
  18 │ Korthen Deepflame                       29.5532      20
  19 │ Dravok the Gloomed                      30.61        21
  20 │ Valtheris of the Amber Flame            30.8303      21
  21 │ Eldaric Runehand                        32.0861      22
  22 │ kalvotom                                56.4499      23
  23 │ Nimriel the Golden                      72.7229      25
  24 │ Tirvian Shadowmantle                    77.3273      26
  25 │ Orren Emberforge                        79.0581      27
  26 │ Vyrion the Eternal                      79.5636      27
  27 │ Sareth the Verdant                      79.6294      28
  28 │ Morvain Duskwalker                     628.038       29
  29 │ chatgpt                            missing           44
  30 │ Aldorin the Luminous               missing           44
  31 │ Seraphyne Windwhisper              missing           44
  32 │ Thamior Embercloak                 missing           44
  33 │ Velindra the Azure                 missing           44
  34 │ Thalendir Brightflame              missing           44
  35 │ Mirelda Starbloom                  missing           44
  36 │ Yseline Frostwhisper               missing           44
  37 │ Bramor the Tempest                 missing           44
  38 │ Erenwyn the Whispering             missing           44
  39 │ Lunara Dreambinder                 missing           44
  40 │ Velmaris Lightbinder               missing           44
  41 │ Talvorn Runebreaker                missing           44
  42 │ Rhovar Mistborn                    missing           44
  43 │ Ilyrien Dawnpetal                  missing           44
  44 │ Talmek the Shattered               missing           44
  45 │ Maranelle Frostpetal               missing           44
  46 │ Xandor the Arcane                  missing           44
  47 │ Zytherin the Forgotten             missing           44
  48 │ Ivenar Spellforge                  missing           44
  49 │ Althira Starweaver                 missing           44
  50 │ Dromek the Bound                   missing           44
  51 │ Nysera Cloudveil                   missing           44
  52 │ Gorvath Ironchant                  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 │ Vessryn Bloodsong                       81240      3
   2 │ Aeloria of the Seven Sigils             81800      7
   3 │ Orlien Silverchant                     117368      9
   4 │ Cyralis Moonbinder                     117368     11
   5 │ Selvethra of the Whispering Woods      117368     12
   6 │ Galdur the Wise                        117368     14
   7 │ Lyssara Moonveil                       117368     15
   8 │ Valtheris of the Amber Flame           119064     25
   9 │ Eldaric Runehand                       119128     27
  10 │ Eldwyn of the Shimmering Vale          119288     14
  11 │ Dravok the Gloomed                     119544     28
  12 │ Maerilith Stormweaver                  120712     24
  13 │ Thauren the Wandering                  160192     13
  14 │ Korvath the Obsidian                   181920     16
  15 │ Sylthara the Veiled                    197456     23
  16 │ Caelwyn of the Crystal Spire           197456     25
  17 │ Zerathorn the Pale                     197456     25
  18 │ Elithar Dawnseeker                     197456     27
  19 │ Kerron the Unseen                      197456     29
  20 │ Faelora Nightbloom                     197456     30
  21 │ Korthen Deepflame                      197536     32
  22 │ Tirvian Shadowmantle                   277496     39
  23 │ Nimriel the Golden                     277528     39
  24 │ Vyrion the Eternal                     277528     41
  25 │ Sareth the Verdant                     277528     42
  26 │ Orren Emberforge                       278424     42
  27 │ kalvotom                               278648     39
  28 │ Morvain Duskwalker                   37107288     46
  29 │ chatgpt                               missing     86
  30 │ Aldorin the Luminous                  missing     86
  31 │ Seraphyne Windwhisper                 missing     86
  32 │ Thamior Embercloak                    missing     86
  33 │ Velindra the Azure                    missing     86
  34 │ Thalendir Brightflame                 missing     86
  35 │ Mirelda Starbloom                     missing     86
  36 │ Yseline Frostwhisper                  missing     86
  37 │ Bramor the Tempest                    missing     86
  38 │ Erenwyn the Whispering                missing     86
  39 │ Lunara Dreambinder                    missing     86
  40 │ Velmaris Lightbinder                  missing     86
  41 │ Talvorn Runebreaker                   missing     86
  42 │ Rhovar Mistborn                       missing     86
  43 │ Ilyrien Dawnpetal                     missing     86
  44 │ Talmek the Shattered                  missing     86
  45 │ Maranelle Frostpetal                  missing     86
  46 │ Xandor the Arcane                     missing     86
  47 │ Zytherin the Forgotten                missing     86
  48 │ Ivenar Spellforge                     missing     86
  49 │ Althira Starweaver                    missing     86
  50 │ Dromek the Bound                      missing     86
  51 │ Nysera Cloudveil                      missing     86
  52 │ Gorvath Ironchant                     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 │ Vessryn Bloodsong                        1.0         4
   2 │ Orlien Silverchant                      13.7975     11
   3 │ Korvath the Obsidian                    14.9013     19
   4 │ Thauren the Wandering                   15.3871     17
   5 │ Eldwyn of the Shimmering Vale           22.172      19
   6 │ Selvethra of the Whispering Woods       22.2035     18
   7 │ Galdur the Wise                         22.2778     21
   8 │ Cyralis Moonbinder                      22.2958     19
   9 │ Sylthara the Veiled                     22.5078     32
  10 │ Lyssara Moonveil                        22.6106     25
  11 │ Zerathorn the Pale                      22.9592     36
  12 │ Caelwyn of the Crystal Spire            23.0863     37
  13 │ Elithar Dawnseeker                      23.3805     40
  14 │ Maerilith Stormweaver                   23.6916     38
  15 │ Kerron the Unseen                       24.0255     44
  16 │ Faelora Nightbloom                      24.2463     46
  17 │ Korthen Deepflame                       24.5761     49
  18 │ Valtheris of the Amber Flame            25.4224     43
  19 │ Eldaric Runehand                        25.9113     46
  20 │ Dravok the Gloomed                      26.0095     48
  21 │ Aeloria of the Seven Sigils             28.3367     28
  22 │ kalvotom                                49.5909     61
  23 │ Nimriel the Golden                      59.6044     62
  24 │ Tirvian Shadowmantle                    64.2965     63
  25 │ Sareth the Verdant                      66.1609     67
  26 │ Vyrion the Eternal                      66.1826     67
  27 │ Orren Emberforge                        66.2643     69
  28 │ Morvain Duskwalker                     419.138      74
  29 │ chatgpt                            missing         128
  30 │ Aldorin the Luminous               missing         128
  31 │ Seraphyne Windwhisper              missing         128
  32 │ Thamior Embercloak                 missing         128
  33 │ Velindra the Azure                 missing         128
  34 │ Thalendir Brightflame              missing         128
  35 │ Mirelda Starbloom                  missing         128
  36 │ Yseline Frostwhisper               missing         128
  37 │ Bramor the Tempest                 missing         128
  38 │ Erenwyn the Whispering             missing         128
  39 │ Lunara Dreambinder                 missing         128
  40 │ Velmaris Lightbinder               missing         128
  41 │ Talvorn Runebreaker                missing         128
  42 │ Rhovar Mistborn                    missing         128
  43 │ Ilyrien Dawnpetal                  missing         128
  44 │ Talmek the Shattered               missing         128
  45 │ Maranelle Frostpetal               missing         128
  46 │ Xandor the Arcane                  missing         128
  47 │ Zytherin the Forgotten             missing         128
  48 │ Ivenar Spellforge                  missing         128
  49 │ Althira Starweaver                 missing         128
  50 │ Dromek the Bound                   missing         128
  51 │ Nysera Cloudveil                   missing         128
  52 │ Gorvath Ironchant                  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 │ Vessryn Bloodsong                        81240      5
   2 │ Orlien Silverchant                      117368     13
   3 │ Selvethra of the Whispering Woods       117368     20
   4 │ Galdur the Wise                         117368     23
   5 │ Cyralis Moonbinder                      117368     21
   6 │ Lyssara Moonveil                        117368     27
   7 │ Valtheris of the Amber Flame            119064     46
   8 │ Eldaric Runehand                        119128     50
   9 │ Eldwyn of the Shimmering Vale           119288     24
  10 │ Dravok the Gloomed                      119544     54
  11 │ Maerilith Stormweaver                   120712     45
  12 │ Korvath the Obsidian                    181920     27
  13 │ Thauren the Wandering                   197456     26
  14 │ Sylthara the Veiled                     197456     41
  15 │ Zerathorn the Pale                      197456     45
  16 │ Caelwyn of the Crystal Spire            197456     46
  17 │ Elithar Dawnseeker                      197456     49
  18 │ Kerron the Unseen                       197456     53
  19 │ Faelora Nightbloom                      197456     55
  20 │ Korthen Deepflame                       197536     59
  21 │ Aeloria of the Seven Sigils             199040     39
  22 │ Tirvian Shadowmantle                    277496     75
  23 │ Nimriel the Golden                      277528     75
  24 │ Sareth the Verdant                      277528     80
  25 │ Vyrion the Eternal                      277528     80
  26 │ Orren Emberforge                        278424     83
  27 │ kalvotom                                278648     76
  28 │ Morvain Duskwalker                    37107288     90
  29 │ chatgpt                                missing    170
  30 │ Aldorin the Luminous                   missing    170
  31 │ Seraphyne Windwhisper                  missing    170
  32 │ Thamior Embercloak                     missing    170
  33 │ Velindra the Azure                     missing    170
  34 │ Thalendir Brightflame                  missing    170
  35 │ Mirelda Starbloom                      missing    170
  36 │ Yseline Frostwhisper                   missing    170
  37 │ Bramor the Tempest                     missing    170
  38 │ Erenwyn the Whispering                 missing    170
  39 │ Lunara Dreambinder                     missing    170
  40 │ Velmaris Lightbinder                   missing    170
  41 │ Talvorn Runebreaker                    missing    170
  42 │ Rhovar Mistborn                        missing    170
  43 │ Ilyrien Dawnpetal                      missing    170
  44 │ Talmek the Shattered                   missing    170
  45 │ Maranelle Frostpetal                   missing    170
  46 │ Xandor the Arcane                      missing    170
  47 │ Zytherin the Forgotten                 missing    170
  48 │ Ivenar Spellforge                      missing    170
  49 │ Althira Starweaver                     missing    170
  50 │ Dromek the Bound                       missing    170
  51 │ Nysera Cloudveil                       missing    170
  52 │ Gorvath Ironchant                      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           25
   2 │ Vessryn Bloodsong                     2998.23           7
   3 │ Korvath the Obsidian                 44984.5           30
   4 │ Selvethra of the Whispering Woods    65596.3           24
   5 │ Orlien Silverchant                   65722.6           18
   6 │ Galdur the Wise                      65774.6           29
   7 │ Cyralis Moonbinder                   65970.2           28
   8 │ Lyssara Moonveil                     67362.3           35
   9 │ Sylthara the Veiled                  67532.5           50
  10 │ Caelwyn of the Crystal Spire         67800.4           56
  11 │ Elithar Dawnseeker                   68161.0           60
  12 │ Maerilith Stormweaver                70752.1           57
  13 │ Kerron the Unseen                    70859.2           66
  14 │ Korthen Deepflame                    72628.4           73
  15 │ Faelora Nightbloom                   72683.7           70
  16 │ Dravok the Gloomed                   74388.5           70
  17 │ Valtheris of the Amber Flame         74705.9           63
  18 │ Eldaric Runehand                     79523.0           68
  19 │ Aeloria of the Seven Sigils          80510.8           58
  20 │ Zerathorn the Pale                   82270.1           65
  21 │ Thauren the Wandering                84561.2           47
  22 │ kalvotom                                 1.40112e5     98
  23 │ Nimriel the Golden                       1.76473e5     98
  24 │ Tirvian Shadowmantle                     1.90224e5     99
  25 │ Orren Emberforge                         1.95143e5    108
  26 │ Sareth the Verdant                       1.95881e5    106
  27 │ Vyrion the Eternal                       3.93458e5    107
  28 │ Morvain Duskwalker                       1.2928e6     118
  29 │ chatgpt                            missing            212
  30 │ Aldorin the Luminous               missing            212
  31 │ Seraphyne Windwhisper              missing            212
  32 │ Thamior Embercloak                 missing            212
  33 │ Velindra the Azure                 missing            212
  34 │ Thalendir Brightflame              missing            212
  35 │ Mirelda Starbloom                  missing            212
  36 │ Yseline Frostwhisper               missing            212
  37 │ Bramor the Tempest                 missing            212
  38 │ Erenwyn the Whispering             missing            212
  39 │ Lunara Dreambinder                 missing            212
  40 │ Velmaris Lightbinder               missing            212
  41 │ Talvorn Runebreaker                missing            212
  42 │ Rhovar Mistborn                    missing            212
  43 │ Ilyrien Dawnpetal                  missing            212
  44 │ Talmek the Shattered               missing            212
  45 │ Maranelle Frostpetal               missing            212
  46 │ Xandor the Arcane                  missing            212
  47 │ Zytherin the Forgotten             missing            212
  48 │ Ivenar Spellforge                  missing            212
  49 │ Althira Starweaver                 missing            212
  50 │ Dromek the Bound                   missing            212
  51 │ Nysera Cloudveil                   missing            212
  52 │ Gorvath Ironchant                  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     26
   2 │ Vessryn Bloodsong                       81240      9
   3 │ Selvethra of the Whispering Woods      117368     27
   4 │ Orlien Silverchant                     117368     21
   5 │ Galdur the Wise                        117368     32
   6 │ Cyralis Moonbinder                     117368     31
   7 │ Lyssara Moonveil                       117368     38
   8 │ Valtheris of the Amber Flame           119064     67
   9 │ Eldaric Runehand                       119240     73
  10 │ Dravok the Gloomed                     119544     76
  11 │ Maerilith Stormweaver                  120712     64
  12 │ Korvath the Obsidian                   181920     38
  13 │ Sylthara the Veiled                    197456     59
  14 │ Caelwyn of the Crystal Spire           197456     65
  15 │ Elithar Dawnseeker                     197456     69
  16 │ Kerron the Unseen                      197456     75
  17 │ Faelora Nightbloom                     197456     79
  18 │ Korthen Deepflame                      197552     83
  19 │ Zerathorn the Pale                     198128     76
  20 │ Aeloria of the Seven Sigils            199504     70
  21 │ Tirvian Shadowmantle                   277496    112
  22 │ Nimriel the Golden                     277528    112
  23 │ Sareth the Verdant                     277528    120
  24 │ Orren Emberforge                       278424    123
  25 │ kalvotom                               278648    114
  26 │ Thauren the Wandering                  314824     64
  27 │ Vyrion the Eternal                     635144    125
  28 │ Morvain Duskwalker                   37107288    137
  29 │ chatgpt                               missing    254
  30 │ Aldorin the Luminous                  missing    254
  31 │ Seraphyne Windwhisper                 missing    254
  32 │ Thamior Embercloak                    missing    254
  33 │ Velindra the Azure                    missing    254
  34 │ Thalendir Brightflame                 missing    254
  35 │ Mirelda Starbloom                     missing    254
  36 │ Yseline Frostwhisper                  missing    254
  37 │ Bramor the Tempest                    missing    254
  38 │ Erenwyn the Whispering                missing    254
  39 │ Lunara Dreambinder                    missing    254
  40 │ Velmaris Lightbinder                  missing    254
  41 │ Talvorn Runebreaker                   missing    254
  42 │ Rhovar Mistborn                       missing    254
  43 │ Ilyrien Dawnpetal                     missing    254
  44 │ Talmek the Shattered                  missing    254
  45 │ Maranelle Frostpetal                  missing    254
  46 │ Xandor the Arcane                     missing    254
  47 │ Zytherin the Forgotten                missing    254
  48 │ Ivenar Spellforge                     missing    254
  49 │ Althira Starweaver                    missing    254
  50 │ Dromek the Bound                      missing    254
  51 │ Nysera Cloudveil                      missing    254
  52 │ Gorvath Ironchant                     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 │ Vessryn Bloodsong                            true     10
   2 │ Selvethra of the Whispering Woods            true     28
   3 │ Maerilith Stormweaver                        true     65
   4 │ Korvath the Obsidian                         true     39
   5 │ Zerathorn the Pale                           true     77
   6 │ Aeloria of the Seven Sigils                  true     71
   7 │ Sareth the Verdant                           true    121
   8 │ kalvotom                                     true    115
   9 │ Thauren the Wandering                        true     65
  10 │ Vyrion the Eternal                           true    126
  11 │ Morvain Duskwalker                           true    138
  12 │ Eldwyn of the Shimmering Vale               false     28
  13 │ Orlien Silverchant                          false     23
  14 │ Galdur the Wise                             false     34
  15 │ Cyralis Moonbinder                          false     33
  16 │ Lyssara Moonveil                            false     40
  17 │ Valtheris of the Amber Flame                false     69
  18 │ Eldaric Runehand                            false     75
  19 │ Dravok the Gloomed                          false     78
  20 │ Sylthara the Veiled                         false     61
  21 │ Caelwyn of the Crystal Spire                false     67
  22 │ Elithar Dawnseeker                          false     71
  23 │ Kerron the Unseen                           false     77
  24 │ Faelora Nightbloom                          false     81
  25 │ Korthen Deepflame                           false     85
  26 │ Tirvian Shadowmantle                        false    114
  27 │ Nimriel the Golden                          false    114
  28 │ Orren Emberforge                            false    125
  29 │ chatgpt                                     false    256
  30 │ Aldorin the Luminous                        false    256
  31 │ Seraphyne Windwhisper                       false    256
  32 │ Thamior Embercloak                          false    256
  33 │ Velindra the Azure                          false    256
  34 │ Thalendir Brightflame                       false    256
  35 │ Mirelda Starbloom                           false    256
  36 │ Yseline Frostwhisper                        false    256
  37 │ Bramor the Tempest                          false    256
  38 │ Erenwyn the Whispering                      false    256
  39 │ Lunara Dreambinder                          false    256
  40 │ Velmaris Lightbinder                        false    256
  41 │ Talvorn Runebreaker                         false    256
  42 │ Rhovar Mistborn                             false    256
  43 │ Ilyrien Dawnpetal                           false    256
  44 │ Talmek the Shattered                        false    256
  45 │ Maranelle Frostpetal                        false    256
  46 │ Xandor the Arcane                           false    256
  47 │ Zytherin the Forgotten                      false    256
  48 │ Ivenar Spellforge                           false    256
  49 │ Althira Starweaver                          false    256
  50 │ Dromek the Bound                            false    256
  51 │ Nysera Cloudveil                            false    256
  52 │ Gorvath Ironchant                           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 │ Thauren the Wandering                     1.0         66
   2 │ Selvethra of the Whispering Woods         2.45849     30
   3 │ Maerilith Stormweaver                     2.63795     68
   4 │ Korvath the Obsidian                      2.84763     43
   5 │ Sareth the Verdant                        2.85031    126
   6 │ kalvotom                                  3.38576    121
   7 │ Morvain Duskwalker                       11.9371     145
   8 │ Aeloria of the Seven Sigils              18.2315      79
   9 │ Zerathorn the Pale                       18.4213      86
  10 │ Vessryn Bloodsong                        23.5118      20
  11 │ Vyrion the Eternal                       24.5833     137
  12 │ Eldwyn of the Shimmering Vale       missing           70
  13 │ Orlien Silverchant                  missing           65
  14 │ Galdur the Wise                     missing           76
  15 │ Cyralis Moonbinder                  missing           75
  16 │ Lyssara Moonveil                    missing           82
  17 │ Valtheris of the Amber Flame        missing          111
  18 │ Eldaric Runehand                    missing          117
  19 │ Dravok the Gloomed                  missing          120
  20 │ Sylthara the Veiled                 missing          103
  21 │ Caelwyn of the Crystal Spire        missing          109
  22 │ Elithar Dawnseeker                  missing          113
  23 │ Kerron the Unseen                   missing          119
  24 │ Faelora Nightbloom                  missing          123
  25 │ Korthen Deepflame                   missing          127
  26 │ Tirvian Shadowmantle                missing          156
  27 │ Nimriel the Golden                  missing          156
  28 │ Orren Emberforge                    missing          167
  29 │ chatgpt                             missing          298
  30 │ Aldorin the Luminous                missing          298
  31 │ Seraphyne Windwhisper               missing          298
  32 │ Thamior Embercloak                  missing          298
  33 │ Velindra the Azure                  missing          298
  34 │ Thalendir Brightflame               missing          298
  35 │ Mirelda Starbloom                   missing          298
  36 │ Yseline Frostwhisper                missing          298
  37 │ Bramor the Tempest                  missing          298
  38 │ Erenwyn the Whispering              missing          298
  39 │ Lunara Dreambinder                  missing          298
  40 │ Velmaris Lightbinder                missing          298
  41 │ Talvorn Runebreaker                 missing          298
  42 │ Rhovar Mistborn                     missing          298
  43 │ Ilyrien Dawnpetal                   missing          298
  44 │ Talmek the Shattered                missing          298
  45 │ Maranelle Frostpetal                missing          298
  46 │ Xandor the Arcane                   missing          298
  47 │ Zytherin the Forgotten              missing          298
  48 │ Ivenar Spellforge                   missing          298
  49 │ Althira Starweaver                  missing          298
  50 │ Dromek the Bound                    missing          298
  51 │ Nysera Cloudveil                    missing          298
  52 │ Gorvath Ironchant                   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 │ Thauren the Wandering                      734496     67
   2 │ Selvethra of the Whispering Woods         1018744     32
   3 │ Maerilith Stormweaver                     1188496     71
   4 │ Sareth the Verdant                        1234384    130
   5 │ Korvath the Obsidian                      1330320     48
   6 │ kalvotom                                  2561528    127
   7 │ Morvain Duskwalker                        5925304    152
   8 │ Vessryn Bloodsong                         9615824     28
   9 │ Zerathorn the Pale                        9657992     95
  10 │ Vyrion the Eternal                        9941888    147
  11 │ Aeloria of the Seven Sigils               9947888     90
  12 │ Eldwyn of the Shimmering Vale             missing    112
  13 │ Orlien Silverchant                        missing    107
  14 │ Galdur the Wise                           missing    118
  15 │ Cyralis Moonbinder                        missing    117
  16 │ Lyssara Moonveil                          missing    124
  17 │ Valtheris of the Amber Flame              missing    153
  18 │ Eldaric Runehand                          missing    159
  19 │ Dravok the Gloomed                        missing    162
  20 │ Sylthara the Veiled                       missing    145
  21 │ Caelwyn of the Crystal Spire              missing    151
  22 │ Elithar Dawnseeker                        missing    155
  23 │ Kerron the Unseen                         missing    161
  24 │ Faelora Nightbloom                        missing    165
  25 │ Korthen Deepflame                         missing    169
  26 │ Tirvian Shadowmantle                      missing    198
  27 │ Nimriel the Golden                        missing    198
  28 │ Orren Emberforge                          missing    209
  29 │ chatgpt                                   missing    340
  30 │ Aldorin the Luminous                      missing    340
  31 │ Seraphyne Windwhisper                     missing    340
  32 │ Thamior Embercloak                        missing    340
  33 │ Velindra the Azure                        missing    340
  34 │ Thalendir Brightflame                     missing    340
  35 │ Mirelda Starbloom                         missing    340
  36 │ Yseline Frostwhisper                      missing    340
  37 │ Bramor the Tempest                        missing    340
  38 │ Erenwyn the Whispering                    missing    340
  39 │ Lunara Dreambinder                        missing    340
  40 │ Velmaris Lightbinder                      missing    340
  41 │ Talvorn Runebreaker                       missing    340
  42 │ Rhovar Mistborn                           missing    340
  43 │ Ilyrien Dawnpetal                         missing    340
  44 │ Talmek the Shattered                      missing    340
  45 │ Maranelle Frostpetal                      missing    340
  46 │ Xandor the Arcane                         missing    340
  47 │ Zytherin the Forgotten                    missing    340
  48 │ Ivenar Spellforge                         missing    340
  49 │ Althira Starweaver                        missing    340
  50 │ Dromek the Bound                          missing    340
  51 │ Nysera Cloudveil                          missing    340
  52 │ Gorvath Ironchant                         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 │ Vessryn Bloodsong                     28
   2 │ Selvethra of the Whispering Woods     32
   3 │ Korvath the Obsidian                  48
   4 │ Thauren the Wandering                 67
   5 │ Maerilith Stormweaver                 71
   6 │ Aeloria of the Seven Sigils           90
   7 │ Zerathorn the Pale                    95
   8 │ Orlien Silverchant                   107
   9 │ Eldwyn of the Shimmering Vale        112
  10 │ Cyralis Moonbinder                   117
  11 │ Galdur the Wise                      118
  12 │ Lyssara Moonveil                     124
  13 │ kalvotom                             127
  14 │ Sareth the Verdant                   130
  15 │ Sylthara the Veiled                  145
  16 │ Vyrion the Eternal                   147
  17 │ Caelwyn of the Crystal Spire         151
  18 │ Morvain Duskwalker                   152
  19 │ Valtheris of the Amber Flame         153
  20 │ Elithar Dawnseeker                   155
  21 │ Eldaric Runehand                     159
  22 │ Kerron the Unseen                    161
  23 │ Dravok the Gloomed                   162
  24 │ Faelora Nightbloom                   165
  25 │ Korthen Deepflame                    169
  26 │ Tirvian Shadowmantle                 198
  27 │ Nimriel the Golden                   198
  28 │ Orren Emberforge                     209
  29 │ chatgpt                              340
  30 │ Aldorin the Luminous                 340
  31 │ Seraphyne Windwhisper                340
  32 │ Thamior Embercloak                   340
  33 │ Velindra the Azure                   340
  34 │ Thalendir Brightflame                340
  35 │ Mirelda Starbloom                    340
  36 │ Yseline Frostwhisper                 340
  37 │ Bramor the Tempest                   340
  38 │ Erenwyn the Whispering               340
  39 │ Lunara Dreambinder                   340
  40 │ Velmaris Lightbinder                 340
  41 │ Talvorn Runebreaker                  340
  42 │ Rhovar Mistborn                      340
  43 │ Ilyrien Dawnpetal                    340
  44 │ Talmek the Shattered                 340
  45 │ Maranelle Frostpetal                 340
  46 │ Xandor the Arcane                    340
  47 │ Zytherin the Forgotten               340
  48 │ Ivenar Spellforge                    340
  49 │ Althira Starweaver                   340
  50 │ Dromek the Bound                     340
  51 │ Nysera Cloudveil                     340
  52 │ Gorvath Ironchant                    340