Где GTK находит имена значков для использования с gtk_image_new_from_icon_name ()?

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-

Ближайшая группа из 3 точек Есть ли известный, эффективный алгоритм поиска ближайшей группы из трех точек в облаке? Это похоже на ближайшую пару точек задача, но я ищу три очка вместо двух. ...

Существует ли известный эффективный алгоритм поиска ближайшей группы из трех точек в облаке?

Это похоже на ближайшую пару точек задачи , но я ищу три точки вместо двух.


Изменить
Определение «ближайшего» повлияет на сложность алгоритма. Как указал Джек , нахождение минимального треугольника площади является 3sum-твердым и в любом случае не очень подходящим для моего применения.

Я надеюсь, что существует более эффективный алгоритм для нахождения минимального периметра (т.е. | AB | + | AC | + | BC |) треугольника или чего-то подобного (например, минимальный | AB | ² + | AC | ² + | BC | ²). Я не знаю причин, почему это должно быть 3sum-трудно, так как существование 3 коллинеарных точек в другом месте не повлияет на результат.


Примечание: мои точки имеют восемь измерений, поэтому любой алгоритм, который ограничен меньшим количеством измерений, не подходит.

21
задан Community 23 May 2017 в 10:29
поделиться

1 ответ

Вот Решение 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
0
ответ дан 20 October 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: