首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组分组为通常相同长度的字母组。

将数组分组为通常相同长度的字母组。
EN

Software Engineering用户
提问于 2016-08-26 15:30:23
回答 4查看 1.1K关注 0票数 1

给出一个项目列表,我想把它分成四个尽可能长的组。这些项目也需要按照每个项目中的第一个字母进行分组。

26封信/4组一般涵盖每组6.5封信。如果每个组中有相同数量的项目以相同的字母开头,则可能如下所示:

代码语言:javascript
复制
[A-F] (6 letters)
[G-M] (7 letters)
[N-S] (6 letters)
[T-Z] (7 letters)

然而,在实践中,我们可能会发现我们的原始列表在S组中的项目上很重。

代码语言:javascript
复制
[A-F] (50 items)
[G-M] (40 items)
[N-S] (70 items)
[T-Z] (40 items)

为了达到平衡,我们可能要把以N开头的所有项目都推到第2组,把以S开头的所有项目推到第4组:

代码语言:javascript
复制
[A-F] (50 items)
[G-N] (50 items)
[O-R] (50 items)
[S-Z] (50 items)

有没有人知道该在哪里给我找出解决这类问题的算法。

我很可能会在客户机上使用javascript来实现任何可行的解决方案。我想尽可能地使用一种方法的功能。

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2016-08-26 16:09:08

创建4个结果列表和26个列表,通过初始字母保存临时项目,然后应用以下伪代码:

代码语言:javascript
复制
foreach item in masterlist
    append item to initial letter list
    increment total counter

average bucket size = total/4

iterate letter buckets in order
    if current results bucket size  + length letter bucket < avergae bucket size
        append letter bucket to results bucket
    else
        append letter bucket to results bucket if it will be over average by less than it would be under if you do nothing
        move to next results bucket
票数 2
EN

Software Engineering用户

发布于 2016-08-26 16:10:55

未获给予任何其他要求及

假设你只想粘上头几个字母

假设你会坚持几个群体,这是一个2的力量:

  • 按字母顺序排列列表
  • 尽量把它切成一半
  • 尽可能地把这两块切成一半

这解决了你提出的“提前阅读问题”。每一次剪裁都考虑到整个列表。

在这里也有很好的重用。

解决这个问题的一种实用方法是闭包。生成一个函数,该函数关闭排序列表并接受另一个将组定义为参数的列表。此信函列表将是组的开始字母和结束字母。该函数生成一个新的字母列表,使组数加倍。

你的信件列表会像这样进展:

A-Z

A-N

阿-法O-R

伪码

代码语言:javascript
复制
h = ItemRepository(sortedListOfItems).Halve;
result = h(h([A-Z]));
票数 4
EN

Software Engineering用户

发布于 2016-08-26 16:06:45

也许我遗漏了一些东西,但我认为这个一般的方法可能就是你想要的:

  1. 取下所有N项并对它们进行排序
  2. 从项目N/4开始
  3. X是否以与预播种元素相同的字母开头?
    1. 是的:移动到下一个元素x,重复3。
    2. 不:x是下一组的开始。

对每一组重复这一步骤。这里的主要问题是,如果说一半的单词以A开头,它不会给出你想要的结果。你需要开始看第二个字母等等。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/329416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档