lhy1111112 2023-06-14 13:08 采纳率: 33.3%
浏览 5

、用Apriori算法分析下列购物单数据,设最小支持度为0.5,最小置信度为 0.4,挖掘频繁项集,找出最强关联规则

img

img

img


**请问第1题和第三题如何做
第三题过程越写越迷糊,都在第2-项集中低于支持度0.5,还高于0.4的置信度,没有关联规则?感觉算错了,有没有会的。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-14 17:03
    关注
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/721471
    • 这篇博客也不错, 你可以看下算法上机报告2 ——几种排序算法的实验性能比较(插入排序,归并排序,随机快排,三路随机快排)
    • 除此之外, 这篇博客: 一文搞懂高频面试题之四种常用的限流算法,从算法原理到实现,再到对比分析中的 代码实现及测试 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • package project.limiter;
      
      /**
       * Project: AllForJava
       * Title:
       * Description:
       * Date: 2020-09-07 18:38
       * Copyright: Copyright (c) 2020
       *
      * @公众号: 超悦编程
      * @微信号:exzlco
      * @author: 超悦人生
      * @email: exzlc@139.com
      * @version 1.0
       **/
      
      public class CounterSildeWindowLimiter {
      
          private int windowSize; //窗口大小,毫秒为单位
          private int limit;//窗口内限流大小
          private int splitNum;//切分小窗口的数目大小
          private int[] counters;//每个小窗口的计数数组
          private int index;//当前小窗口计数器的索引
          private long startTime;//窗口开始时间
      
          private CounterSildeWindowLimiter(){}
      
          public CounterSildeWindowLimiter(int windowSize, int limit, int splitNum){
              this.limit = limit;
              this.windowSize = windowSize;
              this.splitNum = splitNum;
              counters = new int[splitNum];
              index = 0;
              startTime = System.currentTimeMillis();
          }
      
          //请求到达后先调用本方法,若返回true,则请求通过,否则限流
          public synchronized boolean tryAcquire(){
              long curTime = System.currentTimeMillis();
              long windowsNum = Math.max(curTime - windowSize - startTime,0) / (windowSize / splitNum);//计算滑动小窗口的数量
              slideWindow(windowsNum);//滑动窗口
              int count = 0;
              for(int i = 0;i < splitNum;i ++){
                  count += counters[i];
              }
              if(count >= limit){
                  return false;
              }else{
                  counters[index] ++;
                  return true;
              }
          }
      
          private synchronized void slideWindow(long windowsNum){
              if(windowsNum == 0)
                  return;
              long slideNum = Math.min(windowsNum,splitNum);
              for(int i = 0;i < slideNum;i ++){
                  index = (index + 1) % splitNum;
                  counters[index] = 0;
              }
              startTime = startTime + windowsNum * (windowSize / splitNum);//更新滑动窗口时间
          }
      
          //测试
          public static void main(String[] args) throws InterruptedException {
              //每秒20个请求
              int limit = 20;
              CounterSildeWindowLimiter counterSildeWindowLimiter = new CounterSildeWindowLimiter(1000,limit,10);
              int count = 0;
      
              Thread.sleep(3000);
              //计数器滑动窗口算法模拟100组间隔30ms的50次请求
              System.out.println("计数器滑动窗口算法测试开始");
              System.out.println("开始模拟100组间隔150ms的50次请求");
              int faliCount = 0;
              for(int j = 0;j < 100;j ++){
                  count = 0;
                  for(int i = 0;i < 50;i ++){
                      if(counterSildeWindowLimiter.tryAcquire()){
                          count ++;
                      }
                  }
                  Thread.sleep(150);
                  //模拟50次请求,看多少能通过
                  for(int i = 0;i < 50;i ++){
                      if(counterSildeWindowLimiter.tryAcquire()){
                          count ++;
                      }
                  }
                  if(count > limit){
                      System.out.println("时间窗口内放过的请求超过阈值,放过的请求数" + count + ",限流:" + limit);
                      faliCount ++;
                  }
                  Thread.sleep((int)(Math.random() * 100));
              }
              System.out.println("计数器滑动窗口算法测试结束,100组间隔150ms的50次请求模拟完成,限流失败组数:" + faliCount);
              System.out.println("===========================================================================================");
      
      
              //计数器固定窗口算法模拟100组间隔30ms的50次请求
              System.out.println("计数器固定窗口算法测试开始");
              //模拟100组间隔30ms的50次请求
              CounterLimiter counterLimiter = new CounterLimiter(1000,limit);
              System.out.println("开始模拟100组间隔150ms的50次请求");
              faliCount = 0;
              for(int j = 0;j < 100;j ++){
                  count = 0;
                  for(int i = 0;i < 50;i ++){
                      if(counterLimiter.tryAcquire()){
                          count ++;
                      }
                  }
                  Thread.sleep(150);
                  //模拟50次请求,看多少能通过
                  for(int i = 0;i < 50;i ++){
                      if(counterLimiter.tryAcquire()){
                          count ++;
                      }
                  }
                  if(count > limit){
                      System.out.println("时间窗口内放过的请求超过阈值,放过的请求数" + count + ",限流:" + limit);
                      faliCount ++;
                  }
                  Thread.sleep((int)(Math.random() * 100));
              }
              System.out.println("计数器滑动窗口算法测试结束,100组间隔150ms的50次请求模拟完成,限流失败组数:" + faliCount);
          }
      }
      
      

      测试时,取滑动窗口大小为1000/10=100ms,然后模拟100组间隔150ms的50次请求,计数器滑动窗口算法与计数器固定窗口算法进行对别,可以看到如下结果:

      计数器滑动窗口算法测试结果

      固定窗口算法在窗口切换时产生了两倍于阈值流量请求的问题,而滑动窗口算法避免了这个问题。

    • 您还可以看一下 朱有鹏老师的内存这个大话题-4.1.C语言专题第一部分课程中的 4.1.9、复杂数据结构小节, 巩固相关知识点
    评论

报告相同问题?

问题事件

  • 创建了问题 6月14日

悬赏问题

  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 hadoop中启动hive报错如下怎么解决