2009-03-21

私校教職師 改採退撫儲金制

私校教職師 改採退撫儲金制
【聯合晚報╱記者林修全/台北報導】2009.03.12 02:57 pm


行政院會今天通過私校教職師退撫條例草案,未來將與勞退新制的提撥制度一樣,改採「退撫儲金制」,也就是以本薪二倍的10%進行提撥,教職員個人負擔35%,政府和學校各負擔19.5%,其餘的26%部分,將從學費的2%來挹注。
而全國目前有357所私立學校,新法未來上路後,約有私校教職員約6萬3000人受益。
以 教育部提供的資料,如以最高薪級770元的私立大學教師為例,月支數額為新台幣5萬1480元,每月提撥金額是1萬296元,其中教職員自提35%、負擔 3604元,政府提撥19.5%、負擔約2008元,而學校除了要提撥19.5%、2008元外,再由2%的學費挹注2672元,總計4684元。
再以新進教師、年資30年為例,假設年收益率為4%,60歲退休,薪級為770元的私立大學教師,一次退休金將由現行的319萬元,提高到574萬元,增加了255萬元;薪級625元的私立中小學教師,一次退休金將從284萬元,提高到494萬元,增加了210萬元。
【2009/03/12 聯合晚報】

Algorithm Gossip: m元素集合的n個元素子集

Algorithm Gossip: m元素集合的n個元素子集

Ref
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/NOfM.htm

說明

假設有個集合擁有m個元素,任意的從集合中取出n個元素,則這n個元素所形成的可能子集有那些?

解法

假設有5個元素的集點,取出3個元素的可能子集如下:
{1 2 3}、{1 2 4 }、{1 2 5}、{1 3 4}、{1 3 5}、{1 4 5}、{2 3 4}、{2 3 5}、{2 4 5}、{3 4 5}


這些子集已經使用字典順序排列,如此才可以觀察出一些規則:
  1. 如果最右一個元素小於m,則如同碼錶一樣的不斷加1
  2. 如果右邊一位已至最大值,則加1的位置往左移
  3. 每次加1的位置往左移後,必須重新調整右邊的元素為遞減順序

所以關鍵點就在於哪一個位置必須進行加1的動作,到底是最右一個位置要加1?還是其它的位置?

在實際撰寫程式時,可以使用一個變數positon來記錄加1的位置,position的初值設定為n-1,因為我們要使用陣列,而最右邊的索引值為最大 的n-1,在position位置的值若小於m就不斷加1,如果大於m了,position就減1,也就是往左移一個位置;由於位置左移後,右邊的元素會 經過調整,所以我們必須檢查最右邊的元素是否小於m,如果是,則position調整回n-1,如果不是,則positon維持不變。


*
#include <stdio.h> 
#include <stdlib.h>

#define MAX 20

int main(void) {
int set[MAX];
int m, n, position;
int i;

printf("輸入集合個數 m:");
scanf("%d", &m);
printf("輸入取出元素 n:");
scanf("%d", &n);

for(i = 0; i < n; i++)
set[i] = i + 1;

// 顯示第一個集合
for(i = 0; i < n; i++)
printf("%d ", set[i]);
putchar('\n');

position = n - 1;

while(1) {
if(set[n-1] == m)
position--;
else
position = n - 1;

set[position]++;

// 調整右邊元素
for(i = position + 1; i < n; i++)
set[i] = set[i-1] + 1;

for(i = 0; i < n; i++)
printf("%d ", set[i]);
putchar('\n');

if(set[0] >= m - n + 1)
break;
}

return 0;
}

*
public class NofM {
private int m;
private int[] set;
private boolean first;
private int position;

public NofM(int n, int m) {
this.m = m;
first = true;
position = n - 1;

set = new int[n];
for(int i = 0; i < n; i++)
set[i] = i + 1;
}

public boolean hasNext() {
return set[0] < m - set.length + 1;
}

public int[] next() {
if(first) {
first = false;
return set;
}

if(set[set.length-1] == m)
position--;
else
position = set.length - 1;

set[position]++;

// 調整右邊元素
for(int i = position + 1; i < set.length; i++)
set[i] = set[i-1] + 1;

return set;
}

public static void main(String[] args) {
NofM nOfm = new NofM(3, 5);

while(nOfm.hasNext()) {
int[] set = nOfm.next();
for(int i = 0; i < set.length; i++) {
System.out.print(set[i]);
}
System.out.println();
}
}
}

*

{a,b,c,d,e,f}

abc
abd
abe
abf
acd
ace
.
.
.