1

我想实现一个 Anytime k-NN 分类器,但我找不到在特定时间内调用“classify(...)”方法的方法,暂停它,在方法暂停之前获取可用结果,恢复特定时间量的方法,暂停它,在方法暂停之前获取可用结果,等等......我使用数据结构来获取近似结果。当算法遍历数据结构时,它最终会遇到实际的训练数据向量。

public class AnytimeKNN{
 public int classify(queryPoint, k){
   class_label;
   1. Assign an initial value to 'class_label'.
   2.while(not actual training data vectors are encountered){
     1. traverse the data structure
     2. assign a new value to 'class_label'
    }
  }
}

我想通过以下方式从主方法调用“分类(..)”方法:

  • 启动方法“分类(..)”
  • 为“class_label”分配初始值时暂停方法“classify(..)”。
  • 获取初始标签
  • 继续执行“分类(..)”方法 X 时间
  • 暂停方法“分类(..)”
  • 获取新的“class_label”
  • 恢复方法“分类(..)”X 时间量等......

提前致谢!

4

1 回答 1

1

听起来像是并发编程中典型的生产者-消费者场景。在 Java 中,您可以使用两个二进制信号量来解决这个问题。一个告诉分类器它应该运行,一个告诉主线程获得下一个结果。分类器等待它的信号量直到它被主线程触发。主线程的行为类似。

当然,还有其他选择,例如使用并发队列。分类器将其结果放入队列中,主线程将它们拉出,如果没有新结果则等待。这将是我最喜欢的解决方案,但也许您有理由希望以固定的时间间隔启动和停止该方法。

于 2012-07-22T21:09:33.873 回答