查看: 2133| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[入门|算法|数据结构] 关于Algorithms Week3如何满分的问题

全局:
公开课
学校名称: Princeton
Unit号: 3
开课时间: 2016-12-28
课程全名: Algorithms
平台: Coursera

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
明天就要due了,然而楼主的week3还没满分。我遇到的问题是这样的,要处理防止subsegment的出现。我的思路是建一个叫checktable 的Arraylist记录已经存入的linesegment,在进行搜索时,如果发现摸个搜索到的linesegment是和checktable的linesegment共线的话,那么就扔掉这组值。由于我们在搜索之前对points进行了排序,所以可以肯定,相对长的线一定会先出现,而subsegment的情况会在这之后出现。因此,这种方法是可行的,不过当已有的checktable变的很大时,时间就要远远超过N*2logN,所以时间会有两个测试过不了。如果不考虑subsegment的问题,时间测试可以过去,但是correctness样例会有4个过不了。楼主也尝试了不一边搜索一边判断,也就是先N*2logN搜索出一些潜在值,再取筛选这些潜在值当中斜率一样的中相对较长的线。不过写完以后发现这种方法在一些情况下会优化,但是依然过不了要求的时间test。想问问各位同僚和前辈,大家是怎么在时间范围允许内解决subsegment的问题的?


上一篇:Princeton Algorithm Week 3 测试求指导
下一篇:求前辈推荐比较好的Udemy上project-based course
🔗
 楼主| hiworld723 2017-1-16 16:44:15 | 只看该作者
全局:
本帖最后由 hiworld723 于 2017-1-16 16:47 编辑
wendaomumu 发表于 2017-1-14 21:44
比如ABCDE五个点共线,可能是相对A比较找到这一组共线,也可能是相对于BCDE做比较时找到这一组共线。在生成 ...

我不确定是否正确理解了层主的回答,不过我的问题是ABCDE五个点,以A为原点,可以找到一条线A到E,以B为原点,其实只会找到B到E,因为此时算出A的斜率是负数,然而 B ->E是A->E的一种子情况,我该怎么避免把B->E加入到我的结果中呢?
我感觉您说的解答问题是针对于如何避免A->E 和 E -> A 会算两次这个问题。不过这个问题我个人认为其实也可以通过仅仅统计所有点的组合而不是排序来避免,也就是说,在做for循环的时候
for (int i = 0 ; i < points.length ; i++){
for (int j = i+1;j < points.length ;j++)
}
这样相当于A点在算完A->E之后,就被"丢弃“掉了。

回复

使用道具 举报

🔗
xujr 2017-1-19 03:20:52 | 只看该作者
全局:
我在最开始就按nature order用Arrays.sort()了,这样再按点从大到小来作为基准点,这样找到的线段的较大端点一定是由大到小找到的。这样在找到满足条件的线段时检查这线段上的点,如果有比当前基准点更大的说明这线段就已经建过了。时间内存测试都能过。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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