GTK может создавать изображения по имени «icon from current icon theme». Например:
#!/usr/bin/env python
import gtk; wnd=gtk.Window(); img=gtk.Image();
img.set_from_icon_name( "go-jump", gtk.ICON_SIZE_BUTTON );
wnd.add( img ); img.show(); wnd.show(); gtk.main()
Появится окно с красивой стрелкой внутри. Но - только на убунту. В Windows или OSX появится окно со значком «нет изображения» внутри: (. Так что мои вопросы - где GTK хранит имена икон, как «перейти»? Доступен ли какой-либо список или спецификация, например, для значков запасов? Может быть, это какой-то GTK API i может использовать для перечисления таких значков?
-121--975060-
Существует ли известный эффективный алгоритм поиска ближайшей группы из трех точек в облаке?
Это похоже на ближайшую пару точек задачи , но я ищу три точки вместо двух.
Изменить
Определение «ближайшего» повлияет на сложность алгоритма. Как указал Джек , нахождение минимального треугольника площади является 3sum-твердым и в любом случае не очень подходящим для моего применения.
Я надеюсь, что существует более эффективный алгоритм для нахождения минимального периметра (т.е. | AB | + | AC | + | BC |) треугольника или чего-то подобного (например, минимальный | AB | ² + | AC | ² + | BC | ²). Я не знаю причин, почему это должно быть 3sum-трудно, так как существование 3 коллинеарных точек в другом месте не повлияет на результат.
Примечание: мои точки имеют восемь измерений, поэтому любой алгоритм, который ограничен меньшим количеством измерений, не подходит.
Вот Решение JavaScript 3Sum Самая Близкая проблема от Leetcode:
const threeSum = (arr, sum) => {
const ilength = arr.length-2;
const jlength = ilength+1;
let total;
let closest = Infinity;
let diff = Math.abs(closest - sum);
for(let i=0, j=i+1, k=j+1; i<ilength; i++, j++, k++) {
total = arr[i]+arr[j]+arr[k];
if (diff > (Math.abs(total - sum))) {
closest = total;
if (closest === sum) {
break;
}
diff = Math.abs(closest - sum);
}
if (j<jlength) {
i--;
} else {
j=i+1;
}
if (k<arr.length) {
j--;
} else {
k=j+1
}
}
return closest;
}
console.log(threeSum([-1, 0, 1, 2, -1, -4, -3, 5, -6, 0], 11))
8