Data access inhibits independent research into hiring algorithms
论文最刺耳的政策呼吁:「我们是唯一一个独立开展大规模实证研究的团队」。在招聘算法已主宰数百万人命运的情况下,研究者竟然无法获得数据来研究它——这和制药公司不让独立研究者测试药物一样荒谬。立法强制数据开放(类似欧盟 DSA 的数据访问条款)可能是唯一出路。
Data access inhibits independent research into hiring algorithms
论文最刺耳的政策呼吁:「我们是唯一一个独立开展大规模实证研究的团队」。在招聘算法已主宰数百万人命运的情况下,研究者竟然无法获得数据来研究它——这和制药公司不让独立研究者测试药物一样荒谬。立法强制数据开放(类似欧盟 DSA 的数据访问条款)可能是唯一出路。
applicants need to submit 25 applications to ensure at least one recommendation with 99.9% probability
在算法单一文化下,求职者需要投出25份申请才能以99.9%概率获得至少一次推荐;独立决策情景下只需10份。差距2.5倍,意味着算法垄断额外消耗了求职者大量时间和精力,且这个成本完全由求职者而非算法供应商承担。这是一种隐性的「搜索摩擦」转移。
Algorithmic monocultures in hiring yield systemic rejections
论文最重要的理论贡献:「算法单一文化导致系统性拒绝」。核心逻辑:当60%以上的财富百强企业都使用同一家供应商(如 HireVue)的算法时,被一家拒绝约等于被所有家拒绝。这不只是偏见问题,而是求职者无法通过「广投简历」规避的结构性陷阱——算法将个人错误变成了命运。
Adverse impact only revealed by disaggregated position-by-position analysis
方法论洞察:把所有职位数据聚合分析时,偏差几乎不可见;按职位逐一拆分后,偏差清晰浮现。揭示了「聚合陷阱」——企业和监管机构如果只看整体平均数,将永远看不到真正的歧视。这对所有 AI 公平性审计都是重要教训:分类颗粒度决定能否发现问题。
25.87% of applications submitted by Black applicants and 14.74% of applications submitted by Asian applicants are directed to positions that adversely impact them
具体数字触目惊心:黑人求职者25.87%、亚裔求职者14.74%的申请被导向了对其产生不利影响的职位。这不是统计噪音,而是在 Title VII 四分之一规则下被正式认定的歧视性影响——且这些偏差被算法系统性地复制到了156个雇主身上。
Over 90% of U.S. employers rely on hiring algorithms to screen job applicants.
超过90%的美国雇主依赖算法筛选求职者——美国就业市场的「入场券」已经大规模由 AI 控制,但监管框架远远滞后。这不是小众技术前沿问题,而是影响数亿人职业命运的社会基础设施。
DRQ performs surprisingly well in Core War, suggesting that even minimal self-play loops can reveal complex and robust strategies
「最简自博弈循环」效果出乎意料好——这与 AlphaGo/AlphaZero 的结论一致,但这里的环境更开放(Turing 完备)。DRQ 的 minimal 性是刻意设计的:不引入 fancy 的适应度函数或群体演化,只是「击败累积对手列表」。结论是:对抗压力本身就是足够强的学习信号,无需精心设计奖励函数。这对 RL 和自博弈训练有方法论意义。
动态规划本质是不是就是递归算法,再加上记忆功能呢?
动态规划常用来求解最优化问题,它们不仅包含重叠子问题,还具有另外两大特性:最优子结构、无后效性
非常好的问题。让我为您详细解释这些概念。
最优化问题是指在给定的约束条件下,寻找可能解中的最佳解(最大值或最小值)。例如: - 寻找最短路径 - 最大化利润 - 最小化成本
最优子结构是指问题的最优解包含其子问题的最优解。换句话说,可以通过组合子问题的最优解来构造原问题的最优解。
特点: - 问题可以被分解为更小的子问题 - 子问题的最优解能够用来构造原问题的最优解
例子:最短路径问题 如果从A到C的最短路径经过B,那么A到B的这段路径一定是A到B的最短路径,B到C的这段路径一定是B到C的最短路径。
无后效性是指某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及决策的影响。
特点: - 当前状态仅与前一个状态有关,与更早的状态无关 - **未来的决策只依赖于当前状态,不依赖于如何达到当前状态 ** 例子:0-1背包问题 在考虑是否将第i个物品放入背包时,只需要考虑当前背包的剩余容量和第i个物品的价值,而不需要关心背包中已经放入了哪些物品。
让我们通过一个简单的例子来说明这些概念:
问题:计算从1到n的最大连续子数组和。
```python def max_subarray_sum(arr): n = len(arr) dp = [0] * n dp[0] = arr[0]
for i in range(1, n):
dp[i] = max(arr[i], dp[i-1] + arr[i])
return max(dp)
arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4] print(max_subarray_sum(arr)) # 输出: 6 ```
在这个例子中:
最优化问题:我们在寻找最大的连续子数组和。
最优子结构:
最优解构造:原问题的最优解是所有子问题最优解中的最大值。
无后效性:
未来的决策不会影响当前的决策。
重叠子问题:
通过理解这些特性,我们可以更好地识别和解决适合使用动态规划的问题。这些特性使得我们能够将复杂问题分解为更小的子问题,并有效地重用子问题的解来构建最终的最优解。
动态规划也对问题进行递归分解,但与分治算法的主要区别是,动态规划中的子问题是相互依赖的,在分解过程中会出现许多重叠子问题。
您提出了一个很好的问题。我来解释一下动态规划和分治算法的区别,并通过一个简单的例子来说明。
动态规划和分治算法的主要区别:
分治算法:子问题通常是独立的。
重叠子问题:
分治算法:子问题通常不重叠。
解决方式:
让我们通过斐波那契数列的计算来举例说明:
斐波那契数列定义:F(n) = F(n-1) + F(n-2),其中 F(0) = 0, F(1) = 1
python
def fibonacci_divide_conquer(n):
if n <= 1:
return n
return fibonacci_divide_conquer(n-1) + fibonacci_divide_conquer(n-2)
这个实现会导致大量重复计算。例如,计算 F(5) 时:
F(5)
├── F(4)
│ ├── F(3)
│ │ ├── F(2)
│ │ │ ├── F(1)
│ │ │ └── F(0)
│ │ └── F(1)
│ └── F(2)
│ ├── F(1)
│ └── F(0)
└── F(3)
├── F(2)
│ ├── F(1)
│ └── F(0)
└── F(1)
可以看到,F(3)、F(2)等被重复计算了多次。
python
def fibonacci_dp(n):
if n <= 1:
return n
dp = [0] * (n + 1)
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
这个实现避免了重复计算。我们只计算每个子问题一次,并将结果存储在 dp 数组中。
通过这个例子,我们可以看到:
这就是为什么在处理具有重叠子问题的问题时,动态规划通常比分治算法更有效。动态规划利用了问题的这种结构,通过存储和重用子问题的解来提高效率。
我们直接看解法
递归解法:
```Java class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { if (list1 == null){ return list2; } if (list2 == null){ return list1; }
if (list1.val <= list2.val){
list1.next = mergeTwoLists(list1.next, list2);
return list1;
}
else{
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
}
} ```
哈希集合 HashSet
什么情况下会选择使用 HashSet 而不是 HashMap:
就是一定要用字符串的 equals 方法比较两个字符串是否相同,不要用 == 比较
== 是在比较是否是同一个对象
分布式系统 - 全局唯一ID实现方案
JDK8线程池-ThreadPoolExecutor动态调整corePoolSize与maximumPoolSize
Comparison method violates its general contract!
如何判断一个字符串是否经过base64加密过?
为什么在平均情况下快速排序比堆排序要优秀?
如何评价极客时间上王争的「数据结构与算法之美」的爆火?
研究者July在计算机和机器学习领域的水平怎么样?
LeetCode按照怎样的顺序来刷题比较好?
大数据开发像Hadoop、Spark需要很强的数学和算法功底吗?
什么才算是真正的编程能力?
的
为什么下面程序递归计算斐波那契数列java比c++要快?
函数式编程所倡导使用的「不可变数据结构」如何保证性能?
如何把任意的递归函数写成利用堆栈的非递归形式?
操作 AST 树都有哪些标准算法,各自的优缺点是什么?
如何在程序中将中缀表达式转换为后缀表达式?
有哪些算法惊艳到了你?
你见过最差的算法工程师能差到什么程度?
刷完 LeetCode 是什么水平?能拿到什么水平的 offer?
如何看待 Thomas Cormen 所说看完《算法导论》需要的时间?
如何正确地撸《算法导论》?
如何理解算法时间复杂度的表示法,例如 O(n²)、O(n)、O(1)、O(nlogn) 等?
程序语言中的取余是如何实现的?
有人没事儿玩Hackerrank网站都拿到多高的rank了?
函数式编程如何实现动态规划和记忆化搜索?
如何理解动态规划?
SICP换零钱迭代方法实现,是如何写的?
WeakHashMap中关于queue的疑惑 ?
graph convolutional network有什么比较好的应用task?
如何通俗的解释计算机中“合一(unification)”这个概念 ?
有没有简单易懂的算法来判定一个语言是/不是图灵完全的?
什么是动态规划(Dynamic Programming)?动态规划的意义是什么?
身份证号的末位校验码算法最后一步模11是基于什么考虑?
写尾递归函数有什么规律或技巧吗?
为什么说递归效率低?
推荐系统或信息发现领域,有哪些经典的论文?
一个算法工程师的日常是怎样的?
程序员必须掌握哪些算法?
想学好计算机算法,是否需要重新学数学呢?
首先分配一块内存空间做 bit 数组,数组的 bit 位初始值全部设为 0。 加入元素时,采用 k 个相互独立的 Hash 函数计算,然后将元素 Hash 映射的 K 个位置全部设置为 1。 检测 key 是否存在,仍然用这 k 个 Hash 函数计算出 k 个位置,如果位置全部为 1,则表明 key 存在,否则不存在。
分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之
分治法的设计思想
linear regression, dis FULPLQDQWIXQFWLRQFODVVLāHUV1D°YH%D\HVFODVVLāHUV support vector machines, logistic regression classi āHUVDQGGHFLVLRQWUHHFODVVLāHU
linear regression, dis-criminant function classifiers, Naive-Bayes classifiers,support vector machines,logistic regression classi-fiers, and decision tree classifiers.
/DWHQW6HPDQWLF$QDO\VLV
隐含语义分析
“随机森林”机器学习算法
machine learning algorithms
机器学习算法。该算法使用两种类型的数据:(a)静态数据:人口统计数据,如年龄、性别、地理区域、先前教育;(b)行为数据:学生在VLE主办的课程中的互动。这些数据来源被证明是预测学生提交作业的重要指标。
Latent Semantic Analysis
The “Random Forest” machine learning algorithm
随机深林机器学习算法