Power BI

cpa_cpv Lv.3

关注
本帖最后由 cpa_cpv 于 2025-8-7 13:24 编辑

求最长递增子序列。我这里用的递归,是用的record,因为就象VBA中的字典,可以比较前后位置。


运行后,结果应该都出来了,但是,组合不是我想要的。他没有按 子序列 一个一个地呈现出来。

也就是 这个结果的堆积,不是我要的效果。但是,结果 ,其实都出来了。

请老师百忙之中,抽空帮我看一下。
0d06318f30bb5a6a7ce401eb0495fdd.png
bdda5b1b7c2e3241e8dc5be8ddd8233.png
123.gif

最长递增子序列(5-30).rar   2025-8-7 13:16 上传

19.92 KB, 下载次数: 3

319阅读
7回复 倒序

cpa_cpv 楼主 2楼

正确的子序列应该是: {31,88},{31,63,70},{31,70},{31,62},{31,61},{31,38,42}。。。。


等等 这样的。

wdx223 Lv.6 3楼

image.png

cpa_cpv 楼主 4楼

引用: wdx223 发表于 2025-8-7 16:54

新的思路,我学习。但目前,我的疑惑 还没有解决

cpa_cpv 楼主 5楼

  1. let
  2.       data = Excel.CurrentWorkbook(){[Name = "表1"]}[Content],
  3.       rename = Table.RenameColumns(
  4.             data,
  5.             List.Transform(
  6.                   Table.ColumnNames(data),
  7.                   each {_, Character.FromNumber(64 + Number.From(Text.Select(_, {"0" .. "9"})))}
  8.             )
  9.       ),
  10.       rec = Table.ToRecords(rename),
  11.       gx = (x) => List.Accumulate(x, {}, (s, t) => if t is list then s & @gx(t) else s & {t}),
  12.       fx = (r) =>
  13.             if r = [] then
  14.                   {{""}}
  15.             else
  16.                   [
  17.                         a = Record.FieldNames(r),
  18.                         b = List.TransformMany(
  19.                               a,
  20.                               each {
  21.                                     [
  22.                                           c = Record.Field(r, _),
  23.                                           d = @fx(
  24.                                                 Record.SelectFields(
  25.                                                       r,
  26.                                                       List.Select(
  27.                                                             a,
  28.                                                             (x) => x > _ and Record.Field(r, x) > c
  29.                                                       ),
  30.                                                       1
  31.                                                 )
  32.                                           )
  33.                                     ][d]
  34.                               },
  35.                               (s, t) =>
  36.                                     [
  37.                                           m = List.Combine(t),
  38.                                           n = List.Transform(m, (x) => {Record.Field(r, s)} & {x})
  39.                                     ][n]
  40.                         )
  41.                   ][b],
  42.       res = List.Transform(
  43.             rec,
  44.             each [
  45.                   a = List.Combine(
  46.                         List.Transform(
  47.                               fx(_),
  48.                               (x) => List.Transform(x, (y) => gx(y))
  49.                         )
  50.                   ),
  51.                   b = List.Count(List.Max(a, 1, each List.Count(_))),
  52.                   c = List.Distinct(List.Select(a, each List.Count(_) = b)),
  53.                   d = Text.Combine(
  54.                         List.Transform(
  55.                               c,
  56.                               each "["
  57.                                     & Text.Combine(
  58.                                           List.Transform(List.RemoveItems(_, {null, ""}), Text.From),
  59.                                           ","
  60.                                     )
  61.                                     & "]"
  62.                         ),
  63.                         ";"
  64.                   )
  65.             ][d]
  66.       )
  67. in
  68.     res
自己乱鼓捣。反正也成功了。效率还行。
eb4b67c9f6538d6cad445035aa12b98.png

cpa_cpv 楼主 6楼




eb4b67c9f6538d6cad445035aa12b98.png

5b7b7722d0605959b3f0a6ae092fa82.png

自己鼓捣出来。效率比之前的高很多。

kinshellfan Lv.2 7楼

image.jpg

凑个热闹

cpa_cpv 楼主 8楼


大概看明白了。思路其实跟我上面那个一样。只不过,我是直接用的 record的 键名与键值,而你用的索引。感觉差不多。

已显示全部内容