Algorithm:638. 大礼包
Review: Adaptive Collaborative Topic Modeling for Online Recommendation
Tip/Tech: khan算法完成拓扑排序
Share:美国的小孩更加想成为网红
Algorithm
638. 大礼包
https://leetcode-cn.com/problems/shopping-offers/description/
这题吧,其实用回溯递归实现就可以work了,其实我发现这题,如果用递归树来理解就很方便了。。。
总体的思想:就是你需要用到尽量多的大礼包,
具体的思想,我们先假设有A、B、C三个大礼包:
1 首先我们先试试A礼包能不能替换部分的物品
2 如果A可以满足,那么再试试A礼包
3 如果不能满足条件替换,那么再试试B礼包
4 如果B礼包不行,就试试C礼包,
5 如果C礼包还不行,那么就是只能换一次A礼包
6 剩下的都原价买了,看看价格
7 用B礼包替换A再从第一步开始。
画个递归树的图就是下图这样:
SHOW THE CODE
class Solution {
public int shoppingOffers(List<Integer> price, List<List<Integer>> special, List<Integer> needs) {
shopOffers(price, special, needs, 0);
return ans;
}
int ans = Integer.MAX_VALUE;
private void shopOffers(List<Integer> price, List<List<Integer>> offers, List<Integer> needs, int tempAns) {
for (int i = 0, offersSize = offers.size(); i < offersSize; ++i) {
LinkedList<Integer> temp = new LinkedList<>();
List<Integer> offerTemp = offers.get(i);
for (int j = 0, needSize = needs.size(); j < needSize; ++j) {
if (needs.get(j) >= offerTemp.get(j)) {
temp.add(needs.get(j) - offerTemp.get(j));
} else {
temp = null;
break;
}
}
if (temp != null) {
shopOffers(price, offers, temp, tempAns + offerTemp.get(offerTemp.size() - 1));
}
}
for (int i = 0, len = price.size(); i < len; ++i) {
tempAns += needs.get(i) * price.get(i);
}
ans = Math.min(ans, tempAns);
}
}
Review
Adaptive Collaborative Topic Modeling for Online Recommendation
推荐方法目前有三个分类:
第一,基于内容的(CB)方法依赖于从中提取的信息
用户配置文件和项目描述。
第二,协同过滤(CF)方法利用用户活动和过去的互动,例如,评级和点击,以学习偏好并产生推荐。
最后,混合方法旨在结合两种技术为了克服他们的弱点:虽然CB方法倾向于
过度专业化,缺乏新奇感,表现力CF方法随着评级稀疏度和冷启动设置的增加而下降,混合方法诞生了。
本文中提出了一个CoAWILDA算法,结合两种算法来玩。AWILDA是一个算法,co应该代表的是协同过滤的啥意思。
总体思想如下:
Tip/Tech
khan算法解决拓扑排序
这个礼拜做了几道需要用拓扑排序解决的题目,就把拓扑排序给简单的复习了一下子
这里假设我们有个已经收集好信息的邻接表中存放着拓扑的关系,其中链表数组,每个下标代表着起始原点的值,他的元素链表里存放着他之后的那个节点:
public void topoSortByKahn(LinkedList<Integer>[] adj) {
int[] inDegree = new int[v]; // 统计每个顶点的入度
for (int i = 0; i < v; ++i) {
for (int j = 0; j < adj[i].size(); ++j) {
int w = adj[i].get(j); // i->w
inDegree[w]++;
}
}
LinkedList<Integer> queue = new LinkedList<>();
for (int i = 0; i < v; ++i) {
if (inDegree[i] == 0) queue.add(i);
}
while (!queue.isEmpty()) {
int i = queue.remove();
System.out.print("->" + i);
for (int j = 0; j < adj[i].size(); ++j) {
int k = adj[i].get(j);
inDegree[k]--;
if (inDegree[k] == 0) queue.add(k);
}
}
}
Share
American kids would much rather be YouTubers than astronauts
美国的小孩更加想成为网红
在人类登月50周年的这个年头,乐高玩具公司做了一分调查,这个调查,咋说呢。。
我是有点持有怀疑态度的,毕竟,结果有点太悬殊了。
可以直接来看了结果:
不管是在应该还是在美国,要当宇航员的意愿都远远的弱于当网红的意愿,这个简直了?
我能说这是国产的中国式灌输的教育的成功么?还有广告的宣传到位?
因为对于小孩子来说,你在油管上面当个网红,轻松,能赚钱,但是你要是知道当个宇航员,赚的不是很多,还幸苦,还有声明危险,我很难想象小孩子回去选择当个宇航员。
最最最最最最主要的原因是啥?如果你要问一句:我们为什么要每年耗费那么多的钱,那么的技术去探索太空啊?就是个航天工程的经典之问。我相信大部分的小孩子应该是回答不上来的。
这小孩子为什么居然会选择这个答案,我真的 表示很费解。。。是不是在中国玩乐高的都是些小康,甚至高学历家庭的孩子啊。。。受众不同对不对?