在比赛中产生比赛

时间:2020-09-01 16:19:55

标签: java spring algorithm

如何在锦标赛中生成比赛我有一个锦标赛,正在添加参与者。有一场比赛应由两名参与者组成。如何从比赛中吸引参与者并从中产生比赛。

@Entity
public class Participant {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "participant_id")
    private int id;

    @NotNull
    @Column(name = "nick_name")
    private String nickName;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "tournament_fk_id")
    private Tournament tournament;
*gets,Sets

比赛

@Entity
public class Tournament {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "tournament_id")
private int id;

@OneToMany(mappedBy = "tournament", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<TournamentMatch> tournamentMatchSet = new HashSet<>();

private String name;

@OneToMany(mappedBy = "tournament", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Participant> participantList = new ArrayList<>();

锦标赛比赛

@Entity
@Table(name = "mach")
public class TournamentMatch {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "mach_id")
    private int id;

    @Column(name = "start_time")
    private LocalDate startTime;

    @Column(name = "finisch_time")
    private LocalDate finischTime;

    private BigDecimal scores;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "tournament_fk_id")
    private Tournament tournament;

    @OneToOne(optional = false, cascade = CascadeType.ALL)
    @JoinColumn(name = "participant_two_fk_id")
    private Participant participantTwo;

    @OneToOne(optional = false, cascade = CascadeType.ALL)
    @JoinColumn(name = "participant_one_fk_id")
    private Participant participantOne;

我不明白解决问题的算法。

我有一个比赛参与者名单 您是否需要成对分配它们并将它们添加到比赛中?还是您需要创建一种仅将两个参与者添加到比赛中的方法?

2 个答案:

答案 0 :(得分:0)

在列表中添加所有参与者。遍历该列表并一次选择2个参与者,并为其创建匹配项。您可以将所有匹配项合并到一个列表中,并将其存储为历史记录。您可以通过删除丢失比赛的参与者(直到只剩下一名参与者)来过滤参与者的列表。该参与者可以成为赢家。

答案 1 :(得分:0)

匹配算法取决于您要执行的操作。最简单的方法是随机配对参与者(将参与者列表随机排序,然后配对)。您可能有一个遗留的参与者,可以从中删除一个“再见”比赛,也可以省略。

更复杂的是“种子”参与者(按技能顺序或添加到锦标赛的顺序),然​​后将最高种子与最低种子配对,第二高种子与第二最低种子配对,等等。

我不确定我是否会完全遵循您的问题,但我认为你们都需要一个将参与者配对的函数,并且我需要将他们添加到比赛中并保持比赛的方法。

后续问题将是:

  • 您是否需要其他“回合”比赛?
  • 他们是否应该遵循特定的括号结构(即单淘汰赛或循环赛)
相关问题