《数据科学面试40+真题讲解》,K神本年度最后一次开课


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推你去多家公司面试
Airbnb 数据科学职位
in analytics and inference
天天打游戏、照样领工资,
你要不要来?
把贵司招聘信息放这里
查看: 265|回复: 1
收起左侧

算法4 week3 slopeOrder函数求助

[复制链接] |试试Instant~ |关注本帖
逻辑学 发表于 2017-7-4 10:08:42 | 显示全部楼层 |阅读模式

[Coursera]Algorithm4 #3 - 2017-07-05@普林斯顿

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
/**
     * Compares two points by the slope they make with this point.
     * The slope is defined as in the slopeTo() method.
     *
     * @return the Comparator that defines this ordering on points
     */
    public Comparator<Point> slopeOrder() {

        return null;
        /* YOUR CODE HERE */
    }
week3里面要完成这个slopeOrder函数,这里面要求比较两个点的斜率,可是并没有传点的参数进来啊,我看了一下网上的代码,是建了一个slopeOrder的子类,在子类里面要求传参数进去,有点看不懂。
    private class SlopeOrder implements Comparator<Point> {
        public int compare(Point q1, Point q2) {
            double d1 = slopeTo(q1);
            double d2 = slopeTo(q2);
            if (d1 == d2) return 0;
            if (d1 < d2) return -1;
            return +1;
        }
    }
public Comparator<Point> slopeOrder() {
        return new SlopeOrder();
    }
调用slopeOrder的时候没有参数传入,那新建的类里面也没有参数,那compare函数是怎么调用的呢?
magicsets 发表于 2017-7-5 04:17:26 | 显示全部楼层
本帖最后由 magicsets 于 2017-7-5 04:26 编辑

这个代码用起来是这样的:
----
Comparator<Point> o = slopeOrder();

Point p1 = /* some point */;
Point p2 = /* some point */;
int value = o.compare(p1, p2);
----

也就是slopeOrder()返回的o是一个“比较器”,本质上是一段“代码”而不是一段“数据”。然后别人再用这段代码去比较两个点。

如果想深入理解的话可以去了解一下“高阶函数”(high-order function),“闭包”(closure)这些概念。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-11-20 10:33

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表