题目
涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:$\sum_{i=1}^{n}{(a_i-b_i)^2}$
,其中 ai表示第一列火柴中第 i 个火柴的高度,bi表示第二列火柴中第 i 个火柴的高度。
每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 99,999,997 取模的结果。
分析
这真是一道好题——断断续续想了几天才完全AC。
事实上,由排序不等式可知:
当$a_i, b_i$从小到大排序时,距离
继续阅读 »
原理
堆排序中的“堆”,它是:
一棵完全二叉树
树的每个节点都不比它的两个子节点小(有序)
由此得到最有用的信息:根节点是二叉树里面最大的元素
堆排序的过程是:
构造有序的堆
输出并删除最大的元素
重复前面两个步骤
继续阅读 »
突然之间想到查询一下 Python 中 sort 是使用何种算法实现, goole 之在 stackoverflow 中找到如下了回答
about-pythons-built-in-sort-method
继续阅读 »
PY有自己内建的工厂函数sorted用来排序, 它返回一个原地排序后的副本. 采用的是原地排序算法. 这个工厂函数的原型是:
{}sort(cmp=None, key=None, reverse=None) {}
继续阅读 »
Nova在NFV场景下会提供NUMA相关高级特性,这里提供一个脚本查看计算节点的NUMA相关信息。
#!/bin/bash
function get_nr_processor()
{
grep '^processor' /proc/cpuinfo | wc -l
}
function get_nr_socket()
{
grep 'physical id' /proc/cpuinfo | awk -F: '{
print $2 | "sort -un"}' | wc -l
}
function get_nr_siblings()
{
grep 'siblings' /proc/
继续阅读 »
写在前面
lists官方文档在此http://erlang.org/doc/man/lists.html,不知因为什么原因,官方文档中函数顺序和lists.erl源码里的顺序完全不一样。我是按照源码里的顺序来写的,目的是为了熟悉一下Erlang的编程风格和巩固基础语法。也不会所有函数都提到,挑下面一些来学习学习。
1. 属性说明
2. keyfind/3
3. suffix/2
4. seq/2, seq/3
5. sort/1
6. merge/1
7. concat/1
8. flatten/1, flatten/2
10. filter/2, map/2, filt
继续阅读 »
为了找工作重新拾起 C++.才发现,被 Python 宠坏后,再回头使用 c++,一下子无法适应如此复杂的情况.
回到正题,C++ 中如何排序一个 map.
我们都知道无法使用 std::sort 来排序 map,只有通过间接的方法.参考 stackoverflow 上的几个答案.
继续阅读 »