• Bron–Kerbosch算法


    BK算法使用搜索+剪枝来寻找无向图最大团。

    一些定义

    1. :完全子图。
    2. 最大团:点数最大的团。
    3. 最大独立集 :最大的点集使得点集中任意两点都没有边直接相连。

    (以上摘自OI wiki)

    算法流程

    先定义一些数组和变量(有的是(dfs)里的变量):

    • (cnt[i])表示从(i-n)这些点的最大团点数
    • (vis[i])存当前搜到的团
    • (now)表示现在正在搜团内第(now)个点(注意现在团内只有(now-1)个点)
    • (x)表示当前搜到的点
    • (ans)表示当前答案

    首先我们肯定要按照一定的顺序搜索(这里我们标号从大到小搜),然后我们用正常思路爆搜,当然我们需要加一些剪枝:

    1. (now-1+cnt[i] leq ans)时直接退出(最优性剪枝)
    2. 只有当前点和当前的团还能组成最大团时才继续递归(可行性剪枝)

    (感觉光从文字非常难以理解,还是建议看代码理解)

    例题:

    1. poj 1419 Graph Coloring 题解(代码可以在这里看)
    由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
  • 相关阅读:
    Docker网络管理
    Docker数据管理
    Docker仓库管理
    Docker容器管理
    Docker安装及基本使用方法
    Docker简介
    Ansible安装配置Nginx
    Ansible安装配置及使用
    puppet安装配置及使用
    TCP三次握手、四次挥手与TcpDump抓包分析
  • 原文地址:https://www.cnblogs.com/With-penguin/p/13040032.html
Copyright © 2020-2023  润新知